ひと月ほど前に、必要にかられて cron でのコマンド実行が失敗した時に通知を飛ばすために使う alerty というツールを ruby でさくっと書いた。

社内には同様の perl で書かれたツールがすでにあったが(自分が知ってるだけで2つあった)、Amazon SNS を使うという新しい要件もあったので、ruby でさくっと書き直した。プラグイン機構に対応していて、プラグインとして実装することで通知方式を増やすことができるようになっている。 いまのところデバッグ用の stdout,file、任意のコマンドに結果を渡す exec、そして Amazon SNS、Ikachan 通知プラグインが実装されている。

設定方法

インストールは gem install alerty のようにする。必要なプラグインも gem install する。

設定は /etc/alert/alerty.yml のようなファイルを作って、

log_path: STDOUT
log_level: 'warn'
timeout: 10
lock_path: /tmp/lock
plugins:
  - type: stdout
- type: ikachan
host: ikachan.test.local
channel: notify
subject: FAILURE: [
${hostname}] ${command}

あとは /etc/cron.d/xxxxx に

0 * * * * alerty -c /etc/alerty/alerty.yml -- /path/to/script --foo FOO --bar

のように cron の設定を書けばよい。/path/to/script の終了コードが 0 (正常終了) じゃない場合に、標準出力、標準エラー出力を alerty に渡して通知が飛ぶ.

おわりに

プラグイン追加 welcome。自分は daioikachan を使っているので作ってないけど、slack 通知プラグインはあってもよさそう。