У нас есть проблема, когда у нас ведется журнал типа устройства с такими именами хостов, как 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.
Я предполагаю, что syslog-ng не ожидает, что имя хоста будет содержать косую черту, поэтому предполагается, что первая часть этой строки - это имя хоста. Он либо отбрасывает вторую часть, либо предполагает, что она принадлежит следующему полю сообщения. Проверьте значение макроса $ PROGRAM, он может содержать имя устройства, которое вы ищете. (Если нет, проверьте также макросы $ HOST_FROM, $ FULLHOST_FROM и $ FULLHOST.)
Если да, вы можете изменить имя файла назначения на / $ HOST- $ PROGRAM / или что-то подобное (и, вероятно, также использовать фильтр и отдельный путь журнала для этого устройства, чтобы новый шаблон не испортил имена каталогов устройств. которые работают нормально).
Если это не решит проблему, более новые версии syslog-ng могут анализировать и переписывать сообщения журнала несколькими способами, которые могут решить эту проблему, но для этого вам необходимо установить более свежую версию (2.0.9 является устаревшей ).
HTH, Роберт