需要设置自定义 Kubernetes 日志记录策略

Need to setup a Customized Kubernetes Logging strategy

到目前为止,在我们将 Web 服务部署到 VM 集群的过程中,我们一直在有效地使用基于 Log4j2 的多文件登录到持久卷,日志文件每天都在其中滚动。我们需要维护日志大约 3 个月,然后才能清除它们。

我们正在迁移到 Kubernetes 基础设施,并且一直在努力寻找适应 Kubernetes 集群的最佳日志记录策略。我们不太喜欢将所有日志吐出到 STDOUT/ERROUT 并使用像 Datadog 这样的集中式工具来管理日志的策略。

我们对 Kubernetes 日志记录解决方案的设计要求是:

  1. 将 Lo4j2 用于多个文件附加程序。
  2. 我们要维护多文件日志追加器结构。
  3. 我们希望在存档中保留滚动日志大约 3 个月
  4. 需要一种方法来轻松访问日志以进行搜索、过滤等
  5. 用于查看日志的 Kubectrl 设置对于我们的需求来说可能有点太麻烦了。
  6. 理想情况下,我们希望使用 Datadog 仪表板方法,但使用多文件附加程序。
  7. 我们 运行 使用的 Datadog 的严重限制是需要将所有内容都输出到 STDOUT。

开始使用容器平台或构建容器意味着作为第一步,我们必须改变我们的思维方式。在容器中创建日志文件不是最佳做法,原因有二:

  1. 您的容器应该是无状态的,因此不应在其中保存任何内容,因为当它被删除并再次创建时,您的文件将消失。
  2. 当您使用被动日志记录 (STDOUT/STDERR) 发送输出时,Kubernetes 会为您创建日志文件,fluentd 或 logstash 等平台可以使用此文件来收集这些日志并将其发送到日志聚合工具。

我推荐使用 Passive Logging,这是 Kubernetes 推荐的方式,也是云原生应用程序的标准,也许将来你需要在云服务中使用你的应用程序,它也使用 Passive Logging 来检查应用程序错误

在以下链接中,您将看到一些关于为什么 k8s 推荐使用 Passive Logging 的参考资料:

  1. k8s checklist best practices
  2. Twelve Factor Applications Logging