Monitor LinearRegression metrics by Mackerel
 
            mackerelは式による監視や式によるグラフのカスタマイズができる。
会社では活用していて、面白いので個人でも使ってみる。
まずは式による監視を定義。Monitorsから設定できる。


公式にある例を参考に、ディスクがあふれる日数の監視をしてみる。
公式と違うのは、timeLeftForecast関数の閾値を割合で指定している点。現在の使用量をディスクサイズ合計で割って、その値が1(=100%)になるまでの時間を計算している。公式にある方法では閾値をファイルシステムの上限数で指定(2TBなら2000000000000という風に)しているが、割合での指定ならばディスクのサイズによらず固定値が使えるのでそれが利点どす。
あと、alias関数を使ってグラフに名前をつけている。ビジュアルを変えるための関数なので、監視のための式では意味ないと思うけどなんとなく…。
vda1の部分は環境によって違うので注意。
alias(
  scale(
    timeLeftForecast(
      divide(
        max(
          host(
            'ホストID','filesystem.vda1.used'
          )
        ),
        max(
          host(
            'ホストID','filesystem.vda1.size'
          )
        )
      ),'3mo',1
    ), 1/86400
  ), 'Disk overflows limit Date'
)
とりあえずディスクが一杯になるまでの日数が30日を切ったらWarning、7日を切ったらCriticalにしてみた。
さて、これで監視の設定はできたので、次はこのディスクが溢れるまでの日数をグラフに表示してみる。
カスタムグラフのページはhttps://mackerel.io/orgs/オーガニゼーション名/advanced-graph?query=クエリで表される。このページにアクセスすると、式を編集しながらグラフをカスタマイズできる。


まず先程の式をそのままはりつけて、ディスクがあふれる日数のグラフを表示してみる。

次に、group関数を使って、実際に使用しているディスク容量の割合を重ね合わせて表示してみる。
group(
  alias(
    scale(
      timeLeftForecast(
        divide(
          max(
            host(
              'ホストID','filesystem.vda1.used'
            )
          ),
          max(
            host(
              'ホストID','filesystem.vda1.size'
            )
          )
        ),'3mo',1
      ), 1/86400
    ), 'Disk overflows limit Date'
  ),
  alias(
    scale(
      divide(
        max(
          host(
            'ホストID','filesystem.vda1.used'
          )
        ),
        max(
          host(
            'ホストID','filesystem.vda1.size'
          )
        )
      ), 10
    ), 'disk used (%)'
  )
)

良さげ。
あとはこのグラフをすぐに見れるように、カスタムダッシュボードに表示しておく。
まずグラフのリンクをゲット(iframeじゃなくても良い)。

次にカスタムダッシュボード作成して先程のリンクを貼るだけ!


Goooooood

感想
面白い。
特にグラフ重ね合わせは1ヶ月前のグラフを重ね合わせてみたり、他のホストのグラフと重ね合わせてこっちのホストのapacheのワーカー数が上がるとdbのメモリがどんどん減ってくみたいな関連性を可視化できたりしてほんと面白いよ!