Rails on Elastic Beanstalk 如何配置 rsyslog?

在 Elastic Beanstalk 的 Rails 环境中配置 rsyslog:通过 .ebextensions 写 rsyslog 配置文件把 Rails 日志转发到集中日志服务器;CloudWatch Logs 需另行配置平台日志流或采集器。本文给出 .ebextensions 配置示例与注意事项。

最佳实践
Rails on Elastic Beanstalk 如何配置 rsyslog?封面

在已安装并启用 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 验证,再重启。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台