我计划为我们的一个项目构建一个集中式日志系统,该项目有多个用 Java、Python 和 Scala 编写的组件。我想从不同部分(REST 服务器、Spark 作业、Airflow 服务器)收集日志以记录到 Elastic 搜索中并建立索引。我可以看到 Python 中都有直接库& Java日志模块将日志从应用程序直接推送到logstash。我可以看到 filebeat 可以在服务器上配置,将日志从文件推送到logstash。使用 filebeat 比直接将日志发送到 Logstash 有什么优势?最佳实践是什么?
最佳答案
以下是这两种方法的一些优点和缺点:
应用程序日志 => Logstash
优点:
- 需要管理的组件较少,且流程简单
缺点:
- Logstash 拥堵或中断可能会对您的应用程序产生不利影响
- 更改日志目标可能需要您重新部署或重新启动应用程序
应用程序日志 => Filebeat => Logstash
优点:
- Filebeat 是一个轻量级实用程序,可让您将日志处理与应用程序逻辑解耦
- 更改日志目标非常简单,并且它本身支持多个 Logstash 目标实例之间的负载平衡
- 可以使用其他字段来丰富日志,或者您可以仅通过更改 filebeat 配置来执行日志的条件处理,例如将客户 A 的日志发送到 Logstash A
- 日志在本地缓冲,即使logstash进程重新启动或在一定时间内不可用,日志也会可靠地传输到Logstash(前提是您的日志文件保留在磁盘上以供filebeat使用并且具有适当的配置)<
缺点:
- 应用架构中需要管理的另一个组件
- 需要额外的系统资源(通常进行非常轻量级的处理)
关于java - Filebeat 与直接从应用程序将日志推送到 Logstash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55694199/