ORCA のエラーを監視してメールを送信させる (postfix swatch の導入)

謝意 http://pocketstudio.jp/log3/2012/09/24/how_to_use_swatch_/
http://http://www.maruko2.com/mw/

サーバのログを監視するSwatchの導入方法と使い方を解説


http://d.hatena.ne.jp/motipizza/20120721/1342857737 を参考にさせていただきました。

前提条件:
ORCA をインストールした Ubuntu 14.04 で、メールサーバーをインストールしていないこと(もしくはメールサーバー設定を省くこと)
自分で責任を負えること
Linux へのある程度の理解があること(bash sh 等のコマンドを理解していること)

ターミナルモードの意味がわからない方は、手を出すべきではないと思います。特別 Linux に対して理解が無い場合は、試験用のシステムを作成してそこで試すなり、全体のバックアップを取って行うなりする方が賢明かと思います。
当然ですが、当院の掲載情報を利用して何が起こっても、当方は一切の責任を負いません。近くに頼れるベンダーがある場合はそちらにお願いする方が早いと思います。チャレンジする必要のある場合で頼れるベンダーのない場合は、医療従事者でシステムに責任を持つ方であれば、当院にお問い合わせください。
SLAT対応CPU 搭載パソコンで Pro 以上のバージョンの Windows であれば、追加費用なしで Hyper-V による仮想PC を設置できます。この仮想 PC に Ubuntu + ORCA をインストールすると、好きなように試験ができて便利です。

postfix での外部へのメール送信

OCN 等、プロバイダーによっては、メールサーバーから SMTP (ポート25番やリレーで使用するポート587番)での送信を許可していないものもあり、このようなプロバイダーでは、メールサーバーを設置しても外部へはメールが送れません。ネットで検索してみましたが、OCN ではプロバイダーから指定された SMTP サーバーとそのポート番号を postfix の設定ファイルで

relayhost = [SMTPサーバー]:ポート番号

と、指定すると送れたという記事もありましたが、試験したところ送信を拒否されました。
この設定でも

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/smtp-auth
smtp_sasl_security_options = noanonymous

を追加して、/etc/postfix/smtp-auth に、プロバイダーから自分のメール用に指定されているユーザー名とパスワードを指定すれば出来るのではないかと思いますが、外部と通信できる別メールサーバーを使用したため、試していません。
外部へのメール送信が許可されていれば

relayhost = 

と書いて、下の3行は要らないと思います。当然承認ファイルも hash データベース作成も不要です。

ipv6 について

(ipv6 をそもそも使っていないため)ipv6 を使用する設定にしておくと、つまらないトラブルが起こりましたので、合わせて ipv6 を無効にするようしてあります。

vim について

ファイルのエディタは vim を使用しています。元々インストールされている vim は簡易版なので、カーソル移動とかできません。通常版をインストールして使っています。
簡単な使用方法は
キー d を2度押すと該当行削除
キー x を押すとカーソルの文字を削除
キー :wq を続けて押すと保存終了
キー :q! を続けて押すと編集中止終了
キー i を押すと編集モード(エディタのようにバックスペースで消したり挿入したりできます)
キー Esc を押すと編集モードを終了
と、いったところです。

swatch・postfix・mailutilsをインストールします。

$ sudo apt-get -y install swatch postfix mailutils
(vim が簡易版のままなら後ろに vim 付けとくと使いやすいかもです)

自分のホスト名を引けるようにします

$ sudo vi /etc/hosts

中身

127.0.0.1       localhost.localdomain localhost
127.0.1.1       マシンのフルネーム (例:orca.myclinic.local)

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

ipv6 を無効にします

$ sudo vi /etc/sysctrl.conf

最終行の下に、以下の2行を足します

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

設定を反映させます

$ sudo sysctl -p

postfix の設定は、以下の部分の修正( $ sudo vi /etc/postfix/main.cf )

myhostname = マシンのフルネーム (例:orca.myclinic.local)
mydomain = マシンのドメイン名 (例:myclinic.local)
myorigin = $myhostname
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, マシン名, localhost.localdomain, localhost, $mydomain
relayhost = [中継してもらうsmtpサーバーのフルネーム]:送信するポート番号 (例:25 とか 587 とか)
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/smtp-auth
smtp_sasl_security_options = noanonymous
mynetworks = 127.0.0.0/8, 所属するネットでのアドレス (例:192.168.0.100/24)

承認ファイルを作成します

$ sudo vi /etc/postfix/smtp-auth 

承認ファイルの中身を書きます(1行目はいらないかもです)

中継してもらうsmtpサーバーのフルネーム   承認用のユーザー名:承認用のパスワード
[中継してもらうsmtpサーバーのフルネーム]:送信するポート番号   承認用のユーザー名:承認用のパスワード

hash データベースを作成して postfix を再起動します

$ sudo postmap hash:/etc/postfix/smtp-auth
$ sudo service postfix restart

メールの送信試験

$ mail -s メールの題名 送信先のメールのアドレス

cc:
と、表示されるので、そのままエンターキーを押し、その行以下に送信するメールの内容を直接打ち込んでください。書き終わったら CTRL + D で、終了送信します。

メールの送信状態確認

$ cat /var/log/syslog

最終行あたりに、送信のログがあると思います。エラーが無いか確認してみてください。こんなのがあれば送信できています。

Jan  1 00:00:00 マシン名 postfix/smtp[XXXXX]: XXXXXXXXXX: to=<送り先のメールアドレス>, relay=中継してもらうsmtpサーバー[中継してもらうsmtpサーバーのアドレス]:ポート番号, delay=222, delays=222/0.02/0.03/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as XXXXXXXX)

swatch の設定

$ vi ~/.swatchrc

./swatchrc の中身です

watchfor   /panda.*fail.*/
 echo red
 mail addresses=メールを送りたいアドレス(但し、「@」を「@」に置き換えてください),subject=ORCA_Caution_Message
 throttle 00:10:00
watchfor   /panda.*[Ss]uccess.*/
 echo green
 mail addresses=メールを送りたいアドレス(但し、「@」を「@」に置き換えてください),subject=ORCA_Success_Message
 throttle 00:10:00

watchfor の後の「/」で囲まれた部分は、syslog に表示される行の正規表現です。
ORCA は同期エラーがある場合には

Jan  1 01:00:0 サーバー名 panda/dbredirector[XXXXX]: DB synchronous failure

のようなメッセージを、同期をとるコマンドを入れて成功した時には

Jan  1 01:00:0 サーバー名 panda/dbsync[XXXXX]: Success all sync

のようなメッセージを syslog に書き込みます。

watchfor   /panda.*fail.*/

であれば、「panda」「何かの文字」「fail」「何かの文字」の並びで引っかかります。
dbredirector のエラーのみを送信したければ、

watchfor   /panda/dbredirector.*DB synchronous failure/

でよいです。「/」の囲まれた中に「/」を書く場合には、前にエンマークを入れてください。入れないと認識されません。
正規表現等 swatch の設定については http://oxynotes.com/?p=7517 に詳しく書いてありました。

echo green

は、緑色で画面表示という意味です。画面表示が不要なら echo の行はいりません。

throttle 00:10:00

は、一度送ると10分間は送らないという意味です。延々ログを履いた時にメールを短時間で送り続けることを防ぐためです。適時変更してください。

*** 注意 ***
Sendmail 対策なので、postfix 使うなら不要と思いますが、

$ sudo cp /usr/share/perl5/Swatch/Actions.pm /usr/share/perl5/Swatch/Actions.pm.org
$ sudo vi /usr/share/perl5/Swatch/Actions.pm

Actions.pm の143 行目の

      $args{'MAILER'} .= ' -oi -t -odq';

の -odq を削除します

      $args{'MAILER'} .= ' -oi -t';

*** 注意ここまで ***

swatch を daemon 起動します。

$ swatch -c ./.swatchrc -t /var/log/syslog --daemon

sudo vi /etc/rc.local で rc.local の exit 0 の前の行に
sudo -u ユーザー名 swatch -c /home/ユーザー名/.swatchrc -t /var/log/syslog –daemon

で、自動起動の設定をしておけば、再起動時にも勝手に動いてます

コメントを残す

メールアドレスが公開されることはありません。