将主机从 nginx 传递到 rsyslog

将主机从 nginx 传递到 rsyslog

我有一个 nginx Web 服务器集群和一个运行 rsyslog 的单独 syslog 服务器。nginx vhost 如下所示:

access_log      syslog:server=10.0.0.51,facility=local1,severity=info combined;
error_log       syslog:server=10.0.0.51,facility=local2 debug;

自定义 rsyslog 配置如下:

$template access_log,"/var/syslog/%HOSTNAME%/%PROGRAMNAME%/access.log"
$template error_log,"/var/syslog/%HOSTNAME%/%PROGRAMNAME%/error.log"
local1.*        -?access_log
local2.*        -?error_log

它工作得很好,但我想在 rsyslog 上为不同的 vhosts 创建单独的日志文件,例如,

/var/syslog/我的主机名/nginx/example.org-access.log

/var/syslog/我的主机名/nginx/somedomain.com-access.log

等等。如何将主机从 nginx 传递到 rsyslog?

答案1

无法评论,但也许这会让您朝着正确的方向前进。

Nginx 允许你为每个日志设置标签。来自nginx 系统日志

标签=字符串

设置系统日志消息的标签。默认为“nginx”。

例如我的配置中有这个:

access_log      syslog:server=server,tag=nginx_access;

对于您的站点配置,您可以设置每个虚拟服务器的访问和错误日​​志:

server {
    listen 80;
    server_name foo1.local;
    location /var/www/site1;
    access_log      syslog:server=server,tag=nginx_access_site1;
}

server {
    listen 80;
    server_name foo2.local;
    location /var/www/site2;
    access_log      syslog:server=server,tag=nginx_access_site2;
}

现在你应该能够根据标签过滤这些消息了。来自如何按标签过滤 rsyslog 消息您可以设置一个配置文件:

:syslogtag, isequal, "nginx_access_site1:" /var/syslog/my-hostname/nginx/site1-access.log
& stop

:syslogtag, isequal, "nginx_access_site2:" /var/syslog/my-hostname/nginx/site2-access.log
& stop

您还需要确保无论您将此配置文件称为什么,它都需要在您的默认配置(似乎是 50-default.conf)之前加载 - 例如,您可以将其命名为 20-nginx.conf。

相关内容