我有一个 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。