経緯
ペパボのデータアナリストの @zaimy が 何らかの原因で job が詰まって割当リソースを使い果たすと、該当のクエリ以外の job も巻き込まれて error になることがあり困った と言っていて
mackerel とかで見れると嬉しいなと言ってたのでじゃなんかやっておきますねって感じが経緯です。
mackerel plugin を選んだ理由
mackerel 使う以外にも色々方法はあると思うのですが、mackerel 使ってるし mackerel plugin 作ったことないから面白そうだし作ってみるかなで決めました。
TD API 調査
TD の API のリファレンスはこちらこれで job の一覧が取得できる。
がしかし 20 件しか取得できないっぽい。ということがわかった。
また、パラメータとして ?status=running とか渡すとその status で絞り込めるっぽいというのを発見したけど
リファレンスに載ってないので使わんでおこうかなと思った。
TD の client は td-client-go 使った。
この client でも上記の API にパラメータ渡せない仕様だったので素直に使うことにした。
20 件しか取得できないっぽいということなのでその 20 件の job の status しか見れないが、20 件の各 job の status を分類できるだけでも困っていることは解決できそうだったのでそれで良いかなということにした。
plugin 作成
plugin の作成はここら辺の公式のヘルプをみたり、大量にある plugin のコード読めばわかったのでそこまで問題はなかった。
一点だけハマったのが結果を出力するときに出力する値の型が制限されているのに気づかずに int で値を渡していて結果が出力されない...なぜだ...となりハマった。さっさとコードを読めば解決する案件だった
できたもの
できたものがこちら。
下記みたいになる。0 件の場合も出力しておいた方がグラフ途切れたりしないので良いなって思ったので追々やる予定
$ mackerel-plugin-treasure-data-job-count -treasure-data-api-key="your API KEY" treasure-data-job-count.error 1 1493270870 treasure-data-job-count.success 19 1493270870
あとは monitoring を行う server に plugin の設定入れて mackerel 側で監視の設定入れておしまい。
最後に
面白かったので満足