【问题标题】:Best practices: log management for microservices based on java, running on k8s最佳实践:基于java的微服务日志管理,运行在k8s上
【发布时间】:2018-09-29 00:36:40
【问题描述】:

我们有基于 Java 的应用程序 [我们正在使用 SpringBoot 和 Dropwizard],遵循微服务架构,在 K8s 集群上运行。

我们正在使用 log4j 打印出日志消息。我们已将 log4j 配置为将日志写入文件。我们发现访问这些日志非常困难[目前我们执行到 docker 容器中并查看日志]。我正在做一些研究,许多人建议设置 log4j 将日志写入标准输出流或控制台而不是文件。但我们希望将日志保存更长时间[更像是长期存档]。

因此,看起来标准是 EFK 或 ELK [开源选项]。我只是想了解为了使用 log4j 为应用程序提供可靠的日志记录,需要遵循哪些最佳实践/配置。部署和配置 EFK 或 ELK 是一个不错的选择吗?如果是这样,谁能告诉我应该如何修改我的 log4j 属性以将日志发送到堆栈?

【问题讨论】:

标签: java kubernetes log4j


【解决方案1】:

这是一个意见问题,所以我会以固执的方式回答。我们遇到过这个问题。问题是 log4j(或 log4j2)日志非常健谈,例如,每次遇到 Java 异常时,它都会打印成多行。这与容器的常规标准输出日志相结合似乎令人费解,将所有内容与标准输出分开发送到Fluentd 或类似logspout 的东西会很痛苦

您可以在容器中分配磁盘空间并将 log4j2 日志发送到容器内的文件中。然后,您可以定期修剪现有容器或截断日志。使用 [Kubernetes](您还可以阅读 Kubernetes logging,您也可以设置 FluentdFilebeat 边车来发送您的日志。

但在这种情况下,IMO 的最佳解决方案是将 log4j 日志直接发送到 Elasticsearch 集群,并可能将数据存储在其自己的索引中。这是something,您可以使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    相关资源
    最近更新 更多