Логи на удаленный syslog-сервер

Крайне неприятная ситуация - удаленный комп лёг, и чтоб понять что с ним - надо ехать через пол города (бывает и полстраны). А так хотелось бы ехать уже зная что случилось и кто виноват, но на удаленный сервер не попасть, он же не отвечает.

Помочь в такой ситуации может дублирование логов на сервер.
Попробуем это настроить.

Прежде всего настроим syslog-ng на сервере.
Править syslog-ng каждый раз, когда мы захотим внести изменения, мы не будем, по этой причине делаем вот как:

echo 'include "remote.conf";' >>/etc/syslog-ng/syslog-ng.conf

Теперь создаем непосредственно /etc/syslog-ng/remote.conf:

source s_rem { tcp(ip("<IP_ADDRESS>") port(514)); };
destination d_rem {file(
  "/var/log/remote/$HOST/$YEAR-$MONTH-$DAY.log"  perm(0600)  template("$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC $HOST $PRIORITY: $MESSAGE\n") );};
destination d_raw {file(
  "/var/log/remote/.raw/$YEAR-$MONTH-$DAY.log" perm(0600) template("$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC $HOST $PRIORITY: $MESSAGE\n"));};

log {source(s_rem);  destination(d_rem);};
log {source(s_rem);  destination(d_raw);};

Итак разбираемся что же мы тут наваяли:

source s_rem { tcp(ip("<IP_ADDRESS>") port(514)); };

Слушаем на интерфейсе с IP_ADDRESS на порту 514 (стандартный).
Поскольку в логах может быть приватная инфа, лучше пользоваться защищенными каналами. Я все гоняю по vpn, но стоит разобраться с tls:

destination d_rem {file(
  "/var/log/remote/$HOST/$YEAR-$MONTH-$DAY.log"  perm(0600)  template("$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC $HOST $PRIORITY: $MESSAGE\n") );};

Тут все просто, определяем destination как такой-то файл (по шаблону /var/log/remote/$HOST/$YEAR-$MONTH-$DAY.log) с такой-то маской 600. Директории /var/log/remote/$HOST долшны существовать.
Также стоит учесть, что $HOST не передается удаленной машиной, а определяется сервером, видимо по PTR DNS-а, так-что стоит настроить правильно резолвинг

В случае если HOST не отрезолвился, или директории /var/log/remote/$HOST у нас почему-то нет, ВСЕ приходящие логи мы будем класть в /var/log/leds/.raw

И наконец связываем истоцник логов s_rem и хранилище d_rem:

log {source(s_rem);  destination(d_rem);};
log {source(s_rem);  destination(d_raw);};

Можно отдельно логировать инфу от служб:

filter f_rem_srv {program("srv")  or program("srv1");};
log {source(s_rem);  filter(f_rem_srv); destination(d_rem_srv);};

Перезапускаем службу:

/etc/init.d/syslog-ng restart

Теперь настроим клиента:

echo -e 'destination srv { tcp("IP_SRV" port(514)); };\nlog { source(src); destination(srv); };'

Перезапускаем службу

syslog-ng предоставляет еще много полезного и приятного, вроде tls авторизации етс.
Предлагаю желающим изучить этот момент и отписать сюда же