LoginSignup
4
3

More than 5 years have passed since last update.

異常が発生した時は、メール…ではなくTwitterでアラートを送る

Last updated at Posted at 2016-08-29

異常が起きた。メール、いやTwitterで報告だ。

サーバーの異常は突然来ますよ。暦の上ではシステム管理者の日は1か月前に過ぎましたが、むしろそれ以外の日は364日(365日)とも異常に備えなければなりません。

after-an-exhausted-day-of-work-in-the-office-1-1391125-639x426.jpg

サーバーで異常が発生したら、管理者に対してメールを自動送信させ、その異常に気付けるようにするというのがこれまでの主流でした。

しかし時代は流れ、メールも肩身が狭くなってしまいました。SMTPポート(25)は、OP25Bなどの政策の影響で通りが悪くなってしまいましたし、幸いにしてその影響を受けなかったとしても迷惑メールが横行してしまったおかげで、疑心暗鬼的に超反応するようにされてしまったspamフィルターに、アラートメールが水際で破棄されてしまう1ことさえ起こる有様。

そこでTwitterです。

異常事態を検出したら、メールで通知する代わりにTwitterのダイレクトメッセージ(DM)を用いて管理者にメッセージを送るのです。しかもこの方法なら、Bash on Ubuntu on Windowsからも簡単にアラート発信が可能です。なにせ、現状のBash on Ubuntu on WindowsにはMTAが入っておらず、メール送信が困難ですからね。

パワーアップした「小鳥男」だ

TwitterのDM発信には、改良したTwitterアプリ恐怖!小鳥男が便利です。(アプリ名は気にしないでください)

alert.png

こんなふうにして管理者の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未満で何通もメッセージを送るようにする、などを環境によってはする方がよいかもしれません。


  1. アラートメールは人ではなく機械が送るため、メール本文の機械っぽさを見透かしてspam判定されてしまうことがあるようです。 

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3