Syslog-ng mail: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
  +
[[Категория:Linux]]
  +
[[Категория:Syslog-ng]]
 
=syslog-ng: отправка сообщений на почту при наступлении события=
 
=syslog-ng: отправка сообщений на почту при наступлении события=
 
Задача: при наступлении определенного события отправить на почту администратору уведомление.
 
Задача: при наступлении определенного события отправить на почту администратору уведомление.
Строка 33: Строка 35:
 
{
 
{
 
my ($pri,$date,$host,$esrc,$evid,$emsg) = $msg =~ m/<(\d{3})>(\w{3} \d{1,2} \d{2}:\d{2}:\d{2}) ([\w\.\-]+) ([\w ]+)\[(\d+)\] (.+)/o;
 
my ($pri,$date,$host,$esrc,$evid,$emsg) = $msg =~ m/<(\d{3})>(\w{3} \d{1,2} \d{2}:\d{2}:\d{2}) ([\w\.\-]+) ([\w ]+)\[(\d+)\] (.+)/o;
open MAILER,'|/usr/sbin/sendmail support@airbites.kh.ua';
+
open MAILER,'|/usr/sbin/sendmail support@mydomain.tld';
 
print MAILER "Subject: syslog: Alert: loop detected!!! \nInfo:\n$msg";
 
print MAILER "Subject: syslog: Alert: loop detected!!! \nInfo:\n$msg";
 
# print MAILER "Subject: syslog: $host $esrc $evid\n\n$emsg\n----\n$msg";
 
# print MAILER "Subject: syslog: $host $esrc $evid\n\n$emsg\n----\n$msg";
Строка 39: Строка 41:
 
}
 
}
 
</PRE>
 
</PRE>
  +
==Еще одно решение==
  +
http://forum.sysfaq.ru/index.php?showtopic=18100 ( не проверял)
  +
<PRE>
  +
destination alert-by-mail { program("/usr/bin/perl -pe '' | /usr/bin/mail address"); };
  +
</PRE>
  +
==Альтернатива==
  +
Можно использовать snmptrapd + snmptt (при наличии трапа на событие. В моем случае трап есть)

Текущая версия на 11:31, 24 июня 2010

syslog-ng: отправка сообщений на почту при наступлении события

Задача: при наступлении определенного события отправить на почту администратору уведомление. В моем случае я хотел оповещять начальника ремонтной бригады о появлении петли в неуправляемом сегменте сети. Коммутаторы (DES-35xx) настроены на отправку сообщений в сислог.

syslog-ng.conf

Фильтр для выделения нужных событий

filter f_loop_detected { match("LBD loop occurred. Port blocked"); };

Получатель для локального сохранения (кроме как в отдельный файл длдя каждого свитча, все такие события запишуться еще и в отдельный файл)

destination d_loop_detected { file("/var/log/loop_detected.log"); };

Получатель "почтовый скрипт"

destination d_mailto_support { program("/bin/syslog-mail"); };

mailscript

#!/usr/bin/perl
# file: syslog-mail
# spec: reads a line of input and mails it, designed to be a destination for syslog-ng

use strict;

$0='syslog-mail';
$|=1;

while (my $msg = <STDIN>)
{
  my ($pri,$date,$host,$esrc,$evid,$emsg) = $msg =~ m/<(\d{3})>(\w{3} \d{1,2} \d{2}:\d{2}:\d{2}) ([\w\.\-]+) ([\w ]+)\[(\d+)\] (.+)/o;
  open MAILER,'|/usr/sbin/sendmail support@mydomain.tld';
  print MAILER "Subject: syslog: Alert: loop detected!!! \nInfo:\n$msg";
#  print MAILER "Subject: syslog: $host $esrc $evid\n\n$emsg\n----\n$msg";
  close MAILER;
}

Еще одно решение

http://forum.sysfaq.ru/index.php?showtopic=18100 ( не проверял)

destination alert-by-mail { program("/usr/bin/perl -pe '' | /usr/bin/mail address"); };

Альтернатива

Можно использовать snmptrapd + snmptt (при наличии трапа на событие. В моем случае трап есть)