oinume journal

Scratchpad of what I learned

Heroku Schedulerやcronが正常に稼働しているかをチェックするDead Man's Snitchが便利

これはHeroku Advent Calendar 2015 21日の記事です。今回はHeroku Schedulerを監視するDead Man's Snitchというものを紹介します。

Heroku Schedulerってなに?

Heroku上で特定のスクリプトやコマンドを動かすcronみたいなもの。「みたいなもの」というのは、cronと違って「何時何分に実行する」というような厳密な時間指定ができず、10分、1時間、1日単位でしか指定ができません。イメージとしては以下のような感じ。

Heroku Scheduler setting

ただ、このような要件でも十分であれば、無料のDynoでも利用できるのがメリットだと思います。

Dead Man's Snitchでコマンドが正常に稼働しているかチェックする

Heroku Schedulerで動かしているコマンドが正常に稼働しているかをチェックすることができないか?と思って調べていたらこのDead Man's Snitchに行き着きました。原理としては

  1. Heroku Schedulerにyour_command.sh && curl https://nosnch.in/<hash>のようにコマンドを登録しておき、your_command.shが成功した時にcurlで成功したということをDead Man's Snitchに送信する(チェックイン)
  2. Dead Man's Snitch側では、1時間の間隔(*1)でちゃんとコマンドが成功しチェックインされたかどうかをチェック
  3. もし1時間以上チェックインしていなければ、指定したメールアドレスにアラートメールが送信される

という流れです。チェックインをチェックする間隔は1日, 1週間などの間隔が設定可能で、有料プランだと15分、30分の間隔もできるようです。

ちなみにチェックインされていない場合に送られてくるアラートメールはこんな感じ。

Hi <app>,

FYI "<app>" doesn't seem to be working.

Last healthy check-in: about 8 hours ago (16 Dec 16:13 UTC)

You might want to check it out:

https://deadmanssnitch.com/snitches/<hash>

Would you like to pause your snitch?

https://deadmanssnitch.com/snitches/<hash>/pause

Kind regards,

Dead Man's Snitch

なおこのDead Man's Snitchは特定のURLにGETでアクセスするだけのシンプルな仕組みなので、Heroku Schedulerだけではなくcronでも使えます。もちろんcurlからではなくプログラムのコードからでも呼び出せます。

まとめ

Heroku Schedulerやcronの死活監視に使えるDead Man's Snitchというサービスを紹介しました。データーベースのデータをバックアップするような重要なスクリプトにDead Man's Snitchによる死活監視を入れておくとスクリプトが動作していないことにすぐ気付けるのでオススメです。