syslog-ng не разбирает сообщения
Я пытаюсь настроить syslog-ng для правильного анализа сообщений, совместимых с RFC5424, пока что без особого успеха. Согласно документации syslog-ng,
Приложение syslog-ng OSE может автоматически анализировать сообщения журнала, которые соответствуют форматам сообщений RFC3164 (BSD или legacy-syslog) или RFC5424 (IETF-syslog). Если syslog-ng OSE не может проанализировать сообщение, это приводит к ошибке.
Это говорит о том, что для syslog-ng не нужно никаких дополнительных параметров для фактического анализа этих сообщений. Тем не менее, это просто не так.
Вот соответствующая часть моей конфигурации syslog-ng:
template remote_message {
template("${R_ISODATE} s=${SDATA} mesg=${MSGONLY}\n");
};
source s_remote {
tcp(port(514));
syslog(transport(tcp));
};
destination d_remote {
file(
"/var/log/remote.log"
owner(root)
group(root)
create_dirs(yes)
template(remote_message)
);
};
log {
source(s_remote);
destination(d_remote);
};
Сервер прослушивает порт 514 и получает журналы из удаленных источников, но не анализирует их вообще. Отправка следующего сообщения (которое скопировано из текста RFC):
<165>1 2003-10-11T22:14:15.003Z sender.computer.org evententry - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] Test message
дает следующую запись в журнале:
2016-04-26T16:22:31+02:00 s= mesg=2003-10-11T22:14:15.003Z sender.computer.org evententry - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] Test message
Итак, как вы можете видеть, сообщение не анализируется вообще. Вопреки документации, это не приводит к ошибке: согласно документации, если on-error
опция установлена в fallback-to-string
, syslog-ng должен "записать сообщение об ошибке во внутренний источник ()", но такие журналы не создаются.
У меня такое ощущение, что мне здесь не хватает чего-то очень простого, потому что это действительно должно работать. Что мне не хватает?
1 ответ
Ваш источник, кажется, немного неправильно настроен:
source s_remote {
tcp(port(514));
syslog(transport(tcp));
};
На самом деле это два источника:
- первая строка прослушивает порт 514 для сообщений RFC3164
- вторая строка прослушивает сообщения RFC5424 на порту 601 (порт по умолчанию источника syslog())
Поэтому, если вы отправляете свое сообщение RFC5424 на порт 601, оно должно работать (если только брандмауэр не препятствует прослушиванию на порту 601).
НТН,
Роберт Фекете