Rails on Elastic Beanstalk 如何配置 rsyslog?
在 Elastic Beanstalk 的 Rails 环境中配置 rsyslog:通过 .ebextensions 写 rsyslog 配置文件把 Rails 日志转发到集中日志服务器;CloudWatch Logs 需另行配置平台日志流或采集器。本文给出 .ebextensions 配置示例与注意事项。
在已安装并启用 rsyslog 的 Linux 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 {
action(type="omfwd" target="logserver.internal" port="514"
protocol="tcp" queue.type="LinkedList"
queue.size="10000")
stop
}
container_commands:
01_restart_rsyslog:
command: "rsyslogd -N1 && systemctl restart rsyslog"
上例使用 TCP 转发和有界内存队列,进程异常退出可能丢失队列内容。stop 仅阻止后续规则处理,不能撤销此前规则已写入的日志。
让 Rails 日志进 syslog
Rails 侧用 Syslog::Logger 或 remote_syslog_logger gem,把日志输出指向 syslog 并打上 programname 标签,与上面的 rsyslog 规则呼应。
更简单的替代
EB 支持把指定的平台日志流式传输到 CloudWatch Logs(需启用并配置权限);自定义 Rails/syslog 文件不会因此自动全部采集——没有集中 syslog 服务器时优先用它,日志再经订阅过滤器送往其他地方。
常见问题(FAQ)
Q:配置改了没生效? 检查 /var/log/cfn-init.log 与 eb-engine.log,确认 files 段写入成功、rsyslog 重启无报错。
Q:Amazon Linux 2023 注意事项? 先确认具体平台分支是否安装并启用 rsyslog,不能假定 AL2023 默认存在;安装与服务配置完成后,先用 rsyslogd -N1 验证,再重启。