Это сводит меня с ума. Как направить сообщение от nxlog, полученное syslog-ng, на основе имени программы? Это должно быть понятно, но работает некорректно. Сообщения помещаются в мой общий файл журнала для syslog-ng без применения фильтрации.
Я отправляю журналы IIS с помощью nxlog:
<Input W3SVC>
Module im_file
...
Exec $SourceName = 'IIS';
...
</Input>
<Route W3SVC>
Path W3SVC => IIS_Syslog
</Route>
<Output IIS_Syslog>
Module om_udp
Host xxx
Port xxx
Exec to_syslog_ietf();
</Output>
Что отправляет на сервер syslog-ng, который должен улавливать следующий фильтр.
filter f_iis {
source ('IIS');
};
или, в качестве альтернативы, я пробовал следующее.
filter f_iis {
program ('IIS');
};
Если вы отправляете его как обычный системный журнал (т. Е. Используя to_syslog_bsd()
в nxlog.conf
), затем значение $ SourceName (=IIS
) будет в сообщении в той части, которую вызывает RFC3164 TAG
:
The value in the TAG field will be the name of the program or
process that generated the message.
Syslog-ng называет это program
, поэтому я считаю, что второй должен делать то, что вам нужно:
filter f_iis {
program ('IIS');
};