Jak mogę syslogd przesłać mi e-mailem pewne wiadomości dziennika?

13

Chciałbym móc otrzymywać powiadomienia e-mail za każdym razem, gdy syslogd rejestruje coś, powiedzmy errpriorytet lub wyższy. Załóżmy, że jest to demon syslog zgodny z BSD.

  • Czy można to osiągnąć?
  • Czy powinienem użyć nazwanego potoku do skryptu powłoki?
  • Jakie są inne możliwe rozwiązania?
Jason
źródło

Odpowiedzi:

6

Oto rozwiązanie wykorzystujące nazwane potoki. Jest skonfigurowany dla Debiana, ale powinieneś być w stanie zmodyfikować go dla BSD.

Wstrzymano do odwołania.
źródło
Skończyło się na tym, że oparłem moje rozwiązanie na demonizacji wiadomości e-mail. Dzięki za link.
jason
To wydaje się zbyt hack. Dlaczego spędzasz czas na pisaniu skryptów, gdy istnieją stabilne aplikacje open source, aby to zrobić? (również w czasie rzeczywistym). * patrz moja odpowiedź.
sucuri
2
W ogóle nie hack. Tak często się to robi.
Wstrzymano do odwołania.
6

Powiadomienia za pośrednictwem syslogd (8)

Na moim serwerze OpenBSD loguję i wysyłam pocztą e-mail ważne wiadomości z moich aplikacji internetowych, które używają funkcji local1 . Oto mój /etc/syslog.conf, aby tak się stało:

local1.err    /var/log/example.com
local1.err    |while read log; do echo "$log" | /usr/bin/mail -s SYSLOG [email protected]; done

Zauważ, że pętla while nieskończenie odczytuje każdą linię z syslogd, a następnie przesyła ją do poczty za pomocą echa. To jest ważne. Gdy echo wysyła swoją linię, kończy potok, wysyłając pocztą EOF, aby mógł wysłać wiadomość e-mail z logiem.

Innymi słowy, nie można przesyłać strumieniowo bezpośrednio do poczty za pośrednictwem syslogd w następujący sposób:

local1.err    |/usr/bin/mail -s SYSLOG [email protected]

ponieważ syslogd będzie kontynuował zapisywanie do potoku, dopóki sam się nie zakończy lub nie wyśle ​​sygnału HUP, w którym to czasie poczta wyśle ​​cały zestaw wiadomości dziennika w jednym dużym e-mailu.

Powiadomienia przez newsyslog (8)

Zaplanowanie newsyslogu w cron to kolejny sposób na otrzymywanie wiadomości w wolniejszym tempie lub luzem.

Na przykład, jeśli chcesz codziennego podsumowania wiadomości e-mail w dzienniku, ustaw flagę M i określ adres e-mail monitora w /etc/newsyslog.conf :

# logfile_name        owner:group  mode  count  size  when  flags  monitor
/var/log/example.com  root:wheel   640   7      *     24    M      [email protected]

Następnie zaplanuj newsyslog w crontab:

# minute hour  mday  month  wday  command
0        *     *     *      *     /usr/bin/newsyslog
1-59     *     *     *      *     /usr/bin/newsyslog -m

Opcja -m dla newsyslog (8) stwierdza:

Tryb monitorowania; przetwarzane są tylko wpisy oznaczone flagą „M”. Dla każdego monitorowanego pliku dziennika dane wyjściowe dziennika od ostatniego uruchomienia newsyslog z flagą -m są wysyłane do użytkownika wymienionego w sekcji powiadomień o monitorze.

Clint Pachl
źródło
3

Możesz spojrzeć na logcheck lub logwatch. Logcheck wysyła Ci co godzinę e-mail z wierszami dziennika, które nie pasują do zestawu wzorców. Podejrzewam, że prawdopodobnie możesz to zrobić częściej. Nie znam żadnych narzędzi, które to robią, obserwując pliki dziennika, ale jestem pewien, że jest coś, co to robi.

David Pashley
źródło
Tak, wolałbym nie monitorować i analizować plików dziennika po ich zapisaniu, ale po prostu podłączyć się do procesu logowania, aby uzyskać natychmiastowe powiadomienia.
jason
1

Chciałbym użyć OSSEC. Monitoruje dzienniki w czasie rzeczywistym i umożliwia łatwe powiadamianie e-mailem (lub w inny sposób) o dopasowaniu określonych zdarzeń. Prosty w użyciu, skalowalny i open source.

link: http://www.ossec.net

sucuri
źródło
Może to być przesada w przypadku aplikacji. Jednak pakiet robi dużo i jeśli jest taka potrzeba, może być odpowiedni.
Wstrzymano do odwołania.