LINUX.ORG.RU

Syslog-ng

 ,


1

1

Добрый день!

Необходимо попробовать настроить отправку логов с меткой «INFO» с помощью syslog-ng. Примерно как это должно выглядеть я понимаю, но не могу сообразить один момент: Логи которые необходимо отправлять, пишутся каждый день в новый файл в директории - /opt/sysname/metadata/log/. Логи выглядят следующим образом - MetadataServer_2019-06-12_devcomp-test_44116.log

Если я правильно понял, то в файле syslog-ng.conf, для того что бы он забирал логи из файла, необходимо указать таким образом: source log_test { file(/path/to/logs/)} и для фильтра: filter test_1 {match (INFO)}

Вот собственно вопрос: можно как-то указать что бы он всегда просматривал самый последний сформированный файл, например, через ls -t | head -1 ? Поймет ли он такую конструкцию?

Надеюсь объяснил понятно :)

Сейчас попробовал вывести нужные сообщения с помощью grep, как-то вот так:

ls -t | head -1 | grep -r «INFO»

Но, похоже, косячно я сделал, не выдает ничего :С Пробую дальше.

John_Dorian ()

Демон syslog не запускается если в syslog-ng.conf добавляю следующие строки:

source sas_log { file(«/opt/sas94/SASConfig/Lev1/SASMeta/MetadataServer/Logs/SASMeta_MetadataServer_2019-06-18_sasdvcomp-test_44116.log»); }; destination test_sas { udp(192.168.8.230) port(515)); }; filter test_1 {match (INFO); }; log { source(sas_log); filter(test_1); destination(test_sas); };

Если же их закомментирую, то все запускается, но например при netstat -tulnp | grep syslog ничего нет, хотя service syslog status - running

John_Dorian ()

Так, настроить и запустить получилось, проблема была в /etc/apparmor.d/sbin.syslong-ng.

Но почему-то не доходят логи до нужного назначения: destination test_sas { udp(«192.168.2.88» port(515)); };

Думал, что проблема в фильтре, но если перенаправить в файл, то все пишется.

Сам адрес проверял: netcat -zv 192.168.2.88 515 arcsight01.ru [192.168.2.88] 515 (printer) open

John_Dorian ()
Ответ на: комментарий от John_Dorian

destination test_sas { udp(«192.168.2.88» port(515)); };

А тебя на 192.168.2.88 точно ждёт syslog по udp на 515 порту, а не что-то другое? Потому как BSD syslog - это 514 udp по RFC 3164. Потом было RFC 3195 с tcp 601 и т.д.

AS ★★★★★ ()

Со всем вроде получилось разобраться, кроме главного - верно задать source

Возможно как то указать, что бы каждый день читался новый файл? Через служебные символы может быть?

John_Dorian ()
Ответ на: комментарий от John_Dorian

Указываю так: source { file(«/opt/Meta/MetadataServer/Logs/Meta_MetadataServer_%d_*»); };

Понятно, что это не правильно, но пытаюсь двигаться в этом ключе, не могу понять как интерпретировать сислогу, что Meta_MetadataServer_%d_* не окончательное название файла.

John_Dorian ()
Ответ на: комментарий от John_Dorian

Написал что-то вроде скрипта:

#!/bin/bash

cd /opt/Meta/MetadataServer/Logs/; op=$(ls -t | head -1); ech=$(echo $op); cat «$ech»;

Теперь вопрос, если укажу его в качестве файла в source будет ли он его воспринимать как нужно? И еще в /etc/apparmor/sbin.syslog-ng я так понимаю нужно добавить права на execute, что бы он мог исполнить этот скрипт?

John_Dorian ()

В общем, сделал криво и косо, но вроде как работает, может пригодится кому, или мне укажут, где я изобрел велосипед, когда этого не нужно было делать :)

Создал скрипт, который читает нужный мне лог и выводит сообщения в указанный файл:

#!/bin/bash

cd /opt/sas94/SASConfig/Lev1/SASMeta/MetadataServer/Logs/;

op=$(ls -t | head -1);

ech=$(echo $op);

tail -f -s 1 «$ech» | grep INFO>>/var/tmp/rust;

На сам этот файл настроил syslog-ng:

source { file(«/var/tmp/rust»); };

Ну и отправку по udp на нужный серв.

Осталось только настроить очистку файла ежедневную, что бы не забивать место, но это думаю не составит особого труда. Вот как-то так вышло.

John_Dorian ()
Ответ на: комментарий от John_Dorian

Настроил logrotate, запустил скрипт в nohup + еще подредактировал его что бы перепроверял актуальность считываемого файла. Вот в принципе и все, на данный момент все работает :)

John_Dorian ()