Как использовать Шаблоны rsyslog для записи файлов журналов на основе средства syslog с подстановочными знаками?

Моя цель / дизайн сервиса systemd имеет несколько под-сервисов, все однозначно идентифицированные. Для моего test.target требуется 10 экземпляров test - @ .service . Результатом являются целевые прогоны и выявлено 10 сервисов. например (скрыто) (скрыто) и т. д. Это распространенный способ целевого управления множеством похожих сервисов.

Для каждой службы Systemd SyslogIndentifer задано значение SyslogIdentifier = test-% i . Поэтому, когда он регистрируется в syslog / journald, имя средства будет test-0, test-1 и т. Д.

Вот образец журнала journald, обратите внимание на средство test-0 :

Oct 29 03:32:35 black-node.local test-0[5015]: 1603942355636701,CON,192.168.10.151:57458,4,12,1,-,-,-,timeout expired; UDP connection assumed closed.

Теперь мне нужно / я хочу записать все полученные сообщения - * syslog в отдельный файл журнала. Я попытался добавить следующее в `/etc/rsyslog.d/test.conf:

$template TestFile,"/var/log/test-%syslogfacility-text%.log"
test-*.*   ?TestFile

, но при восстановлении rsyslogd ( sudo systemctl restart rsyslog ) получаю следующие ошибки:

Message from syslogd@black-node at Oct 29 03:19:22 ...
 rsyslogd:file './.* ? TestFile': open error: Permission denied [v8.24.0-52.el7 try http://www.rsyslog.com/e/2433 ]

Message from syslogd@black-node at Oct 29 03:19:22 ...
 rsyslogd:action 'action 2' resumed (module 'builtin:omfile') [v8.24.0-52.el7 try http://www.rsyslog.com/e/2359 ]

Это не права доступа к файлам , а страница rsyslog error 2359 говорит, что это может быть связано с selinux (!!!). Итак, я попытался отключить selinux ( sudo setenforce 0 ) и снова перезапустить rsyslogd:

Message from syslogd@black-node at Oct 29 03:18:07 ...
 systemd:Started System Logging Service.

Message from syslogd@black-node at Oct 29 03:18:07 ...
 rsyslogd:error during parsing file /etc/rsyslog.d/test.conf, on or before line 7: warnings occured in file '/etc/rsyslog.d/transfers.conf' around line 7 [v8.24.0-52.el7 try http://www.rsyslog.com/e/2207 ]

Message from syslogd@black-node at Oct 29 03:18:07 ...
 rsyslogd:action '*' treated as ':omusrmsg:*' - please use ':omusrmsg:*' syntax instead, '*' will not be supported in the future [v8.24.0-52.el7 try http://www.rsyslog.com/e/2184 ]

Это немного более обнадеживает? Понятия не имею, как и нужно ли мне подавать: omusrmsg: но я пробовал:

$template TestFile,"/var/log/test-%syslogfacility-text%.log"
test-:omusrmsg:*.*   ?TestFile

Теперь rsyslog перезапускается нормально, без ошибок или жалоб, но и без нового файла журнала.

На этом этапе я схожу с ума, так что Я изолирую первое служебное средство test-0 :

$template TestFile,"/var/log/test-%syslogfacility-text%.log"
test-0.*   ?TestFile

Я вижу журналы в messages / journald, но мой файл журнала не создается, и при его перезапуске нет ошибок rsyslog.

Как я могу просто объединить несколько средств журнала в один файл журнала? Я даже не могу заставить работать общий случай типа файла динамического журнала ?! Будем признательны за любые советы. Спасибо.

1
задан 29 October 2020 в 05:41
1 ответ

SyslogIdentifier= и test-0 — это не средство, а имя программы. Замените %syslogfacility-text% на %programname% и используйте устаревший фильтр свойств селектор, например

:programname, startswith, "test-"  ?TestFile
1
ответ дан 29 October 2020 в 16:03

Теги

Похожие вопросы