これは Livesense Advent Calendar 2024 DAY 2 およびSRE Advent Calendar 2024 DAY 3の記事です。
こんにちは、かたいなかです。
リブセンスが提供しているWebサービスの裏では、たくさんのバッチ処理が定期実行されています。
弊社では、そのようなバッチ処理を実行基盤とは独立したツールで監視しています。
最近、そのような監視ツールでより良いものがないか比較検討した内容を記事にまとめます。
バッチ処理の監視をなぜ重視するのか
リブセンスのWebサービスを支えるバッチ処理には重要なものも多く、実行されないと他社との契約違反になってしまうものがあります。
そのため、定時処理が失敗したことや、実行されているべき処理が実行されていないことに、素早く気付けるようにすることが極めて重要です。
また、実行基盤とは独立したところに監視ツールをおくことで、例えばArgo Workflowのアップグレードなどでバッチ処理がうまく起動しないケースも検知できるようにしたいです。
現状からなにを改善したいか
このような監視を行うために、リブセンスではCronitorが使われることが多いです。
Cronitorでは、バッチ処理の開始時と終了時にCronitorのAPIを叩く処理を追加することで、処理が期待通りの時間帯に開始されて正しく終了しているかを監視します。
一方で、Cronitorを使っていく中で、次に述べるような課題感がでてきていました。
IaCの仕組みを自作する必要がある
大量のバッチ処理の監視設定を楽に管理できるようにするに、IaCの仕組みを自前で作り上げる必要があります。
これについては、以前弊社の鈴木が記事にしたようにPython SDKによってIaCのしくみを自作することで対応しています。
欲を言ってしまえば、Terraformで安定して開発されているプロバイダが提供されていれば嬉しそうです。
運用上でのハマりが多い
Cronitorを先述のIaCで運用できるようにしても、細かい運用上の問題が発生し、サポートに工数がかかってしまうことも多いです。
例えば、以下のようなケースが有りました。
- 自作IaCでdiffをとった際に、Cronitor側でAPIが返すJSONに属性がこっそり追加されたことで、不要な差分が表示されてしまう
- IaCから監視設定を追加した際に、サポートに依頼しないと解決できない問題が発生することがある
より良いツールがないか調査した
このような課題感から、より良いツールがないか調査することにしました。
今回比較したのは以下の3つのサービスです。
- Cronitor
- Healthchecks.io(CronJob Monitoring)
- Oh Dear(CronJob Monitoring)
Cronitor以外の候補は、cron式でバッチ処理の実行時間が指定でき、監視設定をTerraformで管理できるものの中から選定しました。
比較その1 何を監視できるか
それぞれのサービスで、何を監視できるかが少し違いそうでした。
この差を生み出しているのが、Cronitorでいう grace period
という値の扱いの差です。いずれのサービスも少しずつ違う名前だったりはするものの、許容できる時間間隔という似た意味で使われているのですが、正確には少しずつ意味するところが違います。
Cronitorでは grace period
は、指定した時刻から実際に処理が開始するまで間の時間として許容できる長さで grace period
という設定値を用いています。
一方で、Healthchecks.ioやOh Dearでの対応する設定値は、指定した時刻から処理が終了するまでの時間として用いられています。
これによって、処理が終了する前に処理が開始されていないことでアラートが飛ばせる、つまり「3時間かかるバッチで開始時刻から3分後に処理が開始されていないのでアラートを飛ばす」というようなことができるのは、Cronitorのみのようでした。
他の2つのツールについても、処理の終了を監視する通常の監視設定に加え、処理の開始のみを監視する設定を追加するなどの工夫をすることで対応は可能かもしれません。
比較その2 IaCツールのサポート状況
IaCのツールのサポートについては以下のような形になりました。
- Cronitor: PythonのSDKを使えばIaCの実現は可能
- Healthchecks.io: コミュニティで開発されたTerraformプロバイダーがある
- Oh Dear: 公式でTerraformプロバイダーがある
Oh Dearは公式でTerraformプロバイダーを提供しており、この点では安心感がありそうです。
比較その3 通知先の設定
SlackやOpsGenie等のメジャーな通知先にはどのツールも対応していそうです。
一方で、Oh Dearにはバッチ処理ごとに失敗時の通知先を設定できず、一律で同じ送信先となってしまうのがネックになってしまいそうでした。
比較その4 監視設定の柔軟さ
連続でN回までの失敗を許容する設定( failure tolerance
)など、バッチ処理の監視のための設定の柔軟さに関しては、Cronitorに大きな分がありそうです。
マッハバイト等ではCronitorの柔軟な監視設定に依存している部分があるので、バッチ処理自体の整理等を行わないと他のツールを工夫無しで採用するのは難しそうでした。
所感
比較してみたところ、現状ではバッチ処理を監視するうえでの機能面ではCronitorが優れているように感じました。バッチ処理の監視に特化した柔軟な監視が行えるのが魅力的です。
一方で、Healtchchecks.ioやOh Dearは料金面やIaCのサポートでは優れているように感じました。簡単な監視でよいのであれば、運用コストを抑えて採用することができそうです。
これらのツールの苦手な部分を受け入れて使う以外の方法としては、監視ツールを自作する手もありそうです。
もし、この記事を読んでいる方で良いツールを知っているよという方がいましたら、X等で教えていただけますと大変助かります!