Diary of a Perpetual Student

Perpetual Student: A person who remains at university far beyond the normal period

グラフウィジェット縦軸固定機能をどう活用するか

arthur-1 Mackerel Advent Calendar 2023ラソン11日目の記事です。

グラフウィジェットの縦軸を特定の範囲で固定できるようになりました

これまでのMackerelのグラフは縦方向の値域が自動で決まっていました。基本的には下端が0、上端がメトリックの最大値になるように自動で調整していました。また、%単位のグラフの場合には値が極端に小さい場合を除いて、上端が100%(またはその倍数)になるようになっていました。

2023年9月に、カスタムダッシュボードのグラフウィジェットおよび、そこから遷移した全画面表示のグラフにおいて、この調整をせずに縦軸を特定の値域で固定するオプションがリリースされました。

mackerel.io

今回はこの機能の活用方法をご紹介します。

マイナスの値をグラフとして表示する

前述した通りMackerelの基本のグラフでは下端が0になるので、マイナスの値をグラフとして描画すると、見切れてしまう、あるいは全く表示されなくなってしまいます。

これはホストのシステムメトリックをただ表示するだけだった時代の仕様を引きずっていると言えると思います。システムメトリックは一般にマイナス値になることがないからです。しかし、カスタムメトリックやサービスメトリック、式による監視などの機能を考えると、マイナスの値もグラフにしたいという要求は生まれて当然のものと考えます。

例として、以下の式をご覧ください。

alias(
  movingAverage(
    diff(
      host(***, custom.thermal.cpu-thermal.temp),
      timeShift(host(***, custom.thermal.cpu-thermal.temp), 10m)
    ),
    1h
  ),
  temp-trend
)

これは、buty4649/mackerel-plugin-thermal を用いて取得したCPU温度の変化傾向を計算するMackerelの式です。timeShiftした上で元のメトリックとdiffを取ると傾きが得られます。ただしこのままだとギザギザして扱いづらいので、movingAverageでwrapすることにより平滑化している、という式になっています。

このグラフを描画すると以下のようになります。傾きというのは一般に負の値を取り得るので、一部分が見切れてしまっています。

そこで、グラフウィジェットの編集画面の下の方に追加された縦軸固定のオプションに値を入力していきましょう。今回は正と負の両方の値をとり得るので、中央が0になるように固定してみます。

すると、以下のようにマイナス値もグラフとして描画されました!

グラフの形状だけでなく具体的な数量の大きさに着目させる

Mackerel開発チームで定期的に開催しているPWG(Performance Working Group)というミーティングでは、Mackerelのダッシュボードを見てMackerelのシステムの直近の傾向について観察しています。

このミーティングで「グラフがガタついていてスパイクに見えるけど大丈夫ですか?」「値としてはものすごく小さいから大丈夫だね」という会話をすることがあります。僕はこの会話に掛かる時間がもったいないなあと感じていました。誰もがグラフを見て、その値が十分小さいから気にする必要がないということがわかるようになっていてほしいです。

そこで、縦軸をある程度大きい値にすることで、小さな変動がグラフとして目立たなくなります。

一方で、同じようなことができるもう一つの機能があります。それは補助線です。こちらも2023年リリースでしたね。

mackerel.io

縦軸固定機能がhardMax的な挙動をするのに対し、補助線はsoftMax(メトリックの値がsoftMaxを超えていないならsoftMaxが上端に、超えているならばメトリックの最大値が上端になる)的な挙動をするので、softMaxを求める場合には補助線を用いると良いでしょう。

誰か個人の知識・発言に頼らずともチームで監視を育てることができるよう、カスタムダッシュボードの体験を今後も高めていきたいですね。もうすぐリリースできそうな機能がありますので、またご紹介できればと思います。