Rails on Elastic Beanstalk 如何配置 rsyslog?
在 Elastic Beanstalk 的 Rails 环境中配置 rsyslog:通过 .ebextensions 写 rsyslog 配置文件把 Rails 日志转发到集中日志服务器或 CloudWatch。本文给出 .ebextensions 配置示例与注意事项。
EB 环境自定义 rsyslog 的标准通道是 .ebextensions:在配置文件中用 files: 键写入 /etc/rsyslog.d/ 下的规则文件,并用 container_commands 重启 rsyslog 生效。
配置示例
# .ebextensions/rsyslog.config
files:
"/etc/rsyslog.d/10-rails-logs.conf":
mode: "000644"
owner: root
group: root
content: |
# 把 Rails 日志转发到集中日志服务器
if $programname == 'rails' then @@logserver.internal:514
& ~
container_commands:
01_restart_rsyslog:
command: "service rsyslog restart"
@@ 表示 TCP 传输(@ 是 UDP);& ~ 表示匹配到的日志不再写入本地文件。
让 Rails 日志进 syslog
Rails 侧用 Syslog::Logger 或 remote_syslog_logger gem,把日志输出指向 syslog 并打上 programname 标签,与上面的 rsyslog 规则呼应。
更简单的替代
EB 平台日志可直接集成 CloudWatch Logs(控制台一键开启)——没有集中 syslog 服务器时优先用它,日志再经订阅过滤器送往其他地方。
常见问题(FAQ)
Q:配置改了没生效? 检查 /var/log/cfn-init.log 与 eb-engine.log,确认 files 段写入成功、rsyslog 重启无报错。
Q:Amazon Linux 2023 注意事项? rsyslog 服务名与路径基本一致,用 systemctl restart rsyslog。