はじめに
一定規模の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、メール通知なども簡単に連携できるので、使い勝手が良いと思います。
ぜひ機会があったら使ってみてください。