使用filebeat还是具有lumberjack功能的app-logging模块来收集日志

88次阅读
没有评论

问题描述

在拥有一个基本的ELK设置,用于聚合大约15个运行各种服务的虚拟机的日志。所有虚拟机都配置了filebeat syslog转发器,并在logstash中有一个单一的输入。用户有一些运行Node.js Web应用程序的应用服务器,这些应用程序输出JSON日志。为了使日志结构化,用户有两个选择:

选项A

告诉Node.js应用程序将日志输出到一个可旋转的文件/var/app/app.log中。将app.log添加到filebeat的日志配置中,并推送到logstash,然后在[source] =~ app.log上设置一个过滤器来解析JSON。

选项B

告诉Node.js应用程序使用一个模块(例如node-bunyan-lumberjack),该模块独立连接到logstash并将日志推送到那里,而不使用filebeat。
用户的问题是:
哪种设置更常见,为什么?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1:使用filebeat

使用filebeat来收集日志是一种常见的设置。它具有以下优点和缺点:

优点:

  • 简单易用:filebeat是一个轻量级的日志收集器,易于安装和配置。
  • 可靠性:filebeat可以将日志写入磁盘,即使logstash宕机,也不会丢失日志。
  • 灵活性:filebeat可以与logstash一起使用,可以对日志进行过滤、解析和转换,以满足特定的需求。

缺点:

  • 额外的磁盘空间消耗:使用filebeat需要将日志写入磁盘,可能会占用一定的磁盘空间。
  • 对磁盘IO的影响:写入磁盘可能会对系统的磁盘IO产生一定的影响。

方案2:使用具有lumberjack功能的app-logging模块

使用具有lumberjack功能的app-logging模块来直接连接到logstash并推送日志是另一种常见的设置。它具有以下优点和缺点:

优点:

  • 减少资源消耗:使用app-logging模块可以减少对磁盘空间的消耗,因为日志不需要写入磁盘。
  • 实时性:使用app-logging模块可以实时将日志推送到logstash,无需等待filebeat的轮询。

缺点:

  • 依赖性:使用app-logging模块需要额外的依赖,可能需要对现有的应用程序进行修改。
  • 可靠性:如果logstash宕机,日志可能会丢失,因为没有将日志写入磁盘。

结论

选择使用filebeat还是具有lumberjack功能的app-logging模块取决于您的具体需求和环境。如果您更关注日志的可靠性和灵活性,并且可以接受一些额外的磁盘空间消耗和磁盘IO影响,那么使用filebeat可能是更常见的选择。如果您更关注资源消耗和实时性,并且可以接受一些日志丢失的风险,那么使用具有lumberjack功能的app-logging模块可能是更常见的选择。

请注意,以上是一般情况下的建议,具体的最佳选择取决于您的组织和团队的需求和环境。

正文完