2013年5月25日土曜日

2013年5月17日金曜日

muninの監視通知をpushoverで受信する

”muinin"と書いていますが、特にmuninに限った話ではなく、pushoverの提供しているAPIを経由して何かしらアラート的な情報をiPhone/Android端末にpush通知しましょう、という話です。


◯Pushover
https://pushover.net/

iPhoneもしくはAndroidに手軽にPushメッセージを通知する事のできるサービスです。
会員登録すると、各ユーザーに固有のtokenが割り当てられます。それを使用してAPI経由でPushoverにメッセージを送ると、tokenに紐付いたユーザーの携帯端末宛に、pushメッセージが送信されます、
なお、pushの受信には専用のアプリをダウンロードする必要があり、アプリは有料になっています。


◯Pushoverにメッセージを送る
手順としては以下。

  1. 会員登録を行う。https://pushover.net/ より
  2. 会員登録完了後、あらためて https://pushover.net/ にログインすると、画面右側にユーザーに割り当てられたtoken(user key)が表示されます。こちらを何かしらメモに控えておきます。
  3. 同画面の一番下の「You Applications」より、「Edit」をクリックし、アプリケーション登録画面に進みます。ここで「Create a New Application」をクリックし必要事項を入力します。
    ひと通り完了すると、アプリケーションごとのtoken(API Token/Key)が発行されるので、こちらを何かしらメモに控えておきます。
  4. 入手したtoken情報を使用してAPIにメッセージを送るプログラムを用意します。
    各種言語での操作方法がpushoverのページの掲載されていますが、ここでは一番手軽なshell scriptsによるものを例示します。こちらを"pushover.sh"として保存します。
    #!/bin/sh
    
    API_TOKEN="(API Token/Key)"
    USER_TOKEN="(user key)"
    MESSAGE=`< /dev/stdin`
    
    echo "send notify message : '${MESSAGE}'"
    
    curl -s -F "token=${API_TOKEN}" -F "user=${USER_TOKEN}" -F "message=${MESSAGE}" https://api.pushover.net/1/messages.json
  5. 以下の様な形で標準入力でshell scriptsに文字列を与えてあげると、その内容をpushover APIに送信します。
    echo "help me!!" | ./pushover.sh

◯muninとの連携
muninのエラーメッセージ通知先としてpushoverを使用する場合は、muninがインストールされているサーバー上に上記shellを設置した上で、"munin.conf"に以下のように記述をすればOKです。
一般的なメール通知の方法も参考程度に併記しておきます。また、"max_messages" "always_send"の設定は任意です。下記だとcriticalエラーのみpush通知されます。
contacts admin push
contact.admin.command        mail -s "Munin ${var:group}::${var:host}" alert@hoge.com
contact.admin.max_messages      1
contact.admin.always_send       warning critical
contact.push.command         /var/lib/pushover.sh
contact.push.max_messages       1
contact.push.always_send        critical


◯使用してみての感想
メール受信にありがちな配送遅延が少なく、かなり迅速にエラーが検知できるようになると思います。
pushoverではアラートの取得のみ行うという使い分けにしておけば取得漏れも極力減らせますし、通知音のカスタマイズなども行いやすいので、運用的にもメールと分離するのは便利な事が多いです。

ただ、pushoverはメッセージの保存件数に上限があり、かつ検索機能も貧弱なため、速報的な通知はpushover経由でpushで受け取り、過去の履歴についてはメールや他ツールで管理する、というやり方が望ましいのではないかと思います。

多少の制約はあれども、個人的にはいまさら「メールでのアラート受信」の時代には戻れない感があります。便利な世の中になりましたね。
ただ、pushoverはひと月あたり7,500件のメッセージまでしか送れないっぽいので(以降は10,000件追加あたり$50必要?)、送りすぎには注意。



2013年5月1日水曜日

crontabの中で"%"を使用したい場合はエスケープする必要がある

知らなかった…
The "sixth" field (the rest of the line) specifies the command to be run. The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the cronfile. Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.

(ref. http://linux.die.net/man/5/crontab)

たとえば
`date --date '1 day ago' +'%Y-%m-%d'`
みたいにdateコマンドの出力書式を指定したい時などに”%"を使用しますが、crontabに記載したい場合は以下のようにエスケープしてあげる必要があります。
`date --date '1 day ago' +'\%Y-\%m-\%d'`