LINUX.ORG.RU
ФорумAdmin

Удаленное логирование со своими «хотелками».

 , ,


0

1

Дано:
ARM-девайсы «в полях» с Debian Wheezy на SSD 4 или 8 гиг.;
Центральный log-сервер.

Хотелось бы организовать логирование по следующему алгоритму:
Когда канал от ARM-ов на log-сервер нормально работает, то логируем только на сервер.
Если канал на log-сервер ложится, логируем на локальный SSD со всеми rotate-ами, архивациями и удалениями устаревших логов. Просто чтоб была возможность посмотреть «в поле» с консоли.
Когда канал на log-сервер поднимается, все логи сохраненные локально, переливаются на серевер и удаляются.

Казалось бы ничего странного, но бегло обозрев имеющееся, ничего подходящего не нашел.
Понятно, что это все можно сделать на костыльных скриптах, но хотелось бы как-то покрасивше.
Может есть какие-то подходящие модули для rsyslog-а или syslog-ng?


В платной версии syslog-ng есть режим почти на подходящий тебе.

Если связь есть, то сообщения уходят напрямую, если нет - в буффер и потом отправляются после восстановления связи.

http://www.balabit.com/sites/default/files/documents/syslog-ng-pe-4.0-guides/...

А иначе только костылями, но они не такие сложные ИМХО. В зависимости от наличия связи менять конфиг сислога и рестартить его. Какие-то сообщения могут потеряться в процессе конечно, но не много.

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

Спасибо. Поискал с более правильными ключевыми словами, найденными по приведенной ссылке.
И, похоже, что rsyslog умеет делать то же самое «из коробки», через очереди.
Останется только сделать какой-то простой парсер, для приведения его spool-файлов в нормально читаемый вид, если это вообще понадобиться.

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

Там вроде несколько иной механизм - он *всегда* сначала пишет на диск, независимо от доступности сервера, а потом отправляет в сеть. Т.е. нагрузка на твои флешки будет приличная.

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

... он *всегда* сначала пишет на диск

Не, как оказалось, не всегда. Есть режим disk-assisted in-memory queues.
Сначала в оперативку, а если уже не влазит в буфер, то на диск.
Размер буферов в оперативке и на диске настраиваемый.
В общем - приемлемо. Вот если бы он еще свой спул умел хранить компрессированным, было бы совсем прекрасно.

dvl36
() автор топика

у rsyslog соответствующие опции даже есть в дефолтном конфиге, только закомменчены.

prizident ★★★★★
()
Ответ на: комментарий от dvl36

да, еще один повод не пользоваться недодистрибутивами.

prizident ★★★★★
()
Ответ на: комментарий от dvl36

сделать какой-то простой парсер, для приведения его spool-файлов в нормально читаемый вид

Можно проще(imo): настроить localhost в качестве резервного (что-то типа ActionExecOnlyWhenPreviousIsSuspended), в отдельные каталоги, которые потом доставлять любой файлокачкой. Останется правильно мержить данные из одного «online» файла и нескольких «offline».

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

потом доставлять любой файлокачкой. Останется правильно мержить данные из одного «online» файла и нескольких «offline».

Тоже вариант, но как-то костыльно, IMO

Есть другая идея. Запустить rsyslogd с другим конфигом и скормить ему spool.
И пусть выводит не на серевер, а в локальные файлы. Запускать из-под другого юзера, чтоб не смог удалить spool-файлы.
Попробую. Хотя...там вполне нормальные текстовые spool-файлы. Их можно просто grep-ить или awk-ать.

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

Есть другая идея. Запустить rsyslogd с другим конфигом и скормить ему spool. И пусть выводит не на серевер, а в локальные файлы.

Не работает. Видимо spool он использует, только для вывода по сети.
Ну и ладно, буду awk-ать.

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

как-то костыльно

Естественно. Зато не зависит от версий. Формат spool-а может измениться в любой момент, т.ч. ты попадаешь на поддержку ненужного костыля.

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

Формат spool-а может измениться в любой момент, т.ч. ты попадаешь на поддержку ненужного костыля.

Обновлять rsyslog меня никто же не будет заставлять.
Девайсы «в полях» обновлять, без крайней необходимости, вообще не имеет смысла, IMO.
А сейчас там и grep-ом можно обойтись. Или, например, так:
1)

awk -F  ":" '/tTIMESTAMP/ {printf("%s-%s-%s %02d:%02d:%02d ", $5,$6,$7,$8,$9,$10); getline; printf("%s ",$4); getline; print substr($0, index($0,$4),$3) }'
2)
awk -F  ":" '/tTIMESTAMP/ {printf("%s-%s-%s %02d:%02d:%02d ", $5,$6,$7,$8,$9,$10); getline; printf("%s ",$4); getline; print substr($0, index($0,$4),length(substr($0,index($0,$4)))-1) }' 
На 5.8.11 и 7.6.3 работает.

dvl36
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.