Мне нужно выполнить данное действие, когда конкретное сообщение (соответствующее, например, регулярное выражение) приходит на порт UDP (формат системного журнала). Как это сделать (например, используя уже имеющееся программное обеспечение, а не писать вручную)?
Syslog-ng может сделать это примерно так:
destination d_special { program("/usr/local/bin/script"); };
filter f_special { match("regex"); };
log { source (s_all); filter(f_special); destination(d_special); };
Может тебе стоит взглянуть на rsyslog. Его синтаксис гораздо более гибкий и простой, чем у syslogd. Также в целом намного мощнее.
В любом случае, то, что вы хотите в rsyslog, будет похоже на
if ( regex ) then action
& another_action # This line could be ignored if you want only one action
я думаю эта ссылка на страницу руководства logwatch будет полезно.
Ты можешь использовать OSSEC чтобы посмотреть конкретный образец и использовать активный ответ функциональность для выполнения желаемого действия.