首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分析分布式系统中的日志?

如何分析分布式系统中的日志?
EN

Stack Overflow用户
提问于 2022-06-11 10:28:57
回答 1查看 53关注 0票数 0

当分布式系统(如raft节点)发生意外行为时,请求或数据流的逻辑趋势通常只能由日志来分析。然而,由于分布式系统,这是困难的。我发现像希维兹这样的工具可以可视化通过日志的请求或数据流,但需要修改源代码。还有其他类似的入侵工具吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-14 04:00:23

有两种主要方法。一个是拥有一个工具,它可以访问每台服务器并搜索它们的日志。另一种选择是为日志设置一个中心位置,所有节点都将日志推送到该存储区--这就是AWS CloudWatch的工作方式。

在任何一种情况下,从运算符的角度来看,都有一个工具可以搜索所有日志。

第二部分你的问题-如何使这一分析有效。

首先,原木的质量应该很好。这是一件天真的事情,但它是非常重要的。我数不清我分析了多少次详细但无用的日志。

第二个挑战--如何分析跨越多个节点的进程。这就更复杂了。这里有两个主要特点:

  1. 如何找到与同一“事件”相关的所有日志--例如,假设一个api调用被调用了5个服务--我们如何在这些服务中跟踪这个调用。这里的典型解决方案是在第一个服务上生成唯一的请求id,然后通过所有服务传播这个id。
  2. 如何跨节点重新组合调用顺序。从“理论”的角度来看-这个问题是关于总顺序-我们需要能够接受任何两个日志事件,并说明哪一个发生的第一。在这里,我们不能使用时间戳,因为它们不够精确。幸运的是,有一个众所周知的简单算法来处理这个问题: Lamport时间戳。当然,开发人员必须将其添加到代码中,以使其正常工作。它可以是服务代码,也可以是日志代理代码(日志代理是聚合所有日志的工具)。值得一提的是,如果您的分布式系统具有类似于调用结构的树,那么总订单可能是过度的,例如,服务A总是接收来自用户的请求,然后调用服务B和C--在这种情况下,执行请求id就足够了--正如您已经知道的那样。在Raft这样的情况下,总订单是必需的,在这种情况下,谁打电话给谁并不总是很清楚。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72583567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档