将日志文件写入慢速磁盘或将 Tomcat 访问日志发送到 ElasticSearch?

Posted

技术标签:

【中文标题】将日志文件写入慢速磁盘或将 Tomcat 访问日志发送到 ElasticSearch?【英文标题】:Write Logfiles to Slow Disk or sending Tomcat Access Logs to ElasticSearch? 【发布时间】:2021-11-26 06:34:50 【问题描述】: 我的服务 (tomcat/java) 在 kubernetes 集群 (AKS) 上运行。 我想将日志文件(tomcat 访问日志、带有 logback 的应用程序日志)写入 AzureFile 卷。 我不想将访问日志写入标准输出,因为我不想将访问日志与应用程序日志混在一起。

问题

我希望所有日志记录都是异步完成的,因此写入缓慢的 AzureFile 卷不会影响性能。 这是正确的吗?

更新

最后我想收集日志文件,以便我可以将所有日志发送到 ElasticSearch。

特别是我需要一种方法来收集访问日志。

【问题讨论】:

【参考方案1】:

如果您想将访问日志发送到 Elastic Search,您只需扩展 AbstractAccessLogValve 并实现 log 方法即可。

AbstractAccessLogValve 已经包含了格式化消息的逻辑,所以你只需要添加逻辑来发送格式化的消息。

【讨论】:

【参考方案2】:

是的,你是对的,但仍然在这里取决于你如何编写日志。如果异步你正在编写很长的过程,你的文件系统很慢。如果是 NFS,也有可能出现网络延迟等问题。

如果将 NFS 和 Bucket 卷直接附加到多个 POD,我发现了性能问题。

如果你的写作速度很慢,异步线程可能需要时间来完成工作并占用更多资源,但这仍然取决于代码和编写代码的方式。

理想情况下,人们用来存储在 Elasticsearch 中以便快速检索和管理。

人们根据需求使用不同的堆栈,但大多数都由 elasticsearch 支持,例如 Graylog、ELK。

为了向这些堆栈发送或写入日志,人们使用 UDP,我个人更喜欢 GELF UDP,并在 Graylog 上抛出日志并忘记。

【讨论】:

好点:最后我想使用 Elasticsearch。问题是,tomcat 访问日志的日志记录选项是有限的。这里不可能使用 GELF 作为目标。而且我不喜欢将 filebeat 添加到我的每个 pod 的想法。所以我认为在单个 NFS 卷中收集日志文件可能是个好主意。 是的,这是个好主意,但我从未尝试将文件写入 NFS,不确定 tomcat 的效率如何。如果您正在寻找好的 NFS,我建议您查看 MinIO 和 GlusterFS,它们确实支持高 IOPS 写入和读取,因此不会有太多问题。 min.io 看看这个。 您可以通过扩展AbstractAccessLogValve 来创建自定义访问日志Valve,其中已经包含格式化逻辑并将您的日志发送到Elastic Search。 对不起,我应该从一开始就问得更好。我认为 Piotr 的建议解决方案更适合我的需求,因为我不需要其他工具。 @HarshManvar 无论如何,我感谢您的帮助并支持您的回答。

以上是关于将日志文件写入慢速磁盘或将 Tomcat 访问日志发送到 ElasticSearch?的主要内容,如果未能解决你的问题,请参考以下文章

tomcat默认日志路径更改

微服务中间键日志相关

当运行时修改写入名称节点中的编辑日志文件时,编辑日志文件是在 RAM 还是本地磁盘上更新

spring boot .war tomcat 应用程序日志不存在

如何将应用程序日志写入文件并获取它们

tomcat日志切割和定期删除