问题描述
在拥有一个基本的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模块可能是更常见的选择。
请注意,以上是一般情况下的建议,具体的最佳选择取决于您的组织和团队的需求和环境。