У меня есть кластер веб-серверов nginx и отдельный сервер syslog, на котором запущен rsyslog. Хост nginx выглядит так:
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/my-hostname/nginx/example.org-access.log
/var/syslog/my-hostname/nginx/somedomain.com-access.log
И так далее. Как передать хост из nginx в rsyslog?
Не могу комментировать, но, возможно, это поможет вам начать в правильном направлении.
Nginx позволяет устанавливать теги для каждого журнала. Из документации для системный журнал nginx:
tag = строка
Устанавливает тег сообщений системного журнала. По умолчанию - «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.