Назад | Перейти на главную страницу

Перенести хост из nginx в rsyslog

У меня есть кластер веб-серверов 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.