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

一切都很好

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

安德鲁

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

无论哪种情况,从操作员的角度来看,都有一个工具可以让他们搜索所有日志。

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

首先,原木应该质量好。这种说法很幼稚,但很重要。我数不清我分析了多少次详细但无用的日志。

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

  1. 如何查找与同一“事件”相关的所有日志——例如,假设一个 api 调用导致 5 个服务被调用——我们如何在这些服务中跟踪这个调用。这里的典型解决方案是在第一个服务上生成唯一的请求 id,然后通过所有服务传播这个 id。
  2. 如何重新组装跨节点的调用顺序。从“理论”的角度来看——这个问题是关于总订单的——我们需要能够获取任意两个日志事件并说出哪个先发生。在这里我们不能使用时间戳,因为它们不够准确。对我们来说幸运的是,有一个众所周知且简单的算法来处理这个问题:Lamport 时间戳。当然,开发人员必须将其添加到代码中才能使其正常工作。它可以是服务代码,也可以是日志代理代码(日志代理是聚合所有日志的工具)。值得一提的是,如果您的分布式系统具有类似树的调用结构,那么总顺序可能是一种过度杀伤力,例如服务 A 总是接收来自用户的请求,然后调用服务 B 和 C - 在这种情况下,保留请求 id 就足够了 - 因为你已经知道顺序了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章