Крайне неприятная ситуация - удаленный комп лёг, и чтоб понять что с ним - надо ехать через пол города (бывает и полстраны). А так хотелось бы ехать уже зная что случилось и кто виноват, но на удаленный сервер не попасть, он же не отвечает.
Помочь в такой ситуации может дублирование логов на сервер.
Попробуем это настроить.
Прежде всего настроим 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 авторизации етс.
Предлагаю желающим изучить этот момент и отписать сюда же