グラフ表示入門

グラフエディターの設定には、GUI(デフォルトの手法)とJSON形式(より完全な手法)の2種類があります。このページではGUIエディターでの設定について説明します。JSON形式を使用したより詳しい設定に関しては、JSONを使用したグラフ表示入門を参照して下さい。

グラフエディターの使用

グラフを開くと右上隅に鉛筆マークがあります。このマークをクリックするとグラフエディターがポップアップします。

Graphing Overview

グラフエディターにはShare, JSON, Editの3つのタブがあります。 Shareタブでは、グラフを外部のwebページに挿入するためのコードを取得可能です。 JSONタブはより柔軟な設定が可能なエディターである一方、使用するにはグラフを定義する言語を理解しておく必要があります。 Editはデフォルトのタブであり、グラフ表示のオプションをGUIから選択して設定することができます。最新の機能は JSONエディターでのみ使用できる場合があります。

GUIエディターを使用したグラフ表示

グラフエディターウィンドウを開くと、最初はEditタブがセットされています。このインターフェイスでグラフをあれこれ操作するほとんどの設定が選択できます。以下は、一般的なPostgresインテグレーションダッシュボードでのグラフの例です:

Graphing Edit Tab

ダッシュボードの中でグラフを操作するにはいくつかのステップがあります。

グラフ表示するメトリクスの選択

グラフを作成するにあたり、グラフ表示したいメトリクスが既に決まっているかもしれません。それならば、さっそくそのメトリクスをChoose metrics and events セクションの最初のドロップダウンボックスから選択します。もしそうではなく、どのメトリクスをグラフ表示すべきか分からないのであれば、メトリクスエクスプローラMetrics Explorerを利用してみると良いでしょう。あるいは、メトリクスサマリMetrics Summaryを見ることもできます。

メトリクスエクスプローラはさまざまなグラフ表示の設定をアドホックに簡単に試して見てみることができます。メトリクスサマリページでは、各メトリクスの単位やメトリクスのタイプなどをリストから確認することができます。

メトリクスを可視化するグラフ形式の選択

グラフ表示するメトリクスが決まったら、次はメトリクスを可視化するグラフ形式を選択します。

Timeseries (時系列データのグラフ)

Timeseriesグラフは1つまたは複数のメトリクスの時間推移を可視化するのに最適です。グラフ表示する時間の幅は、タイムボード上の設定あるいはスクリーンボードでの各グラフの設定によって決まります。Timeseriesグラフの表示はlines(折れ線グラフ), areas(面グラフ), bars(棒グラフ)を選択できます。Timeseriesグラフの例を見るには、. Timeseriesグラフはタイムボードとスクリーンボードの両方で利用することができます。

Timeseries

Heatmap (時系列の分布図グラフ)

Heatmapグラフは多くのタグで集計されたメトリクス(例えば,hosts )を可視化するのに最適です。 ホストから得られたメトリクスで値が多く分布しているほど、その値の部分は濃い色を示します。Heatmapグラフの例を見るには、. Heatmapグラフはタイムボードとスクリーンボードの両方で利用することができます。

Heatmap

Distribution (分布図グラフ)

Distributionグラフは多くのタグで集計されたメトリクスを可視化するもう一つの方法です。Heatmapグラフとは異なり、DistributionグラフのX軸は時間ではなくメトリクスの値になり、Y軸はその分布の度数を示します。Distributionグラフの例は、. Distributionグラフはタイムボードとスクリーンボードの両方で利用することができます。

Distribution

Toplist (メトリクスのランキング)

Toplistグラフは、CPU消費の高い順、残ディスク容量の少ない順、などホスト毎のメトリクスの値を大きいものあるいは小さいものから順に並べてリストしたい場合に最適です。Toplistのグラフの例を見るには, (#collapseTopList). Toplistグラフはタイムボードとスクリーンボードの両方で利用することができます。

TopList

Change (メトリクスの変化量グラフ)

Changeグラフは指定した時間枠でのメトリクスの変化量を可視化することができます。Changeグラフの例を見るには、.

Changegraph

Hostmap

Hostmapはメインメニューから利用できるHostmapと同様に、あらゆるメトリクスについて指定したホストのスコープで可視化することができます。Hostmapの例は、.

Hostmap

指定したグラフ表示をフィルタと集計方法の設定で最適化する

フィルタ

メトリクスを可視化するグラフ表示の形式が決まったら、今度はフィルタ機能によってグラフ表示させたい特定のホストを抽出します。メトリクスを選択したボックスの右手に、(everywhere) とデフォルト表示されているドロップダウンボックスがあるので、そこから抽出したいホストが該当するタグ(複数可)を選択しましょう。なお、タグの詳細に関しては、Guide to Tagging ページを参照して下さい。

集計の算出方法

フィルタの次は、集計の算出方法の設定です。デフォルトでは平均値をとるavg by が選択されていますが、ボックスをクリックすることでmax by, min by, sum by も選択することができます。一定間隔で取得されているメトリクスの値には、複数のホストやインスタンスから集められた多様な値が存在していることが多く、ここで選択する集計方法によってそうした多様な値をどのように1つの値として集計するかを決定します。つまり、例えば100のホストからのメトリクスについてグラフ表示する場合、sum by を選択すると100ホストから取得しているメトリクスの合計値がグラフ表示されることになります。

集計のグループ指定

集計の算出方法を選択したら、今度はグラフの線1本1本の構成要素が何なのかを決めます。hostを選択した場合は、それぞれのホストに対してグラフ線が表示されます。あるいはタグで定義している何らかのホストのロールを選択した場合は、その各ロールに対してグラフ線が表示されます。ロールを選択した場合は複数のホストがロールごとにグループ化されてグラフ表示されるため、先に選択した集計の算出方法 によってメトリクスの値が集計されグラフ表示されることになります。

メトリクスの値のロールアップ(値を丸める)

前述の集計方法の設定にかかわらず、グラフ表示画面の物理的な制約によって適用されているデータ集計の仕組みがあります。例えば、毎秒更新されるメトリクスについて4時間の時間幅でグラフ表示したい場合、すべてを表示するには14,400のデータポイントを表示する必要があります(60x60x4=14,400)。 一方で、各グラフはどのような時間幅を選んだ場合でも表示可能なのは約300データポイントまでです。

上記例では、画面上の単一のデータポイントは48のデータポイントを代表することになります(14,400÷300= 48)。他の例として、Datadog Agentによって20秒間隔で取得されているメトリクスの場合、1日で4,320のデータポイントが取得されます(24x60x60/20=4,320)。このメトリクスにおいて1日の時間幅でグラフ表示する場合は、5分や10分の間隔で値をロールアップされることも考慮しておくとよいでしょう。

ロールアップ関数を使う場合は、集計方法を設定したボックスの右手のプラスマークをクリックし、Rollupを選択します。そして算出方法でロールアップし、どれくらいの時間間隔でロールアップするかを指定します。

例えば、全てのマシンの利用可能なディスク容量の平均値をとり、そのメトリクスは60秒ごとの平均値としてロールアップしたグラフ表示をさせる場合には、以下のような指定します:

rollup example

JSONエディターに切り替えると、以下のようなクエリとして記述されます:

"q": "avg:system.disk.free{*}.rollup(avg, 60)"

JSON形式を使用したより詳しい設定に関しては、JSONを使用したグラフ表示入門を参照して下さい。

より高度な演算関数の適用

分析のニーズによっては、他の数値演算関数が必要なこともあるでしょう。変化量や微分、平滑化や回帰計算などがあります。利用可能な関数は、..

FunctionCategoryDescription
abs()Arithmeticabsolute value
log2()Arithmeticbase-2 logarithm
log10()Arithmeticbase-10 logarithm
cumsum()Arithmeticcumulative sum over visible time window
integral()Arithmeticcumulative sum of ([time delta] x [value delta]) over all consecutive pairs of points in the visible time window
.fill()Interpolationchoose how to interpolate missing values
hour_before()Timeshiftmetric values from one hour ago
day_before()Timeshiftmetric values from one day ago
week_before()Timeshiftmetric values from one week ago
month_before()Timeshiftmetric values from one month ago
per_second()Ratethe rate at which the metric changes per second
per_minute()Rateper_second() * 60
per_hour()Rateper_second() * 3600
dt()Ratetime delta between points
diff()Ratevalue delta between points
derivative()Rate1st order derivative; diff() / dt()
ewma_3()Smoothingexponentially weighted moving average with a span of 3
ewma_5()SmoothingEWMA with a span of 5
ewma_10()SmoothingEWMA with a span of 10
ewma_20()SmoothingEWMA with a span of 20
median_3()Smoothingrolling median with a span of 3
median_5()Smoothingrolling median with a span of 5
median_7()Smoothingrolling median with a span of 7
median_9()Smoothingrolling median with a span of 9
.rollup()Rollupoverride default time aggregation type and time period; see the “Rollup” section below for details
count_nonzero()Countcount all the non-zero values
count_not_null()Countcount all the non-null values
top()Rankselect the top series responsive to a given query, according to some ranking method; see the “Top functions” section below for more details
top_offset()Ranksimilar to top(), except with an additional offset parameter, which controls where in the ordered sequence of series the graphing starts. For example, an offset of 2 would start graphing at the number 3 ranked series, according to the chosen ranking metric.
robust_trend()Regressionfit a robust regression trend line using Huber loss; see the “Robust regression” section below for more details
trend_line()Regressionfit an ordinary least squares regression line through the metric values
piecewise_constant()Regressionapproximate the metric with a piecewise function composed of constant-valued segments
anomalies()Algorithmsoverlay a gray band showing the expected behavior of a series based on past behavior; see our guide to anomaly detection
outliers()Algorithmshighlight outlier series; see our guide to outlier detection

.as_count() & .as_rate()

These functions are only intended for metrics submitted as rates or counters via statsd. These functions will have no effect for other metric types. For more on details about how to use .as_count() and .as_rate() please see our blog post.

Rollup

.rollup() is recommended for expert users only. Appending this function to the end of a query allows you to control the number of raw points rolled up into a single point plotted on the graph. The function takes two parameters, method and time: .rollup(method,time)

The method can be sum/min/max/count/avg and time is in seconds. You can use either one individually, or both together like .rollup(sum,120). We impose a limit of 350 points per time range. For example, if you’re requesting .rollup(20) for a month-long window, we will return data at a rollup far greater than 20 seconds in order to prevent returning a gigantic number of points.

Top functions

  • a metric query string with some grouping, e.g. avg:system.cpu.idle{*} by {host}
  • the number of series to be displayed, as an integer.
  • one of 'max', 'min', 'last', 'l2norm', or 'area'. 'area' is the signed area under the curve being graphed, which can be negative. 'l2norm' uses the L2 Norm of the time series, which is always positive, to rank the series.
  • either 'desc' (rank the results in descending order) or 'asc' (ascending order).

The top() method also has convenience functions of the following form, all of which take a single series list as input:

[top, bottom][5, 10, 15, 20]_[mean, min, max, last, area, l2norm]()

For example, bottom10_min() retrieves lowest-valued 10 series using the ‘min’ metric.

Robust regression

The most common type of linear regression – ordinary least squares (OLS) – can be heavily influenced by a small number of points with extreme values. Robust regression is an alternative method for fitting a regression line; it is not influenced as strongly by a small number of extreme values. As an example, see the following plot.

{{ partial “img.html” (dict “root” . “src” “robust-trend.png”) }}

The original metric is shown as a solid blue line. The purple dashed line is an OLS regression line, and the yellow dashed line is a robust regression line. The one short-lived spike in the metric leads to the OLS regression line trending upward, but the robust regression line ignores the spike and does a better job fitting the overall trend in the metric.

メトリクスの値に対して演算を行う

DatadogのUIでは、さまざまな演算オプションを利用してメトリクスをグラフ化する機能をサポートしています。 +, -, /, * のいずれかを利用して、グラフに表示される値を変更することができます。この構文では、複数のメトリクスの演算だけでなく整数値を用いた演算も利用できます。

メトリクスの値に整数演算を行う

メトリクスに対して算術演算を行うことによって、メトリクスの値のグラフへの表示方法を変更することができます。例えば、あるメトリクス値を倍精度で可視化したい場合を考えます。system.load.5を例にとると、:

Arithmetic 1

グラフエディターをクリックし、そこで “advanced…” を選択すると、グラフエディター内で設定することができます。ここで、Graph these queries as ボックスに算術演算を入力します。この例では、倍精度で可視化したいため、a * 2 と入力します。

Arithmetic 2

メトリクスの値同士の演算を行う

また、jvm.heap_memoryの使用状況をパーセンテージで表示したいような場合は、すでにDatadogにデータ収集されている2つのメトリクスに対して以下のような演算を行うことができます:

jvm.heap_memory / jvm.heap_memory_max

この演算は先の例と同様に、 “advanced…” を選択してグラフエディター内で設定することができます。ここでは、メトリクスの値同士の演算を行うため、Add a metric to this expressionを選択します。

可視化したいすべてのメトリクスを追加すると、それぞれに文字が割り当てられていることがわかります。最初のメトリクスは a 、2番目のメトリクスは b というようにです。 ここで、Graph these queries asボックスに実施したい演算を入力します。この例では、( a / b )と入力します。

Arithmetic 3
2つ以上のメトリクスの値の演算を行った際にグラフが表示されない場合は、 このhelpドキュメント(英語)で説明が見つかるかもしれません。

Y軸のスケールと値の幅を設定する

デフォルト設定では、Y軸は線形で設定され、グラフ化されるメトリクスの値にもとづき0を含むかたちで自動的に最大値と最小値が設定されます。Y軸の設定を変更したい場合はShow Y-Axis Controlsボタンをクリックします。これにより、Y軸のスケールをliner(線形)からlog(対数)、pow(指数)または sqrt(平方根)に変更できます。そしてY軸の最大値と最小値をそれぞれ指定し、常にゼロを含むかどうかを選択できます。

メトリクスのグラフ表示にイベントを重ねあわせる

より意味のあるグラフ表示のために、ここまでのステップを繰り返して他のメトリクスをグラフ表示に追加することができます。あるいはグラフ表示が意味する文脈をより豊かにするために、関連するシステムで生じたイベントについても表示を追加できます。たとえば、githubのコミット、Jenkinsのデプロイ、あるいはDockerのcreationイベントなどです。これには、 Add Events ボタンをクリックし、イベントをクエリする文字列を入力するだけです。例えば、Githubのすべてのイベントを重ねあわせるならsources:githubと入力します。タグ role:web を持つイベントについて重ねあわせるなら tag:role:webと入力します。

タイトルの入力

タイトルを指定しない場合、メトリクスやグラフ表示での指定をもとに自動でタイトルが入力されます。しかしより適切に表現されたタイトルは、ダッシュボード上に多数あるグラフの中で目的をユーザーに示すのに役立ちます。ここでビジネスに役立つ意味を表現するのも価値のあることです。

保存

最後に Done をクリックし設定を保存します。保存後も、必要に応じていつでもグラフエディターから各設定を操作することができます。