如何将混在/var/syslog中的Sidekiq日志同步至CloudWatch?
解决Sidekiq日志同步至CloudWatch的方案
方案1:将Sidekiq日志输出到单独文件,再用CloudWatch Agent监控
Sidekiq支持输出到标准输出,你可以在启动时将stdout重定向到单独的日志文件:
# 启动Sidekiq时重定向日志到单独文件 bundle exec sidekiq >> /var/log/sidekiq.log 2>&1
- 为避免日志文件过大,配置logrotate管理该文件,创建
/etc/logrotate.d/sidekiq:
/var/log/sidekiq.log { daily missingok rotate 7 compress delaycompress notifempty create 640 root adm }
- 配置CloudWatch Agent监控这个文件,在
/etc/awslogs/awslogs.conf中添加:
[sidekiq-log] file = /var/log/sidekiq.log log_group_name = /your-app/sidekiq/production log_stream_name = {instance_id}/sidekiq datetime_format = %Y-%m-%d %H:%M:%S
- 重启CloudWatch Agent服务让配置生效。
方案2:通过Syslog过滤分流Sidekiq日志
如果日志已经输出到/var/syslog,可以用rsyslog(或syslog-ng)将Sidekiq的日志单独提取到文件:
- 创建rsyslog配置文件
/etc/rsyslog.d/sidekiq.conf:
:programname, isequal, "sidekiq" /var/log/sidekiq.log & stop # 阻止该日志继续写入syslog
- 重启rsyslog服务:
sudo systemctl restart rsyslog
- 后续步骤同方案1,配置CloudWatch Agent监控
/var/log/sidekiq.log即可。
方案3:自定义Sidekiq日志格式,配合CloudWatch过滤收集
如果不想修改日志输出路径,可以自定义Sidekiq的日志格式,让日志带有专属标识,方便CloudWatch过滤:
在Rails项目的config/initializers/sidekiq.rb中添加:
Sidekiq.configure_server do |config| config.logger = Logger.new(STDOUT) config.logger.formatter = proc do |severity, timestamp, progname, msg| "[Sidekiq] #{timestamp.strftime('%Y-%m-%d %H:%M:%S')} #{severity}: #{msg}\n" end end
- 启动Sidekiq时保持输出到stdout,然后配置CloudWatch Agent收集该进程的stdout日志,或者将stdout重定向到文件后再收集。
- 在CloudWatch控制台中,可通过
[Sidekiq]标识过滤日志,实现单独查看。
内容的提问来源于stack exchange,提问作者RanH
相关产品推荐
相关产品推荐

