Skip to content

カスタマイズしたグラフを表示する

拡張グラフパーマリンクのURLのクエリパラメータに簡単な式を書くことで、関数を使った柔軟なグラフを表示することが出来ます。(実験的機能)

拡張グラフパーマリンク以下のURLにて利用できます (title, unitパラメータは省略可能です)。

https://mackerel.io/orgs/<オーガニゼーション名>/advanced-graph?query=<メトリック>&unit=<単位>&title=<タイトル>

example オーガニゼーションの example サービス db ロールの loadavg5 メトリックの平均値と、一週間前の同じメトリックを重ねたもの

query: group(alias(avg(role(example:db, loadavg5)), 'loadavg5'),
             alias(timeShift(avg(role(example:db, loadavg5)), 1w), '1 week ago'))
       ?query=group(alias(avg(role(example:db, loadavg5)), 'loadavg5'),
                    alias(timeShift(avg(role(example:db, loadavg5)), 1w), '1%20week%20ago'))
       &title=example:db:loadavg5

拡張グラフパーマリンクで使用可能な関数

関数説明
host(hostId, metricName)ホストメトリックを返しますhost(22CXRB3pZmu, memory.*)
service(serviceName, metricName)サービスメトリックを返しますservice(Blog, access_count)
role(roleFullname, metricName)ロールに現在所属しているホストのメトリックを返しますrole(Blog:db, memory.*)
roleSlots(roleFullname, metricName)ロールのメトリックを返します。過去にロールに所属していたホストから送られたメトリックも取得できます。全てのカスタムメトリックと一部のシステムメトリック*1を使用できます。roleSlots(Blog:db, loadavg5)
avg(metrics)各時刻ごとに引数のメトリックの平均したメトリックを返しますavg(group(host(22CXRB3pZmu, loadavg5), host(22CXRB3pZmu, loadavg5)))
max(metrics)各時刻ごとに引数のメトリックの最大値のメトリックを返しますmax(host(22CXRB3pZmu, custom.foo.jobs.*))
min(metrics)各時刻ごとに引数のメトリックの最小値のメトリックを返しますmin(host(22CXRB3pZmu, custom.foo.jobs.*))
sum(metrics)各時刻ごとに引数のメトリックの合計したメトリックを返しますsum(host(22CXRB3pZmu, custom.foo.jobs.*))
product(metrics)各時刻ごとに引数のメトリックを掛けあわせたメトリックを返しますproduct(group(service(Blog, foo.bar), service(Blog, foo.baz)))
diff(metrics, metrics)各時刻ごとに1つ目の引数のメトリックから2つ目のメトリックを引いたメトリックを返しますdiff(service(Blog, foo.bar), service(Blog, foo.baz))
divide(metrics, metrics)各時刻ごとに1つ目の引数のメトリックを2つ目の引数のメトリックで割ったメトリックを返しますdivide(service(Blog, foo.bar), service(Blog, foo.baz))
scale(metrics, factor)定数倍したメトリックを返しますscale(service(Blog, foo.bar), 10.0)
offset(metrics, factor)定数足したメトリックを返しますoffset(service(Blog, foo.bar), 10.0)
percentile(metrics, percentage)各時刻ごとに引数のメトリックのpercentageパーセンタイルの値のメトリックを返しますpercentile(role(Blog:db, loadavg5), 80)
timeShift(metrics, duration)指定した期間分時刻をずらしたメトリックを返しますtimeShift(service(Blog, foo.bar), 1d)
movingAverage(metrics, duration)移動平均ですmovingAverage(service(Blog, foo.bar), 1d)
linearRegression(metrics, duration)現在時刻から duration 前 までのメトリック値をもとに線形回帰したメトリックを返しますlinearRegression(host(22CXRB3pZmu, loadavg5), 7d)
timeLeftForecast(metrics, duration, threshold)現在時刻から duration 前 までのメトリック値をもとに線形回帰した値が threshold になるまでの残り秒数を返しますscale(timeLeftForecast(host(22CXRB3pZmu, cpu.system.percentage), 7d, 10), 1/86400)
group(metrics, metrics, ...)引数のメトリック列を1つにまとめますgroup(service(Blog, foo.bar), service(Blog, foo.baz))
stack(metrics)グラフをスタック表示しますstack(service(Blog, foo.bar))
alias(metrics, displayName)メトリックの表示名をカスタマイズしますalias(service(Blog, foo.bar), 'Blog foo bar')
[*1](#1) `loadavg5`, `processor_queue_length`, `cpu.user.percentage`, `cpu.iowait.percentage`, `cpu.system.percentage`, `interface.rxBytes.delta`, `interface.txBytes.delta`, `disk.reads.delta`, `disk.writes.delta`, `memory.used`, `memory.cached`, `container.cpu.usage`, `container.memory.usage`

全ての関数は metrics を返します。また関数の引数のパラメータは以下の通りです。

引数説明
hostIdstringホストID2CXRB3pZmu, '2CXRB3pZmu', "22CXRB3pZmu"
metricNamestringメトリック名loadavg5, 'loadavg5'
serviceNamestringサービス名Blog, 'Blog'
roleFullnamestringサービス名とロール名を:で連結したものBlog:db, 'Blog:db'
metricsmetricsメトリック列alias(host(22CXRB3pZmu, loadavg5), 'L5')
displayNamestring表示名'blog max loadavg5'
durationstring整数に続けて単位を指定した期間です。使用可能な単位は m(分), h(時間), d(日), w(週), mo(月), y(年)です。5m, 1d
factorfloat係数1.5, 200, 1/86400
thresholdfloat閾値1.5, 200, 1/86400
percentagefloatパーセンテージ (0 < percentage < 100)80, 99.9