グラフオプションの Fill() 関数

なぜ補間なのか?

補間は、メトリクス系列の任意の大きなギャップを埋めることではなく、いくつかの系列を一緒に揃え、ソース間で集計を実行できるようにすることです。

Datadog でグラフを作成する場合、ほとんどの場合、別々のソースからのデータを 1 本の線にまとめてグラフにすることになります。しかし、別々のソースが同じ時間、同じ頻度でデータを送信するとは限りません。

net.bytes_rcvd    |  3:00:00  3:00:10  3:00:20  3:00:30  3:00:40 ...
------------------+-------------------------------------------------
1: host:A,env:prod|    15                         25
2: host:B,env:test|             10                         40
------------------+-------------------------------------------------
    sum (1+2)     |    15?      10?               25?      40?

上記の例では、ソースが自然に配置されていないため、ソースを直接マージすると、不合理な結果が生じることがわかります。補間は、計算のためだけに適切な値を提供することで、この問題を解決します。

net.bytes_rcvd    |  3:00:00  3:00:10  3:00:20  3:00:30  3:00:40 ...
------------------+-------------------------------------------------
1: host:A,env:prod|    15       18.3              25        X
2: host:B,env:test|     Y       10                30       40
------------------+-------------------------------------------------
    sum (1+2)     |   15 + Y    28.3              55       40 + X

ここで、X と Y は表示されている区間の前後のデータを使って補間されます。

どのような場合に補間が発生するのか?

グラフクエリに複数のソースが対応する場合、補間が行われます。例:

  • 空間集計 (avg:system.cpu.user{env:prod}) では、env:prod タグを持つホストが 2 つ以上ある場合、Datadog は補間を用いて時間の平均値を計算します。
  • グループクエリ (net.bytes_rcvd{*} by {host}) では、ソース間の計算を行わない場合もありますが、整列した系列を提供することでグラフラインのマウスオーバーや比較を容易にすることができます。

例えば、avg:net.bytes_rcvd{host:a} のように、1 つの送信元から送信された 1 つのメトリクスをグラフ化する場合、host:a が常に同じタグで net.bytes_rcvd を送信すると仮定すると補間は必要ありません。

マルチパートクエリの場合、補間は行われません。例: avg:system.cpu.user{env:prod},avg:system.cpu.user{env:dev}

補間の制御方法は?

すべてのメトリクスタイプのデフォルトの補間は線形であり、実際のサンプルが取得された後、最大で 5 分間行われます。補間は、Gauge タイプのメトリクスを除いて、どのメトリクスタイプに対しても、.as_count() および .as_rate() 修飾子が使用された場合には無効化されます。詳しくは メトリクスタイプ修飾子を参照してください。

修飾子 .fill() は、補間パラメータを制御します。

修飾子説明
fill(linear, X)実サンプルから X 秒後までの線形補間を行います。
fill(last, X)最後のサンプル値を X 秒まで複製します。
fill(zero, X)X 秒までの補間が必要な場所に 0 を挿入します。
fill(null, X)補間を無効にします。X の値は重要ではありません。

よくあるご質問

メトリクスにギャップがあり、fill(zero) では何もできず、グラフ上に長い直線が残っています

グラフはデータ点を線で結んだだけのものなので、データのない期間が長いと長い直線に変換され、値を埋めるための補間の必要はありません。補間は、集計や複数行のグラフを可能にするために、系列を揃えることです。

これに対し、モニターは時間軸のロールアップで補間値を評価し、平均値を算出するものです。

補間方法を選択する

通常、デフォルトの補間方法 (メトリクスのタイプに基づいて選択される) で問題ありませんが、これらのデフォルトをオーバーライドすることが望ましい場合もあります。

線形補間は、同じソースから定常的に報告されるメトリクスに最適です。疎なメトリクスや、時とともに変化するソースから報告されるメトリクスでは、補間を無効にした方が興味深いことがよくあります。これは、測定するものの値が変化したときだけデータポイントを送信する場合に意味があります。

Null にすると、最後の実測値から 5 分後に補間された値がグラフに表示されるのを防ぐことができます。

参考資料

お役に立つドキュメント、リンクや記事:

PREVIEWING: may/unit-testing