如何聚合来自大量(微)服务的日志

How to aggregate logs from a large number of (micro)services

我们将使用 Spring Boot 构建大量(微)服务。这些当然会产生大量不同的日志。管理这些日志并理解它们的选项和最佳实践是什么?感谢您的帮助!

这取决于您想如何理解日志。您可以使用 ELK 等丰富的日志聚合平台来收集和索引来自不同微服务实例的所有日志。使用它,您可以根据多个属性(如服务器 IP、服务名称、日期范围等)搜索日志。尽管在生产中您需要使用最佳实践来实现高可用性,但设置起来相当简单。

如果您想进一步关联 跨系统不同分布式组件的日志,您可能需要做更多的工作。例如,如果您想在所有正在使用的微服务中遵循相同的 "request",您可以附加一个 公共标识符 (例如 session ID)到在每个服务中记录消息。您将需要以某种方式跨服务边界传达此通用标识符。例如,如果您的服务是通过 HTTP 访问的,您可以通过 HTTP header 发送 ID 并将上下文侦听器添加到您的微服务以检测特殊 header 并将 ID 包含在每条日志消息中。如果您围绕标准日志记录库开发一个薄包装器,它将包含对开发人员透明的 ID,这可以变得更容易。这种方法的额外好处是让您在所有服务中强制执行日志消息格式。 (还有其他方法可以做到这一点,例如在 ELK 中使用过滤器)

然后,当您稍后搜索聚合日志时,您可以搜索特定 ID 并在所有使用的微服务中跟踪给定请求。