Передайте параметры строки команды в скрипт оболочки через omprog (модуль rsyslog)
Плохие времена при передаче сообщения системного журнала в сценарий оболочки в качестве параметра командной строки через модуль rsyslog omprog.
Мой /etc/rsyslog.conf:
module(load="omprog")
if $syslogtag contains 'user'
then action(type="omprog" binary="/usr/bin/test")
Мой /usr/bin/test:
#!/bin/sh
printf "\n$(date): $1" >> /home/user/sink
На бегу
logger qqq
Я получаю 'qqq' в /var/log/messages и текущую метку времени в /home/user/sink.
После запуска
/usr/bin/test some_message
Я получаю текущую временную метку в / home / user / sink вместе с 'some_message'. Но как только я изменю строку действия в /etc/rsyslog.conf на
или
then action(type="omprog" binary="/usr/bin/test some_message")
или же
then action(type="omprog" binary="/usr/bin/test \"$msg\"")
Я получаю параметр logger в системном журнале, но ничего в /home/user/sink. Застряв в этом вопросе на целый день, любая помощь высоко ценится.
2 ответа
Дополнительная информация о параметрах действия, которые невозможно генерировать динамически - https://github.com/rsyslog/rsyslog/issues/1149
-
rgerhards commented on Sep 21, 2016
The key problem is: what shall the action do if a parameter changes? e.g. shut
down existing connection and create a new one? If so, shall it really do this
if parameters frequently change?
IMHO to handle this decently, the plugin itself must handle these kinds of
dynamic properties and act accordingly. So there is no generic solution possible.
Насколько я понимаю документацию rsyslog, двоичный файл - это просто буквальное значение, поэтому он не будет сравниваться с переменными rsyslog. Двоичный код - ваша программа / командная строка - будет передаваться через stdin
Конечно, вы можете изменить шаблон для этого действия, чтобы включить только $msg
, используя действия template
пары.