Назад | Перейти на главную страницу

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.

Я предполагаю, что syslog-ng не ожидает, что имя хоста будет содержать косую черту, поэтому предполагается, что первая часть этой строки - это имя хоста. Он либо отбрасывает вторую часть, либо предполагает, что она принадлежит следующему полю сообщения. Проверьте значение макроса $ PROGRAM, он может содержать имя устройства, которое вы ищете. (Если нет, проверьте также макросы $ HOST_FROM, $ FULLHOST_FROM и $ FULLHOST.)

Если да, вы можете изменить имя файла назначения на / $ HOST- $ PROGRAM / или что-то подобное (и, вероятно, также использовать фильтр и отдельный путь журнала для этого устройства, чтобы новый шаблон не испортил имена каталогов устройств. которые работают нормально).

Если это не решит проблему, более новые версии syslog-ng могут анализировать и переписывать сообщения журнала несколькими способами, которые могут решить эту проблему, но для этого вам необходимо установить более свежую версию (2.0.9 является устаревшей ).

HTH, Роберт