首页 > 解决方案 > 使用通配符将新文件添加到 rsyslogd

问题描述

我们有一个预先存在的 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

并确保他们也通过管道连接到 papertrail url。

但是,我正在努力破译 rsyslog 文档以弄清楚如何做到这一点。

谢谢!

标签: nginxrsyslogpapertrail-app

解决方案


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或使用自定义工具来转发您的日志(使用 rsyslog)。error_log

如何使用 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只是为了测试您是否可以看到转发的日志到您的本地服务器,在您测试一切正常后评论此行。


推荐阅读