メトリクスタイプ
ネットワーク パフォーマンス モニタリングの正式提供を開始しました! ネットワーク パフォーマンス モニタリング提供開始!

メトリクスタイプ

メトリクスタイプに応じて、特定のメトリクスをクエリ内で集計する方法や、Datadog でグラフ化した際に表示される値が変わります。また、デフォルトの時間集計関数や、メトリクスタイプモディファイアーも、メトリクスタイプによって変わります。メトリクスタイプは、メトリクスの概要ページで特定のメトリクスの詳細サイドパネルに表示されます。注: この詳細サイドパネルでメトリクスタイプを変更すると、既存のすべての可視化およびモニターでメトリクスの動作が変わるため、無意味な履歴データが表示される場合があります。

メトリクスには、次の送信タイプを指定できます。

メトリクスを送信した後、Datadog Web アプリケーション内に格納される際、次の 3 つのメトリクスタイプが存在します。

  • COUNT
  • RATE
  • GAUGE

以下のメトリクスタイプ定義のセクションで、使用できるメトリクスタイプについて詳しく説明します。また、送信タイプと Datadog アプリ内タイプのセクションでは、送信されるメトリクスの各タイプに対し、Datadog 内でどのタイプで格納されるかについて説明しています。

メトリクスタイプ定義

メトリクスのタイプについて理解を深めるため、それぞれが表すこと、また Datadog 内で変更する方法を、例を使って考えてみましょう。

server:web_1server:web_2 の 2 つの Web サーバーが、以下のようにリクエストを継続的に受信したとします。

  • 最初の 30 秒間に HTTP リクエストを 10 回受信
  • 次の 30 秒間に HTTP リクエストを 20 回受信
  • その後の 30 秒間は HTTP リクエストを受信しない

メトリクス送信タイプ

COUNT メトリクス送信タイプは、定義された時間間隔 (フラッシュ間隔とも呼ばれます) 内に発生したイベントの数を表します。この数は時間とともに増えることもあれば減ることもあり、単調に増加するものではありません。COUNT は Web サーバーが受け取るリクエストの数や、エラーの数を追跡するために使用されます。

: この COUNT とは異なり、RATE は定義された時間間隔で正規化される 1 秒あたりのイベントの数を表します。

たとえば、server:web_1 に対する number.of.requests.count メトリクスを、COUNT タイプで Datadog へ 30 秒ごとに報告するとします。

このメトリクスのそれぞれの値/データポイントは COUNT として送信され、30 秒のフラッシュ間隔の最中に受信したリクエストの数を表します。その後、次の値がメトリクスによって報告されます。

  • 最初の 30 秒間は 10
  • 次の 30 秒間は 20
  • 最後の 30 秒間は null

: COUNT メトリクスで 0 の値が送信されると、Datadog には null が格納されます。

この COUNT メトリクスは、次のようにグラフ表示されます。

注: StatsD の COUNT メトリクスは、フラッシュ間隔で正規化される 1 秒あたりの単位数を報告するため、Datadog 内で少数を表示します。

COUNT メトリクスの送信方法については、以下を参照してください。

RATE メトリクス送信タイプは、定義された時間間隔 (フラッシュ間隔) で正規化される 1 秒あたりのイベント数を表します。RATE は Web サーバーが受け取るリクエストのレートを追跡するために使用されます。

: この RATE とは異なり、COUNT メトリクス送信タイプはフラッシュ間隔内のイベントの数を表します。

たとえば、server:web_1 に対する number.of.requests.rate メトリクスを、RATE タイプで Datadog へ 30 秒ごとに報告するとします。

それぞれの値/データポイントは、リクエストのレートを表します。その後、次の値がメトリクスによって報告されます。

  • 最初の 30 秒間は 0.33
  • 次の 30 秒間は 0.66
  • 最後の 30 秒間は null その後、この 0.330.660 のパターンを繰り返します。: RATE メトリクスで 0 の値が送信されると、Datadog には null が格納されます。

RATE はリクエストの数を正規化した 1 秒あたりの値の変化を示すため、このメトリクスをグラフ化すると次のように表示されます。

RATE メトリクスの送信方法については、以下を参照してください。

GAUGE メトリクス送信タイプは、特定の物事の値を経時的に表します。指定した時間間隔 (フラッシュ間隔) 内で最後に記録された特定の物事の値のスナップショットです。GAUGE は温度やメモリ使用量を表すために使用されます。

たとえば、server:web_1 に対する number.of.requests.gauge メトリクスを、GAUGE タイプで Datadog へ 30 秒ごとに報告するとします。

それぞれの値/データポイントは、ある時点でのリクエスト受信回数の合計を表します。その後、次の値がメトリクスによって報告されます。

  • 最初の 30 秒間は 10
  • 次の 30 秒間は 30 (リクエスト数 10 に 20 を追加)
  • 最後の 30 秒間は 30 (リクエストを新しく受信していないため値が変わりません)

この GAUGE メトリクスは、次のようにグラフ表示されます。

GAUGE メトリクスの送信方法については、以下を参照してください。

HISTOGRAM メトリクス送信タイプでは、値セットの統計的分布を測定することができます。Datadog の HISTOGRAM メトリクスタイプは、StatsD のタイマーメトリクスタイプの機能を拡張したものであり、定義された時間間隔 (デフォルトのフラッシュ間隔は 10 秒です) 内に送信される値を (Agent 側で) 集計し、さまざまな時系列を生成することで、その値セットで可能なさまざまな集計を表します。Datadog によって格納されるメトリクスタイプは、集計に応じて異なります。

たとえば、ある Agent のフラッシュ間隔内に HISTOGRAM メトリクス <メトリクス名> に対して X 値を送信した場合、次の時系列が Agent によってデフォルトで生成されます。

集計説明Datadog のメトリクスタイプ
<メトリクス名>.avgフラッシュ間隔内に送信された X 個の値の平均値を報告します。GAUGE
<メトリクス名>.countフラッシュ間隔内にサンプリングされたポイントの数 (つまり X) を報告します。Agent はその数を RATE として送信することで、アプリ内で値 X/interval として表示します。RATE
<メトリクス名>.medianフラッシュ間隔内の X 個の値の中央値を報告します。GAUGE
<メトリクス名>.95percentileフラッシュ間隔内の X 個の値の 95 パーセンタイルを報告します。GAUGE
<メトリクス名>.maxフラッシュ間隔内に送信された X 個の値の最大値を報告します。GAUGE

たとえば、フラッシュ間隔内で [1,1,1,2,2,2,3,3] という値を持つ server:web_1 に対し、HISTOGRAM タイプの request.response_time.histogram メトリクスを Agent を通して Datadog に報告するとします。すると、このフラッシュ間隔に関して以下のメトリクスが Datadog に送信されます。

メトリクス名Datadog のメトリクスタイプ
request.response_time.histogram.avg1,88GAUGE
request.response_time.histogram.count8RATE
request.response_time.histogram.median2GAUGE
request.response_time.histogram.95percentile3GAUGE
request.response_time.histogram.max3GAUGE

:

  • どの集計を Datadog に送信するかは、datadog.yaml 構成ファイルhistogram_aggregates パラメーターで構成します。デフォルトでは、maxmedianavgcount の集計だけが Datadog に送信されます。sum および min を構成に追加することができます。
  • どのパーセンタイル集計を Datadog に送信するかは、datadog.yaml 構成ファイルhistogram_percentiles パラメーターで構成します。デフォルトでは、95pc のパーセンタイルだけが Datadog に送信されます。

ヒストグラムメトリクスの送信方法については、以下を参照してください。

DISTRIBUTION は、フラッシュ間隔内に複数のホストから送信された値を集計して、インフラストラクチャー全体の統計的分布を測定するメトリクス送信タイプです。DISTRIBUTION メトリクスは、サービスなどの論理オブジェクトを基底のホストから独立して計測することを目的としています。

Agent 側でフラッシュ間隔内の集計を行う HISTOGRAM メトリクスタイプと異なり、DISTRIBUTION メトリクスは、フラッシュ間隔内に収集されたすべての未加工データを Datadog に送信し、サーバー側で集計を行います。基になるデータ構造は集計されておらず、未加工データを表すため、ディストリビューションは次の 2 つの主要な機能を提供します。

  • パーセンタイル集計の計算
  • タグ付けのカスタマイズ

たとえば、あるフラッシュ間隔内に DISTRIBUTION メトリクス <メトリクス名> に対して X 値を送信した場合、デフォルトで次の時系列をクエリに利用できます。

集計説明Datadog のメトリクスタイプ
avg:<メトリクス名>フラッシュ間隔内に送信された X 個の値の平均値を報告します。GAUGE
count:<メトリクス名>フラッシュ間隔内にサンプリングされたポイントの数 (つまり X) を報告します。Agent はその数を RATE として送信することで、アプリ内で値 X/interval として表示します。RATE
max:<メトリクス名>フラッシュ間隔内に送信された X 個の値の最大値を報告します。GAUGE
min:<メトリクス名>フラッシュ間隔内に送信された X 個の値の最小値を報告します。GAUGE
sum:<メトリクス名>フラッシュ間隔内に送信された X 個の値の合計値を報告します。GAUGE

たとえば、server:web_1server:web_2 に対し、DISTRIBUTION タイプの request.response_time.distribution メトリクスを Datadog に報告するとします。あるフラッシュ間隔内に server:web_1 は値 [1,1,1,2,2,2,3,3] を、server:web_2 は値 [1,1,2] を同じメトリクスに報告した場合、このフラッシュ間隔に関して以下のメトリクスが Datadog 内で作成されます。

メトリクス名Datadog のメトリクスタイプ
avg:request.response_time.distribution1,73GAUGE
count:request.response_time.distribution11RATE
max:request.response_time.distribution3GAUGE
min:request.response_time.distribution1GAUGE
sum:request.response_time.distribution19GAUGE

ディストリビューションメトリクスの送信方法については、DogstatsD の場合を参照してください。

パーセンタイル集計の計算

GAUGEHISTOGRAM などのメトリクスタイプと同様に、DISTRIBUTION メトリクスタイプでは countminmaxsumavg の集計を利用できます。ディストリビューションメトリクスは、まず他のメトリクスと同じ方法で (コードで設定されたカスタムタグを使用して) タグ付けられます。

ディストリビューションメトリクスでは、さらにパーセンタイル集計 (p50p75p90p95p99) も使用できます。つまり、フラッシュ間隔 10 秒でパーセンタイル集計を指定したディストリビューションメトリクスであれば、countsumminmaxavgp50p75p90p95p99 の集計を使用できます。

パーセンタイル集計をディストリビューションメトリクスに追加すると (アプリ内 Datadog ディストリビューションメトリクスページを参照)、次の時系列が追加で作成されます。

メトリクス名Datadog のメトリクスタイプ
p50:request.response_time.distribution2GAUGE
p75:request.response_time.distribution2GAUGE
p90:request.response_time.distribution3GAUGE
p95:request.response_time.distribution3GAUGE
p99:request.response_time.distribution3GAUGE

: この例で server:web_1 の p50 (中央値) は 2server:web_2 の p50 は 1 です。Agent 側で集計を行うと、この 2 つの中央値の中央値である 1.5 が算出されますが、グローバルな p50 (中央値) は、2 つのサーバーを合わせた値セット [1,1,1,1,1,2,2,2,2,3,3] の中央値なので、実際には 2 になります。ディストリビューションメトリクスによるサーバー側の集計で、これが統計的に正確な値として返される場合があります。

タグ付けのカスタマイズ

この機能を使用すると、ホストレベルの粒度を必要としない場合に、メトリクスのタグ付けを制御できます。ホワイトリストベースのタグ付け制御の詳細については、ディストリビューションメトリクスのページを参照してください。: この機能では、! によるタグの除外を使用できません。

SET メトリクスタイプは、特定の時間間隔における一意なイベントの発生回数をカウントします。

SET メトリクスの送信方法については、以下を参照してください。

DogStatsD では、TIMER メトリクスタイプは HISTOGRAM メトリクスタイプとして実装されています (標準の StatsD に含まれるタイマーと混同しないようにしてください)。タイマーは、コードセクションの実行にかかる時間、ページを完全にレンダリングするまでにかかる時間などのタイミングデータだけを測定します。TIMER を送信するコードをインスツルメントする方法については、 DogStatsD ドキュメントの TIMER を参照してください。

送信タイプと Datadog アプリ内タイプ

Datadog はさまざまなソースから送信されたメトリクスを受け取ることができます。

ソースごとにそれぞれ制限があるため、メトリクス送信タイプと Datadog アプリ内に格納されるタイプとが必ずしも一致するとは限りません。

送信元送信方法 (Python)送信タイプDatadog アプリ内タイプ
APIapi.Metric.send(type="count", ...)COUNTCOUNT
APIapi.Metric.send(type="gauge", ...)GAUGEGAUGE
APIapi.Metric.send(type="rate", ...)RATERATE
DogStatsDdog.gauge(...)GAUGEGAUGE
DogStatsDdog.distribution(...)DISTRIBUTIONGAUGE、COUNT
DogStatsDdog.count(...)COUNTRATE
DogStatsDdog.increment(...)COUNTRATE
DogStatsDdog.decrement(...)COUNTRATE
DogStatsDdog.set(...)SETGAUGE
DogStatsDdog.histogram(...)HISTOGRAMGAUGE、RATE
Agent チェックself.count(...)COUNTCOUNT
Agent チェックself.monotonic_count(...)COUNTCOUNT
Agent チェックself.gauge(...)GAUGEGAUGE
Agent チェックself.histogram(...)HISTOGRAMGAUGE、RATE
Agent チェックself.rate(...)RATEGAUGE
Agent チェックself.set(...)SETGAUGE