有什么方法可以解决大型系统中的日志大海捞针问题?

What are ways to solve the logging haystack problem in larger systems?

我一直认为日志记录越多越好 debugging/troubleshooting。如果您正在记录正确的事情而不是记录笨拙的事情,它只会让事情变得容易得多。我总是在较小的规模上这样做。你会如何在更大的系统中做到这一点?这是否值得,或者只记录识别问题所需的内容以及问题是什么但不是非常具体的细节会更有益。

记录大海捞针的问题是,太多的日志 lines/rows 很难跟踪完整的请求或多个请求。请求中没有分隔,只有 line/row 个请求。

在小范围内,我成功地完成了以下操作,我非常喜欢这种方法。见下文,只是一个快速的高级设计...是的,我是一名 .net 开发人员 :)。

仅供参考:不确定这个问题的最佳位置。

如何调试大型系统的挑战非常广泛,因此最好将其分解为几个独立的部分。你

从所有系统收集日志

一种常见的方式是使用现有系统进行集中的日志收集和管理。您可以使用 Splunk 等商业解决方案或 ELK (Elastic Logstash Kibana) 等开源堆栈。这些系统通常有主要的3个部分

  1. 日志收集——监听日志输出并将它们转发到集中位置。可以根据需要和使用的技术以多种不同的方式完成。
  2. 集中存储 - 一些 DBMS 系统,它允许存储大量数据并对其进行索引以便可以有效地搜索它们
  3. GUI - 允许用户搜索 DBMS 并设置仪表板和警报

https://www.elastic.co/what-is/elk-stack

跨多个系统跟踪请求

大多数设置的最佳方法是生成唯一的 correlationId,然后将其传送到所有系统并用作日志消息的一部分。

https://dzone.com/articles/correlation-id-for-logging-in-microservices

记录器配置

调试最重要的是实际生成日志消息。这个主题本身就相当复杂。由于过多的日志记录使代码阅读起来不是很清楚,过多的日志记录降低了性能,难以理解的日志消息使问题难以理解。