我们有一个预先存在的 rsyslog 配置文件,它适用于 papertrail,例如
/etc/rsyslog.d/20-papertrail.conf
*.* @logs4.papertrailapp.com:44407
但是,我们在服务器上有几个NGINX网站,因此希望它也监视其错误日志。
它们的路径是:
/var/log/nginx/www.website-one.com-error.log
/var/log/nginx/www.website-two.com-error.log
/var/log/nginx/www.website-three.com-error.log
但是,此/var/log/nginx
还包含一堆我们不想监视的.log
文件,例如
/var/log/nginx/error.log
/var/log/nginx/access.log
/var/log/nginx/error.log1
/var/log/nginx/nginx.log
在我的脑海中,我们需要添加类似的东西...
/var/log/nginx/*-error.log
并确保它们也通过管道传输到书面记录网址。
但是,我正在努力破译 rsyslog 文档以弄清楚如何做到这一点。
谢谢!
在 rsyslog 文档中,似乎您可以在文件中使用通配符。
文件
正在监视的文件。到目前为止,这必须是绝对名称(没有宏或模板(。请注意,在文件名级别支持通配符(有关更多详细信息,请参阅下面的通配符(。
通配符
版本之前:8.25.0
通配符仅在文件名部分受支持,在目录名称中不受支持。
/var/log/*.log
有效。
/var/log/*/syslog.log
不起作用。
自版本:8.25.0
文件名和路径中支持通配符,这意味着这些示例将起作用:
/var/log/*.log
有效。
/var/log/*/syslog.log
有效。
/var/log/*/*.log
有效。
所有匹配子文件夹中的所有匹配文件都将正常工作。请注意,这可能会降低 imfile 的性能,具体取决于动态监视的目录和文件数量。
如果要转发虚拟主机日志,可以直接在NGINX虚拟主机配置中更改配置,应更改/添加access_log
和error_log
策略,如此处所述,或使用自定义工具来转发日志(使用rsyslog(。
如何使用 RSYSLOG 来做到这一点?
在/etc/rsyslog.d/nginx_custom.conf
中创建新的自定义文件:
module(load="imfile" PollingInterval="1") #needs to be done just once
# File 1
input(type="imfile"
File="/var/log/nginx/www.website-*.com-error.log"
Tag="websites"
Facility="local0")
local0.* @logs4.papertrailapp.com:44407
#Just to test that logs are forwarded, comment the line once you've tested it
local0.* /var/log/test.log
并重新启动 rsyslog 服务
注意:第local0.* /var/log/test.log
行只是为了测试您是否可以看到转发到本地服务器的日志,请在测试一切正常后注释此行。