Syslog-ng: имена хостов с косой чертой
У нас проблема с регистрацией типов устройств с именами хостов, такими как slot1/devicename. К сожалению, когда журналы записываются на диск, записывается только slot1; поскольку у нас есть несколько устройств, это не позволяет нам узнать, какое устройство отправило журналы. Мы сделали захват пакета, чтобы подтвердить, что в сети имя хоста - slot1/devicename
options {
long_hostnames(off);
sync(0);
perm(0640);
stats(3600);
chain_hostnames(on);
keep_hostname(on);
create_dirs(on);
bad-hostname("^[0-9][0-9]*$");
}
source s_in {
udp();
tcp(max-connections(255)); };
}
destination s_files {
file (
"/opt/syslog-ng/$HOST/$FACILITY-$HOUR.log"
template("$DATE $HOST $MSG\n")
template_escape(no)
);
};
log { source(s_in); destination(s_files); }
Это syslog-ng-2.0.9-27.34.39.2 на SUSE Linux Enterprise Server 11 SP4
1 ответ
Я предполагаю, что syslog-ng не ожидает, что имя хоста будет содержать косую черту, поэтому предполагается, что первая часть этой строки является именем хоста. Он либо удаляет вторую часть, либо предполагает, что принадлежит к следующему полю сообщения. Проверьте значение макроса $PROGRAM, он может содержать искомое имя. (Если нет, проверьте также макросы $HOST_FROM, $FULLHOST_FROM и $ FULLHOST.)
Если да, вы можете изменить имя файла назначения на /$HOST-$PROGRAM/ или что-то подобное (и, возможно, также использовать фильтр и отдельный путь к журналу для этого устройства, чтобы новый шаблон не портил имена каталогов устройств которые работают нормально).
Если это не решит проблему, более новые версии syslog-ng могут анализировать и перезаписывать сообщения журнала несколькими способами, которые могут решить эту проблему, но для этого вам нужно будет установить более свежую версию (2.0.9 - древняя версия).).
HTH, Роберт