カスタマイズしたグラフをつくってみよう

この記事は、Mackerel アドベントカレンダー(全部CRE)の14日目の記事です。 今回は、Mackerelで取得したメトリックを使って、カスタマイズしたグラフを表示する方法についてまとめます。

先日紹介した、システムメトリックや、カスタムメトリックは、基本的には、ホストの詳細画面や、サービス詳細画面のロールグラフとして、決まったフォーマットで表示することができますが、関数を書くと、取ってきたメトリックを自分が表示したいグラフにカスタマイズして表示することができます。 ここでは、入門的にものすごく簡単な式を書いてみたいと思います。

やってみようカスタマイズグラフ

カスタムダッシュボードをつくる

まずは、カスタマイズグラフを並べるためのダッシュボードをつくります。 [Dashboard] - [カスタムダッシュボードを追加] から新しいダッシュボードをつくることができます。

f:id:missasan:20181208190459p:plain

ダッシュボードにグラフウィジェットで式グラフを追加する

ダッシュボードにグラフウィジェットを追加します。 ダッシュボードの編集画面で、左上にあるグラフウィジェットマークをドラック&ドロップします。

f:id:missasan:20181208190524p:plain:w450

追加するウィジェットの[グラフのタイプ]は[式グラフ]を選びます。 カスタマイズしたグラフを表示したいときは、この式グラフというものを使います。

f:id:missasan:20181208190543p:plain:w450

f:id:missasan:20181208190821p:plain

簡単な式を書いてみる

まずは、関数を使って、特定のホストの特定のメトリックを描画してみます。

利用する関数はhost(hostId, metricName)です。 ホストIDは、以下のホストの詳細画面から取ってこられます。

metricNameは、私はいつも別タブで監視ルールの新規監視ルールを作成画面を開いておいて、検索窓で検索しています。 (もっとよいやり方があるかもしれません。。)

単純に特定ホストのloadavg5のグラフを表示するなら、こんな感じです。

host(
  [hostid],
  loadavg5
)

式がうまくかけると、式を入力する窓の右上がグリーンのチェックに変わります。 さらに、グラフが表示されます。

f:id:missasan:20181208190954p:plain

これを見ながら、式を書いては、きちんと表示されるかを確認するという作業を繰り返しながら少しずつつくっていきます。

特定のメトリックを指定して合計してみる

せっかくなのでわたしが最近つくったグラフを参考例としてあげて見ます。 たとえば、以下のような条件で、グラフを見たい時には関数を使う必要があります。

  • やりたいこと

    • 各サーバーのサービス用途のインターフェースを指定してトラフィックの合計が見たい
  • 条件

    • サーバーにはインターフェースが2つ接続されていて、ひとつはサービス用途、ひとつは管理用途に利用している
    • 物理サーバーを利用しており、サーバーごとにインターフェース名が異なっている

それでは関数を書いていきましょう。 関数を書く前に必要なものをそろえます。 別のグラフをつくる場合は、レシピも変わりますが、今回はこんな感じです。

  • 対象のホストID
  • メトリック名:interface.[インターフェース名].txBytes.delta
  • 使う関数:host(hostId, metricName), group(metrics, metrics, ...), sum(metrics)

利用する関数は、ヘルプページからある程度あたりをつけておくことがおすすめです。

まずは、2つのホストのメトリックを group(metrics, metrics, ...) で1つにまとめます。

f:id:missasan:20181208191147p:plain

このままだと重ね合わせのグラフになってしまうので、合計値の1本のグラフを表示したいです。 そこで、 sum(metrics) 関数を使って、1つにまとめたグラフを合計します。 すると以下のように1本のグラフで表示されます。

f:id:missasan:20181208191208p:plain

と、こんな感じで自分の好きなグラフをつくることができます。

まとめ

  • やりたいことを明確にする
    • どのメトリックつかう?
    • メトリック名は?
  • 使えそうな関数を探す
    • いくつかのメトリックをまとめる必要がある? → group(metrics, metrics, ...)
    • 合計、平均 をとる → sum(metrics), avg(metrics)
    • 定数倍、定数足す → scale(metrics, factor), offset(metrics, factor) などなど。関数は他にもいろいろあります。

できればロールグラフなど標準で見られるもので済ませたいところですが、どうしてもそれだけではまかなえないものについては式監視などを活用したいです。 あとは、うまくかけて、きちんと表示できると達成感もあるので、けっこう楽しいですよね。

半分は折り返したけどストックも切れてきました。残りは週末の私におまかせしよう。