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

rsyslog: пересылать разные типы сообщений на один сервер с разными шаблонами

У меня есть следующая конфигурация rsyslog:

template(name="logz.io" type="string" string="[TOKEN] 
         <%pri%>%protocol-version% %timestamp:::date-rfc3339% [hostname] 
         %app-name% %procid% %msgid%  tag=\"syslog\"] %msg%\n")

# Send messages over TCP using the template.
action(type="omfwd" protocol="tcp" target="listener.logz.io" port="5001"
       template="logz.io" StreamDriver="gtls" StreamDriverMode="1"
       StreamDriverAuthMode="x509/name" StreamDriverPermittedPeers="*.logz.io")

Теперь я бы хотел type="string" установлен в соответствии с одним из тип сообщения. Чтобы я мог создать индивидуальные шаблоны для каждого типа как

template(name="logz.io_nginx" type="nginx" string="[TOKEN] 
         <%pri%>%protocol-version% %timestamp:::date-rfc3339% [hostname] 
         %app-name% %procid% %msgid%  tag=\"nginx\"] %msg%\n")

Однако это означает, что действие должно вызывать правильный шаблон в зависимости от типа.

  1. Как мне настроить rsyslog для использования одного и того же действия с другим шаблоном?
  2. Могу ли я иметь только один шаблон, но, например, type параметр динамически устанавливается в зависимости от типа сообщения?

Как rsyslog должен знать тип сообщения, что является концепцией logz, а не rsyslogd? Вероятно, вам придется различать действие на основе syslogtag / имени программы, используя оператор if, и выбирать соответствующий шаблон в блоке if-then-block.