Cron監視ツール「Cronitor」の導入


はじめに

一定規模のwebサービスを運用していると、処理するジョブの数もそれなりに増えていき、以下のような問題が起こります。

  • 特定のジョブに対していつはじまっていつ終わるのか、成功したのか失敗したのかがわからない...。
  • すぐにでも既存のすべてのcronjobの監視をしたい

他ツールとしてRundeckやAirflowとかもあるが、そこまではやらずとも簡易的に導入したい。
こういった問題に直面した時におすすめしたいのがCronitor。

お仕事で導入する機会を得られたので、メモとして残しておく。

Cronitorとは

一言でいうと、Cron監視ツール。他ツールと比較しても小コストでの導入が可能で、導入するだけで既存の全てのCron監視が可能になる。「すぐにでも既存のすべてのcronjobの監視はしたい」といったケースには最適なツールと言える。
公式サイト:https://cronitor.io/

メリット・デメリット

メリット

  • 小コストで導入可能で記述もシンプル
  • crontabに追加するだけ

デメリット

  • ジョブの依存関係の定義などの高機能なことは不可能
  • 有料 ($24.95/月〜)一応フリープランもあるが1つのmonitorしか作れないため動作確認程度でしか使えない
  • 公式:https://cronitor.io/pricing

使い方

使い方は大別して2つあり、まず一つ目はcurlで繋げていくパターン。
各cronjobに一意のidが与えられるので、それを使用して以下のように記述します。
また、idは各モニターで確認でき、モニターの編集画面でスケジュールの設定やアラート通知等の設定ができます。

成功時は&&で繋ぐ。

#mh dom mon dowコマンド

4 5 * * * /invoice-reminders.sh && curl https://cronitor.link/d3x0c1/complete

失敗時は||で繋ぐ。

#mh dom mon dowコマンド

4 5 * * * /invoice-reminders.sh || curl https://cronitor.link/d3x0c1/fail

auth_keyの設定もこんな感じでできます。

#mh dom mon dowコマンド

4 5 * * * /invoice-reminders.sh || curl https://cronitor.link/d3x0c1/fail?auth_key=your_ping_api_key

公式:https://cronitor.io/docs/ping-api#security

もう一つはCronitorCLIを導入するパターン。
CronitorCLIをバッチサーバーにインストールして以下コマンドを叩くとモニターを作成してくれて、スケジュールも自動的に同期してくれる。
数分でセットアップが完了します。

worker1:〜$ cronitor discover

実行後のcrontabは以下のようになる。

25 * * * * cronitor exec aArCdx /invoice-reminders.sh

33 * * * * cronitor exec rHVpx7 cronitor discover --auto

cronitor exec id の形で各cronの実行通知、成功通知、失敗通知を適宜してくれる。
最後の行に追加されるcronitor discover --autoは、新規でCronを追加&変更する場合に1時間ごとにCronitorのタスクが実行され変更を自動検出し、Cronitorモニターに反映してくれる。
公式:https://cronitor.io/docs/integration-guide

まとめ

以上、ざっくりとCronitorについてまとめてみました。
そのほかに通知周りの設定なども、slackをはじめOpsGenie、PagerDuty、メール通知なども簡単に連携できるので、使い勝手が良いと思います。
ぜひ機会があったら使ってみてください。