その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

resque_exporter 書いた

最近 Prometheus を使って各種メトリクスを取っていて,ふと resque の queue のステータス,つまり各 queue に 積まれている job の数を集計・可視化したくなったので,そのための exporter を書きました *1

実装としては,resque は <namespace>:queues という SET に全ての queue の名前を持っているので,SMEMBER を使って全 queue 名を取得してきて,
更にその各 queue 名に対応する <namespace>:queue:<queue_name> という LIST が queue そのものを表しているので,その LIST の長さを LLEN により取得することで各 queue の job 数を集計するという仕組みになっています (ここらへんがその実装).

なお,この exporter は resque 互換の job queue であれば問題なく動作するようになっていると思います (実際に我々は resque の java 実装である jesque でこれを使っています).


ところで golang で Prometheus の exporter を書くのは至って簡単で,

  1. prometheus/client_golang の Collector interface を実装する
  2. prometheus.MustRegister(exporter) と言う感じで Collector interface の実装を登録する
  3. http.Handle("/metrics", prometheus.Handler()) という感じで http 経由で export する口を作って serve

という感じでめいめい exporter を提供することが出来ます.シンプル!


なお補足ですが,色々な exporter の実装を見ていると scrapeFailures という counter を用意してあげて,そこに metrics 取得に失敗した回数を突っ込んでやるのがマナーっぽい感じでしたので,当 exporter でもそのようにしております.

*1:今までは fluentd + kibana という構成で似たようなことをやっていた