您可能需要向日志消息中添加常见信息,例如当前经过身份验证的用户的标识符、当前上下文的租户或请求URI。您可以直接将该信息添加到日志消息中,就像在先前的示例中所做的那样,它将起作用,但数据不会被结构化。相反,我更喜欢使用结构化数据。\n\nSLF4J和常见的日志记录库(如Logback和Log4J2)支持通过名为Mapped Diagnostic Context(MDC)的工具向请求上下文(身份验证、租户、线程)添加结构化信息。如果您想了解更多关于MDC的信息,我建议查看您使用的特定日志记录库的官方文档。\n\n现在,我们的应用程序将日志消息记录为事件流,我们需要将它们收集和存储在一个可以查询的中央位置。下一节将提供一个解决方案来实现这一目标。\n\n当您转向像微服务和复杂环境(如云)这样的分布式系统时,管理日志变得具有挑战性,并且需要与传统应用程序不同的解决方案。如果发生故障,我们在哪里可以找到关于故障的数据?传统应用程序会依赖存储在主机上的日志文件。云原生应用部署在动态环境中,被复制,并具有不同的生命周期。我们需要收集环境中运行的所有应用程序的日志,并将它们发送到一个中央组件,以便对其进行聚合、存储和搜索。\n\n在云中管理日志有很多选择。云提供商有自己的解决方案,如Azure Monitor Logs和Google Cloud Logging。市场上也有许多企业解决方案,如Honeycomb、Humio、New Relic、Datadog和Elastic。\n\n对于Polar Bookshop,我们将使用基于Grafana可观测性堆栈(https://grafana.com)的解决方案。它由开源技术组成,您可以在任何环境中自行运行。它也可以作为Grafana Labs提供的托管服务(Grafana Cloud)使用。\n\n我们将使用Grafana堆栈的组件来管理日志,其中Loki用于日志存储和搜索,Fluent Bit用于日志收集和聚合,Grafana用于日志数据可视化和查询。\n\n您使用哪种技术来管理日志是一个平台选择,不应对应用程序产生任何影响。例如,您应该能够在不对Polar Bookshop应用程序进行任何更改的情况下,将Grafana堆栈替换为Humio。\n\n我们需要一个日志收集器来获取所有运行应用程序的标准输出中的日志消息。使用Grafana堆栈,您可以从多个选项中自由选择日志收集器。对于Polar Bookshop系统,我们将使用Fluent Bit,这是一个开源且经过CNCF认证的项目,它“使您能够从多个来源收集日志和指标,通过过滤器对其进行丰富,并将其分发到任何定义的目标”(https://fluentbit.io)。Fluent Bit是Fluentd的子项目,Fluentd是“一个用于统一日志层的开源数据收集器”(www.fluentd.org)。\n\nFluent Bit将从所有运行的容器中收集日志,并将其转发到Loki,后者将存储并使其可搜索。Loki是“一个设计用于存储和查询所有应用程序和基础设施日志的日志聚合系统”(https://grafana.com/oss/loki)。\n\n最后,Grafana将使用Loki作为数据源,并提供日志可视化功能。Grafana“允许您查询、可视化、提醒和理解”您的遥测数据,无论其存储在何处(https://grafana.com/oss/grafana)。图13.2说明了这种日志架构。

日志管理:使用Grafana堆栈进行结构化日志记录

原文地址: https://www.cveoy.top/t/topic/qaPz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录