異常が起きた。メール、いやTwitterで報告だ。
サーバーの異常は突然来ますよ。暦の上ではシステム管理者の日は1か月前に過ぎましたが、むしろそれ以外の日は364日(365日)とも異常に備えなければなりません。
サーバーで異常が発生したら、管理者に対してメールを自動送信させ、その異常に気付けるようにするというのがこれまでの主流でした。
しかし時代は流れ、メールも肩身が狭くなってしまいました。SMTPポート(25)は、OP25Bなどの政策の影響で通りが悪くなってしまいましたし、幸いにしてその影響を受けなかったとしても迷惑メールが横行してしまったおかげで、疑心暗鬼的に超反応するようにされてしまったspamフィルターに、アラートメールが水際で破棄されてしまう1ことさえ起こる有様。
そこでTwitterです。
異常事態を検出したら、メールで通知する代わりにTwitterのダイレクトメッセージ(DM)を用いて管理者にメッセージを送るのです。しかもこの方法なら、Bash on Ubuntu on Windowsからも簡単にアラート発信が可能です。なにせ、現状のBash on Ubuntu on WindowsにはMTAが入っておらず、メール送信が困難ですからね。
パワーアップした「小鳥男」だ
TwitterのDM発信には、改良したTwitterアプリ恐怖!小鳥男が便利です。(アプリ名は気にしないでください)
こんなふうにして管理者のTwitterアカウントにアラートメッセージが送られてきます。ちなみにTwitterのイベントは、設定によりメールで通知することもできますので、管理者は引き続きメールで異常発生に気付けるようにもできます。
準備 ― アプリのインストール
まずはアプリケーションのインストールをします。方法はここに書いてあるとおりです。
ちなみに、過去にインストールしたことがある人なら、過去に作ったCONFIG/COMMON.SHLIB
のバックアップをとって、新しいバージョンをgit cloneして、
$ git clone https://github.com/ShellShoccar-jpn/kotoriotoko.git
新たなCONFIG
ディレクトリーの中にコピーすれば完了です。
使い方 ― 監視バッチスクリプトに組み込む
小鳥男をインストールするといろいろなコマンドができますが、ここで使うのはBIN
ディレクトリーの中にあるdmtweet.sh
というコマンドです。
サーバー上の各パーティション(スライス)の使用率を確認し、一定以上だった場合に管理者にアラートメッセージを送るというスクリプトの例を考えてみます。
このシェルスクリプトをcrontab等に登録すればよいだけです。
#! /bin/sh
PATH="/home/HOGEUSER/kotoriotoko/BIN:$PATH"
DIRs='/home|/var'
PERCENTAGE=90
ADMINISTRATOR=richmikan
msg=$(df |
grep -E "$DIRs" |
awk -v n=$PERCENTAGE 'substr($5,1,length($5)-1)>n{print $6,$5;}' |
awk '{print;} END{if(NR>0){print "ALERT: Free-space is not enough!"}}')
case "$msg" in
'') :
;;
*) printf '%s' "$msg" | dmtweet.sh -t $ADMINISTRATOR
;;
esac
exit 0
このシェルスクリプトの内容を見てみましょう。
序盤では
- 小鳥男のコマンドのパス
- 監視対象パーティション
- アラートを送ることする使用率のしきい値
- 管理者のTwitterID
を設定しています。
そして中盤では実際に使用率を確認し、終盤ではその結果アラート発信が必要だと判断された場合にdmtweet.sh
コマンドを使ってメッセージを送信するというものです。
メッセージ送信は、標準入力からメッセージ文を送り、それを宛先IDを引数指定したdmtweet.sh
コマンドに渡しているだけですから、非常に簡単に書けていることがわかります。
注意 ― 140文字の壁が微妙に残っている。
Twitterには140文字制限があることは有名ですが、ダイレクトメッセージではこの制約が解除されました。よって、140文字を超える文字数のアラートメッセージを送ることも可能なのですが……
メッセージの閲覧をするのがWebブラウザーではなくてTwitterアプリ(少なくとも非公認アプリ)の場合、Twitter APIの制約によって140文字を超えた部分のメッセージ表示されませんので注意が必要です。依然として140文字の壁が残っているようです。
なので、Twitterによるアラートはあくまで通知のみとし、詳しくはサーバー本体を見に来て調べるようにするとか、140未満で何通もメッセージを送るようにする、などを環境によってはする方がよいかもしれません。
-
アラートメールは人ではなく機械が送るため、メール本文の機械っぽさを見透かしてspam判定されてしまうことがあるようです。 ↩