Posted at
DatadogDay 15

カスタムメトリクスとタグの関係について

More than 1 year has passed since last update.

Datadogの優れている機能の1つは、カスタムメトリクスを簡単に収集することができる仕組みを持っていることです。

Datadogのagentには、dogstatsdと呼ばれるEtsyが公開しているstatsdのpythonを同梱している他、API経由でカスタムメトリクスを送信するための多種に渡るラッパーライブラリーも準備しています。

この優れた機能を有効に使い切るには、一つだけ注意することがあります。Datadogは、SaaSとして監視サービスを提供しているため、ユーザーが送信できるカスタムメトリクスに制限を掛けています。大量のカスタムメトリクスを一期に送信されてしまうと、他のユーザーと共有しているリソースを一期に消費してしまい、他のユーザーのサービス品質を保持できなくなることがあるからです。現状この制限は、ソフトリミットという形で運営されており、常識の範囲を超えてDataを受信しない限りlockがかかることは無いです。

しかしながら、Datadogの特性を理解した腕の良いエンジニアが、ステップアップした使い方をしようとするときに起こすミスでもあります。(実際にlockがかかることがあります。)

そのような、事態に遭遇しないために、今回のadvent calendarでカスタムメトリクスの計算方法を説明したいと思います。そうすることにより、カスタムメトリクスを選択したり、そのカスタムメトリクスに付与するtagの設計をする際の参考にしてください。


基本的な考え方

監視対象台数 X 100 = アカウントに対して送信可能なカスタムメトリクス名の総数

上記の計算式が、基本のメトリクス名数としての制限値となります。

総カスタムメトリクス数

図の様に総数に含まれるカスタムメトリクスの内訳は、自由に分散することができます。

僕の経験では、メトリクスの命名の規則をミスってアカウントにlockがかかったユーザーは未だ見たことがありません。


メトリクス名数が制限値以内でもtagの組み合わせでDatadogの制限に掛かるケース

Datadogでは、上記をクリアしていても、各メトリクスに対して1000以内のtagの組み合わせ(ユニーク性)の制限を課しています。

アカウントに対して送信可能なメトリクス名の総数 x 1000 = アカウントに対して送信可能なユニークメトリクスの総数

上記の式が、ユニーク性を考慮した制限値となります。

過去の僕の経験からいうと、このユニーク性の部分でDatadogのアカウントがlockになるユーザーが大半です。大抵のケースは、ユーザーidや広告枠のid、時間、何かのシリアル番号など、無限に増えていく要素をタグに組み込んでしまうミスが多いです。無限に増殖するtagの発生頻度にもよりますが、下記に示すように複数のtagに無限増殖する値が入る場合、それらを全て個別の組み合わせを持ったメトリクスデーターをグループとして処理し蓄積していくようにバックエンドが設計されているため、累乗でグループが増殖していくことになります。

従って、下記のユニークメトリクスのケースを理解し、必要がないユニーク性は発生しないようにする方法を検討する必要があります。

例題 :

metric name: auth.exceptionCount

tags: "method:X", "method:Y", "exception:A", "exception:B"

個別のtagの組み合わせとしてカウントされるケース: (ユニークメトリクスなケース)

auth.exceptionCount with tag “method:X”

auth.exceptionCount with tag “method:Y”

auth.exceptionCount with tags “method:X” and “exception:A” //unique because of new tag “exception:A”

auth.exceptionCount with tags “method:X” and “exception:B”

auth.exceptionCount with tags “method:Y” and “exception:A”

auth.exceptionCount with tags “method:Y” and “exception:B”

同一のtagの組あわせとしてカウントされるケース: (ユニークメトリクスではないケース)

auth.exceptionCount with tags “method:X” and “exception:A”

auth.exceptionCount with tags “exception:A” and “method:X”


まとめ

先にも書きましたが、あくまでもソフトリミットなので、上記に書いたことを理解してカスタムメトリクスを送信していれば、多少オーバーしてもlockがかかることはありません。

安心してカスタムメトリクスを送信してください。更に、カスタムメトリクスは、Lambdaからでも、又それ以外のソース(IoTソース)からでもカスタムメトリクスを送信することができます。Datadogの良いところをこういったカスタムメトリクスも同一ダッシュボード上に表示できたり、60インチの巨大TVスクリーンに表示できるようなダッシュボードを簡単に作れるところだと思います。

色々なカスタムメトリクスを、思う存分送り込んで、ダッシュボードを作ってみてください。