Nginx 添加记录到系统日志版本 1.7.1 中的功能。
我只能从 获取版本 1.6.2 ppa:nginx/stable
,或者从默认的 Ubuntu 软件包源获取版本 1.4.6。
我有一个通用日志(rsyslog)服务器,它从几十台服务器收集数据。 rsyslog 已在每台计算机上配置为将日志传播到主日志计算机或故障转移(如果主日志计算机已关闭)。
将 Nginx 日志获取到本地 syslog(然后通过 rsyslog 发送到远程服务器)的选项有哪些?
注意:虽然欢迎直接与 Nginx 日志记录相关的答案,但我也在寻找适用于的一般答案任何应用程序(因此缺乏nginx这个问题的标签)。原因是我还没有迁移所有应用程序syslog
,我预计其他应用程序也会导致类似的问题。
与已接受答案相关的重要说明:
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。inotify
模式在 中指定module()
,而不是input()
:module(load="imfile" mode="inotify")
对于
inotify
,PollingInterval
不必指定。当配置不正确时,
rsyslog
不会将任何内容记录到/var/log/syslog
.为了检查问题所在,该命令rsyslogd -N1
似乎非常有帮助。显然,ps -A | grep rsyslog
这也有助于确定是否rsyslog
正在运行。rsyslog
可以通过执行获取当前版本rsyslogd -version
。ReadMode
在input()
应设置为零。和配置
module()
input()
“应该放在 rsyslog.conf 文件的顶部”。看来
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
它甚至提供了一些漂亮的例子。