rsyslogによるメール送信(ログをまとめて送信してみる編)

前回の記事では、よっぽど洗練されたシステムじゃない限り、頻繁にメールが飛んでくるので使い物にならない。
で、「ある程度ログをまとめて送信しようじゃないか。」という話になるのでやってみる。
まずはパイプ作成

# mkfifo -m 600 /var/log/hoge_alert

パイプに対してログを吐くようにrsyslogの設定変更。

# vi /etc/rsyslog.conf
#-----------------------------------------------------------------------------
# パイプで特定のログを通知
user.err      |/var/log/hoge_alert           # err以上を吐く
#-----------------------------------------------------------------------------

60秒おきにtappe@hoge.comにメール送信するスクリプト、hoge_alert_mail.shを作成。

  #!/bin/bash
  while [ 1 ]; do
      allmessages=""
      while read -t 60 message; do
          allmessages="${allmessages}${message}@RET@"
      done < /var/log/hoge_alert
      if [ "z$allmessages" != z ]; then
          echo $allmessages | sed 's/@RET@/n/g' |
              /usr/bin/Mail -s 'syslog hoge alert' tappe@hoge.com
      fi
  done

とりあえず実行権限を与えて実行してみる。

# chmod +x hoge_alert_mail.sh
# ./hoge_alert_mail.sh

ログ吐いてみる。

$ logger -p user.err hogehoge

60秒後にメールが届けば成功。
で、毎回コンソールから実行するのは面倒すぎるので疑似デーモン化してみる。

# vi /etc/inittab
alog:2345:respawn:/home/tappe/hoge_alert_mail.sh # 追加

init に SIGHUP シグナルを送信して、 /etc/inittab を再度解釈してもらう。

# kill -HUP 1

動いているか確認。

# ps -C hoge_alert_mail.sh
PID TTY TIME CMD
18702 ? 00:00:00 hoge_alert_mail.sh

ログを吐いてみる。

$ logger -p user.err hogehoge

60秒後にメールが届けば成功。
殺しても生き返るかチェック。

# kill -9 18702
# ps -C hoge_alert_mail.sh
PID TTY TIME CMD
2963 ? 00:00:00 hoge_alert_mail.sh

めでたし、めでたし。
追記:めでたしと思ったが、この方式はスクリプトの中でメモリにログをため込む方式なので、ため込む量が多いと送信できなくなったりと怪しげな挙動をする。ファイルに書き出して定期的にメールする方がよさげ。
http://www.usupi.org/sysad/133.html
http://www.usupi.org/sysad/094.html

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です