Bagaimana saya bisa membuat syslogd email pesan log tertentu kepada saya?

13

Saya ingin mendapat pemberitahuan email setiap kali syslogd mencatat sesuatu, katakan errprioritas atau lebih tinggi. Asumsikan ini adalah daemon syslog yang kompatibel dengan BSD.

  • Bisakah ini tercapai?
  • Haruskah saya menggunakan pipa bernama untuk skrip shell?
  • Apa solusi lain yang mungkin ada?
jason
sumber

Jawaban:

6

Inilah solusi yang menggunakan pipa bernama. Ini diatur untuk Debian, tetapi Anda harus dapat memodifikasinya untuk BSD.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
Akhirnya mendasarkan solusi saya pada ini sehingga saya bisa mengubah email. Terima kasih untuk tautannya.
jason
Ini sepertinya hack terlalu banyak. Mengapa Anda menghabiskan waktu scripting ketika ada aplikasi open source yang stabil untuk melakukan itu untuk Anda? (dalam waktu nyata juga). * Lihat balasan saya.
sucuri
2
Sama sekali bukan hack. Begitulah cara hal semacam ini sering dilakukan.
Dijeda sampai pemberitahuan lebih lanjut.
6

Pemberitahuan melalui syslogd (8)

Di server OpenBSD saya, saya mencatat dan mengirim email pesan penting dari aplikasi web saya, yang menggunakan fasilitas local1 . Inilah /etc/syslog.conf saya untuk mewujudkannya:

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

Perhatikan bahwa loop while secara tak terbatas membaca setiap baris dari syslogd dan kemudian mengirimkannya melalui email ke echo. Ini penting. Setelah gema menampilkan salurannya, pipa akan berakhir, mengirim email EOF sehingga dapat mengirim email pesan log.

Dengan kata lain, Anda tidak dapat mengirim langsung ke mail melalui syslogd seperti:

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

karena syslogd akan terus menulis ke pipa sampai dihentikan sendiri atau mengirim sinyal HUP, di mana saat itu email akan mengirim seluruh rangkaian pesan log dalam satu email besar.

Pemberitahuan melalui newsyslog (8)

Menjadwalkan newsyslog dalam cron adalah cara lain untuk mendapatkan pesan dengan kecepatan lebih lambat atau secara massal.

Misalnya, jika Anda ingin ringkasan email harian dari pesan log, atur tanda M dan tentukan alamat email monitor di /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]

Kemudian jadwalkan newsyslog di crontab:

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

The -m pilihan untuk newsyslog (8) negara:

Mode pemantauan; hanya entri yang ditandai dengan tanda `M 'yang diproses. Untuk setiap file log yang sedang dipantau, output log apa pun sejak newsyslog terakhir kali dijalankan dengan flag -m dikirimkan ke pengguna yang tercantum di bagian pemberitahuan monitor.

Clint Pachl
sumber
3

Anda mungkin ingin melihat tanda centang atau logwatch. Logcheck akan mengirimkan email kepada Anda setiap jam dengan garis-garis log yang tidak cocok dengan serangkaian pola. Saya kira Anda mungkin bisa membuatnya lebih sering melakukannya. Saya tidak tahu ada alat yang melakukannya dengan menonton file log, tapi saya yakin ada sesuatu di luar sana yang melakukannya.

David Pashley
sumber
Ya, saya lebih suka untuk tidak memonitor dan mem-parsing file-file log setelah mereka ditulis, tetapi hanya menghubungkan ke proses logging sehingga saya bisa mendapatkan notifikasi instan.
jason
1

Saya akan menggunakan OSSEC. Ini memonitor log Anda secara real time dan memungkinkan Anda untuk dengan mudah mengingatkan melalui email (atau cara lain) ketika peristiwa tertentu dicocokkan. Mudah digunakan, terukur dan open source.

tautan: http://www.ossec.net

sucuri
sumber
Ini mungkin berlebihan untuk aplikasi. Namun, paketnya banyak dan jika ada kebutuhan maka itu mungkin cocok.
Dijeda sampai pemberitahuan lebih lanjut.