Разбор системных журналов с помощью Perl с использованием именованного канала?

Я пытаюсь написать сценарий, который будет собирать журналы по сети, анализировать их на предмет соответствующей информации и выполнять некоторые действия (отправлять электронное письмо, если есть критическая проблема, просто писать в файл журнала, если это предупреждение). Я использую машину AIX с syslogd для обработки журналов. Сейчас работает как обычно, записывает все логи в файлы... много файлов.

Мне посоветовали использовать Perl и Named Pipes для реализации скрипта. Я только что провел некоторое время, читая об именованных каналах, и я нахожу их довольно увлекательными. Однако я не понимаю, как должен работать «поток» информации в этой ситуации и как заставить Perl справиться с этим.

Например, должен ли я создать fifo вне скрипта и сказать syslogd, чтобы он писал в него по умолчанию, а мой скрипт на другом конце анализировал его? Может ли Perl сделать это и (для вас, системных администраторов) это умный/возможный вариант?

Это мое первое знакомство с Perl и с именованными каналами.


person n0pe    schedule 25.07.2011    source источник
comment
Мой проект управления журналами Octopussy делает это и многое другое. Это полноценный проект Perl, так что вы можете взглянуть на код и/или использовать его.   -  person sebthebert    schedule 26.07.2011
comment
Очень классная идея @sebthebert. Я мог бы попытаться создать свой собственный менеджер журналов. Я обязательно пройдусь по вашему коду.   -  person n0pe    schedule 26.07.2011


Ответы (1)


Вы наверняка можете создать именованный канал в Perl, хотя мне кажется, что для что вы пытаетесь сделать, лучше создать именованный канал вне perl, как вы предлагаете, а затем заставить syslogd писать в него и читать канал из perl.

Я не очень хорошо знаком с AIX, но это может подойти для создания канала (источник):

mkfifo -p /var/adm/syslog.pipe

Чтобы syslogd писал в него, определите это в /var/adm/syslog.pipe:

   *.info                        |/var/adm/syslog.pipe 

Потом:

kill -HUP `cat /var/run/syslogd.pid`

Вы также можете поместить все это в свой perl-скрипт: если канала не существует или syslogd его не использует, скрипт устроит для вас все необходимое.

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

person sergio    schedule 25.07.2011
comment
Я нашел статью, из которой вы разместили фрагменты кода (softpanorama.org/Logs/Syslog /pipes_in_syslog.shtml), и кажется, что мне нужно создать собственный файл конфигурации системного журнала. Я посмотрю на это, спасибо. - person n0pe; 25.07.2011