続・Treasure Data の job の状態を監視する
オリジンは Treasure Data の job の状態を監視する mackerel plugin 作った – まっしろけっけ です。
経緯
上述の記事の通り、minne の Chief Technical Lead の @shiro16 さんが Treasure Data の job の状態を mackerel で監視できるようにしてくれてから、2年が経った。
元々は 20 jobs の状態が監視できれば良かったのだけど、2年経つとバッチ実行するジョブやアドホックに実行されるジョブが増えて、どうやら 21 jobs 以上 queued になっていることがあるようなので、21 jobs 以上監視する方法を考えた。
API の調査
最初は API の from_id とか to_id パラメータに job id を渡して20件ずつ取ればいいか?と思っていたけど、 treasure-data/td-client-ruby の実装を読んでいると、どうも from と to パラメータで件数を指定できるようになっていることに気づいた。
が、ドキュメントには from_id と to_id しか載ってない(*)ので Treasure Data のサポートデスクに聞いてみたところ、from_id と to_id パラメータは廃止されていて、from と to パラメータが使えると教えてもらった。
(*) Treasure Data は今ドキュメントシステムを刷新中とのことで、僕が見ていたドキュメントの記載は古かったけど、ちゃんと新しいパラメータが載ってるドキュメントもあった。
td-client-go と plugin で新パラメータを使う
td-client-go は該当の API を使う関数がパラメータに対応していなかったので、Go の凄いエンジニア @monochromegane さんに助けてもらいながら新パラメータを使えるようにした。
Add options to ListJobs func. by zaimy · Pull Request #26 · treasure-data/td-client-go
td-client-go に Pull Request 出したら Contributor の方にすぐに見てもらえて、少し手直ししてマージしてもらえたので、plugin 側も対応した。
ついでに job status も指定できるようになったので、例えば元々「新しい方から succeeded 5 jobs, processing 10 jobs, queued 30 jobs」の場合に全体で 20 jobs しか取れなかったので mackerel 上では「succeeded 5 jobs, processing 10 jobs, queued 5 jobs」だったのが、status を個別に指定して 21 件以上 mackerel に送ることで、現実に即して「processing 10 jobs, queued 30 jobs」を取れるようになった。
実際のキューを見ていると、これまで succeeded な job に押し出されて監視できていなかった job があったり、21 jobs 以上 queued になっていることがあったりしたので、今回の変更でそういうケースも監視できるようになって良かった。