繁体   English   中英

最佳实践:基于java的微服务日志管理,运行在k8s上

[英]Best practices: log management for microservices based on java, running on k8s

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM