Process ExporterとTreemap for Grafanaでプロセスごとのメモリ使用量をざっくり可視化する

タイトルまま。 いい加減Grafana力を高めようと最近Grafonnetに入門し、Process Exporterをソースとした有益なダッシュボードを作りたいなーとあれこれ試していた過程でTreemapプラグインを発見し、Datadogで以前みかけたメモリマップみたいなビュー作ったら良さそうだなーということで作ってみた。

f:id:egmc:20210117185020p:plain

環境

Process Exporterは2環境で動かしていてOSはそれぞれUbuntu xenial、bionic

  • Grafana  7.2.0
  • Treemap plugin 0.5.0
  • process-exporter 0.7.5

grafana.com

github.com

Process Exporterの設定

Process Exporterの設定はちょっと癖のある感じだが、どの単位でグルーピングしたいか?を定義して上から順に試行してマッチしたところにまとめられる、みたいな動作だと思っている。
のでこれはまとめたいみたいなものを上の方に条件として書いていき、最後にどこにもマッチしなかったら実行ユーザー単位でまとめるみたいな設定を書いている。

process_names:
  - comm:
    - php-fpm7.2
    - mysqld
    - memcached
    - apache2
  - name: "exporters"
    cmdline:
    - '/usr/local/bin/.+[_-]exporter'
  - name: "{{.Username}} processes"
    cmdline:
    - '.+'

exporter系はまとめたいなーとかそういう扱いをしているが、とりあえず実行ユーザー単位でまとめておけばカーディナリティも爆発せず割と推測できるレベルにまとまるのであまりがんばらなくてもいいんじゃないかと思う(ubuntuのデフォ環境だったらwww-dataだったらapacheの子プロセスだよねーとか)。

process exporterでまとまった結果はプロセス数もメトリクスとして持っているので、たとえば「長期的にapacheの1プロセスあたりが使うメモリが増えてきている」みたいな傾向をみたりするのにも使えるのでうまく使えばベンリなんでないかと。

グラフの定義

ダッシュボードが二個混在していて分かりづらいですがこんな感じで。 Treemapはtextとnumericの値をもったtable的な構造を期待しているので、Rangeとしての結果ではなくInstantオプションを指定して最新の値のみを使うように。

github.com

↑はgrezzlyでapplyすることを前提にしているのでいちおう出力結果のjsonはこんな感じ。

2021/2/14 追記

ある程度汎用的に定義しなおしてgrafana.comの方にあげてみました

grafana.com