对于尚不支持 syslog 的应用程序,如何将日志重定向到 syslog?

对于尚不支持 syslog 的应用程序,如何将日志重定向到 syslog?

Nginx 添加记录到系统日志版本 1.7.1 中的功能。

我只能从 获取版本 1.6.2 ppa:nginx/stable,或者从默认的 Ubuntu 软件包源获取版本 1.4.6。

我有一个通用日志(rsyslog)服务器,它从几十台服务器收集数据。 rsyslog 已在每台计算机上配置为将日志传播到主日志计算机或故障转移(如果主日志计算机已关闭)。

将 Nginx 日志获取到本地 syslog(然后通过 rsyslog 发送到远程服务器)的选项有哪些?


注意:虽然欢迎直接与 Nginx 日志记录相关的答案,但我也在寻找适用于的一般答案任何应用程序(因此缺乏这个问题的标签)。原因是我还没有迁移所有应用程序syslog,我预计其他应用程序也会导致类似的问题。


与已接受答案相关的重要说明:

  1. inotify趁有空的时候自2012年4月12日rsyslog 5.9.6 beta版本起,否则仅支持自 2014 年 1 月 24 日起在 rsyslog 8.1.5 中

    这需要ppa:adiscon/v8-stable在 Ubuntu 中使用,因为在撰写本文时最新的 Ubuntu 发行版 (14.04 LTS) 使用的是 rsyslog 7.4.4。

  2. inotify模式在 中指定module(),而不是input()

    module(load="imfile" mode="inotify")
    

    对于inotify,PollingInterval不必指定。

  3. 当配置不正确时,rsyslog不会将任何内容记录到/var/log/syslog.为了检查问题所在,该命令rsyslogd -N1似乎非常有帮助。显然,ps -A | grep rsyslog这也有助于确定是否rsyslog正在运行。

    rsyslog可以通过执行获取当前版本rsyslogd -version

  4. ReadModeinput() 应设置为零

  5. 和配置module()input()“应该放在 rsyslog.conf 文件的顶部”

  6. 看来rsyslog讨厌Nginx了。无论在/var/log/nginx/或上设置什么所有者、组或权限/var/log/nginx/access.log,文件更改都会被忽略(没有任何错误)。对于目录中创建的任何其他文件也会发生同样的情况/var/log/nginx/

    /home/demo/当在不同目录(例如或)中创建文件时,更改将按预期/var/log/反映。syslog

答案1

我假设您在本地计算机上运行 rsyslog 并且它将日志转发到远程日志服务器。

从 rsyslog 文档来看,您似乎可以定义一个输入模块来完全执行您想要的操作。我在这里看到了它的详细信息:

http://www.rsyslog.com/doc/master/configuration/modules/imfile.html

它甚至提供了一些漂亮的例子。

相关内容