Syslog-ng — как организовать централизованный сбор логов?

Приветствую!
Стоит задача ловить логи с разных хостов и раскладывать по директориям.
Сервер: os Centos 6.5 / syslog-ng ver. 3.2

Рабочие настройки:

cat /etc/syslog-ng/syslog-ng.conf
...
source z { udp(); };
destination z1        { file("/var/log/DIR/$DAY$MONTH/logfile" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
filter exim            { match("exim") or program("exim4") or program("exim");}; 
log { source(z); filter(exim);              destination(z1); }


Вопрос - как принимать и расфасовывать логи по имени хоста или ip (их около дюжины).
В таком варианте отказывается работать:

source x { udp(); };
destination x1 { file("/var/log/DIR/$DAY$MONTH/logfile"); };
filter exim { host("host.ru | host | ip") or program("exim4") or program("exim");};
log { source(x); filter(exim); destination(x1); };


Пожалуйста, подскажите, как осуществить подобный приём и сортировку?
З.Ы. в гугл ходил, пока ответ не найден.
  • Вопрос задан
  • 4766 просмотров
Решения вопроса 1
Carbonat
@Carbonat Автор вопроса
@opium , спасибо за ответ. Проблема была на отправляющем хосте, не слал, зараза)

В итоге следующий конфиг на сборщике:

source s_input {
internal();
# ловим всех по UDP
udp(ip("0.0.0.0"));
};

destination NEW_LOG { file("/var/log/.../$DAY$MONTH/may.log" create_dirs(yes) owner("USER") group("GROUP") dir_owner("USER") perm(0640) dir_perm(0750) dir_group("GROUP") ); };
filter NEW_FILTER { host ("HOST_NAME");};
log { source(s_input); filter(NEW_FILTER); destination(NEW_LOG); };

# NEW_LOG - произвольное название приёмника
# USER - владелец, непременно указываем реального владельца, имеющего права на запись
# GROUP - группа , непременно указываем реальную группу, имеющую права на запись
# NEW_FILTER - произвольное имя фильтра
# HOST_NAME - имя хоста, так же можно заблаговременно указать в /etc/resolv.conf

Не забываем закрыть незадействованные порты.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
opium
@opium
Просто люблю качественно работать
Зачем вы делаете это через фильтр то ?
ПО первой ссылке с гугла в сислогнг настраивается почти также как и в рсислоге
destination logpile {
file("/logs/$HOST/$YEAR/$MONTH/$FACILITY.$YEAR$MONTH$DAY"
owner(root) group(root) perm(0600)
create_dirs(yes) dir_perm(0700)); };

log { source(inputs); destination(logpile); };
Ответ написан
Комментировать
Carbonat
@Carbonat Автор вопроса
Зачем вы делаете это через фильтр то ?
ПО первой ссылке с гугла в сислогнг настраивается почти также как и в рсислоге
destination logpile {
file("/logs/$HOST/$YEAR/$MONTH/$FACILITY.$YEAR$MONTH$DAY"
owner(root) group(root) perm(0600)
create_dirs(yes) dir_perm(0700)); };

log { source(inputs); destination(logpile); };
час назад Комментировать Пожаловаться


Логи различных типов. Нужно именно получать всё с "этого ip" и писать в указанный файлик, отфильтровывая по службам, а ловить по имени хоста / ip-адресу.
Ваш вариант очень даже рабочий, но к сожалению, немного не подходит в данной ситуации.
Ответ написан
Комментировать
unnforgiven
@unnforgiven
Ит специалист.
Здесь есть полная статья

https://habrahabr.ru/post/345968/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы