概要

Datadog の製品と可視化は、特定の命名パターンに従うメトリクスとタグに基づいて構築されています。Datadog に送信される OpenTelemetry コンポーネントからのメトリクスは、該当する場合、対応する Datadog メトリクスにマッピングされます。これらの追加メトリクスの作成は、Datadog の請求に影響を与えません。

以下の図は、OpenTelemetry のメトリクスを Datadog が使用するメトリクスにマッピングするプロセスを示しています。

OpenTelemetry のメトリクス名を Datadog のメトリクス名にマッピングする際の決定プロセス。OTel メトリクスが Datadog の製品で使用されていない場合、またはそのセマンティクスが Datadog と同じ場合、そのまま Datadog に送信されます。それ以外の場合、OTel メトリクスから Datadog 形式のメトリクスが作成され、Datadog に送信されます。

otel プレフィックスの使用

Datadog Agent から取得されたメトリクスと hostmetrics レシーバーでキャプチャされたメトリクスを区別するために、コレクターで収集されたメトリクスにはプレフィックス otel を追加します。メトリクス名が system. または process. で始まる場合、otel. がメトリクス名の先頭に追加されます。Agent とコレクターの両方で同じインフラストラクチャーのアーティファクトを監視することは推奨されません。

Datadog は、この otel プレフィックスの廃止を含め、OTLP メトリクスのエクスペリエンスを改善する方法を検討しています。これに関するフィードバックがある場合は、アカウントチームに連絡してご意見をお寄せください。

ホストメトリクス

ホストメトリクスは、ホストメトリクスレシーバーによって収集されます。レシーバーのセットアップに関する情報は、OpenTelemetry Collector Datadog Exporter を参照してください。

Datadog メトリクスにマッピングされたこれらのメトリクスは、以下のビューで使用されます。

: トレースとホストメトリクスを相関付けるには、各サービスに対して Universal Service Monitoring 属性を構成し、サービスおよびコレクターインスタンスの両方で host.name リソース属性を対応する基盤ホストに設定してください。

以下の表は、どの Datadog ホストメトリクス名が対応する OpenTelemetry ホストメトリクス名に関連付けられているか、そして該当する場合、マッピング中に OTel ホストメトリクスを Datadog の単位に変換するためにどのような計算が適用されるかを示しています。

Datadog メトリクス名OTel メトリクス名メトリクスの説明OTel メトリクスに適用される変換
system.load.1system.cpu.load_average.1m1 分間の平均システム負荷。 (Linux のみ)
system.load.5system.cpu.load_average.5m5 分間の平均システム負荷。 (Linux のみ)
system.load.15system.cpu.load_average.15m15 分間の平均システム負荷。 (Linux のみ)
system.cpu.idlesystem.cpu.utilization
属性フィルター state: idle
CPU がアイドル状態にあった時間の割合。パーセントで表示。100 を乗算
system.cpu.usersystem.cpu.utilization
属性フィルター state: user
CPU がユーザースペースプロセスを実行していた時間の割合。パーセントで表示。100 を乗算
system.cpu.systemsystem.cpu.utilization
属性フィルター state: system
CPU がカーネルを実行していた時間の割合。100 を乗算
system.cpu.iowaitsystem.cpu.utilization
属性フィルター state: wait
CPU が I/O 操作の完了を待機していた時間のパーセント。100 を乗算
system.cpu.stolensystem.cpu.utilization
属性フィルター state: steal
仮想 CPU が他の仮想 CPU を処理するためにハイパーバイザーを待機していた時間のパーセント。仮想マシンにのみ適用。パーセントで表示。100 を乗算
system.mem.totalsystem.memory.usage物理 RAM の総量 (バイト単位)。MB に変換 (2^20 で除算)
system.mem.usablesystem.memory.usage
属性フィルター state: (free, cached, buffered)
/proc/meminfoMemAvailable の値が存在する場合、その値。存在しない場合は、free + buffered + cached memory を加算。バイト単位。MB に変換 (2^20 で除算)
system.net.bytes_rcvdsystem.network.io
属性フィルターの方向: receive
デバイスで受信したバイト数/秒。
system.net.bytes_sentsystem.network.io
属性フィルター direction: transmit
デバイスから送信されたバイト数/秒。
system.swap.freesystem.paging.usage
属性フィルター state: free
空きスワップ領域の量 (バイト単位)。MB に変換 (2^20 で除算)
system.swap.usedsystem.paging.usage
属性フィルター state: used
使用中のスワップ領域の量 (バイト単位)。MB に変換 (2^20 で除算)
system.disk.in_usesystem.filesystem.utilizationディスク領域の使用量を総量の割合で示す。

コンテナメトリクス

Docker Stats レシーバーは、OpenTelemetry Collector のためにコンテナメトリクスを生成します。Datadog Exporter は、以下のビューで使用するためにコンテナメトリクスを対応する Datadog メトリクスに変換します。

: トレースとコンテナメトリクスを相関付けるには、各サービスに対して Universal Service Monitoring 属性を構成し、各サービスの以下のリソース属性を設定してください。

  • k8s.container.name
  • k8s.pod.name
  • container.name
  • container.id

OpenTelemetry と Datadog のリソース属性のセマンティック規約のマッピングの詳細をご覧ください。

以下の表は、Datadog のコンテナメトリクス名が対応する OpenTelemetry のコンテナメトリクス名とどのように関連付けられているかを示しています。

Datadog メトリクス名OTel Docker Stats メトリクス名メトリクスの説明
container.cpu.usagecontainer.cpu.usage.totalコンテナの総 CPU 使用率
container.cpu.usercontainer.cpu.usage.usermodeコンテナのユーザースペース CPU 使用率
container.cpu.systemcontainer.cpu.usage.systemコンテナのシステム CPU 使用率
container.cpu.throttledcontainer.cpu. throttling_data.throttled_time総 CPU スロットル時間
container.cpu.throttled.periodscontainer.cpu. throttling_data.throttled_periodsコンテナがスロットルされた期間の数
container.memory.usagecontainer.memory.usage.totalコンテナの総メモリ使用量
container.memory.kernelcontainer.memory.active_anonコンテナのカーネルメモリ使用量
container.memory.limitcontainer.memory. hierarchical_memory_limitコンテナのメモリ制限
container.memory.soft_limitcontainer.memory.usage.limitコンテナのメモリソフト制限
container.memory.cachecontainer.memory.total_cacheコンテナのキャッシュ使用量
container.memory.swapcontainer.memory.total_swapコンテナのスワップ使用量
container.io.writecontainer.blockio. io_service_bytes_recursive
属性フィルター operation=write
このコンテナによってディスクに書き込まれたバイト数
container.io.readcontainer.blockio. io_service_bytes_recursive
属性フィルター operation=read
このコンテナによってディスクから読み取られたバイト数
container.io.write.operationscontainer.blockio. io_serviced_recursive
属性フィルター operation=write
このコンテナによって行われた書き込み操作の数
container.io.read.operationscontainer.blockio. io_serviced_recursive
属性フィルター operation=read
このコンテナによって行われた読み取り操作の数
container.net.sentcontainer.network.io. usage.tx_bytes送信されたネットワークバイト数 (インターフェイスごと)
container.net.sent.packetscontainer.network.io. usage.tx_packets送信されたネットワークパケット数 (インターフェイスごと)
container.net.rcvdcontainer.network.io. usage.rx_bytes受信されたネットワークバイト数 (インターフェイスごと)
container.net.rcvd.packetscontainer.network.io. usage.rx_packets受信されたネットワークパケット数 (インターフェイスごと)

Kafka メトリクス

OpenTelemetry メトリクスDatadog メトリクスソースDatadog メトリクスに適用される変換
otel.kafka.producer.request-ratekafka.producer.request_rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-producer}
otel.kafka.producer.response-ratekafka.producer.response_rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-producer}
otel.kafka.producer.request-latency-avgkafka.producer.request_latency_avgJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-producer}
kafka.producer.outgoing-byte-ratekafka.producer.outgoing-byte-rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-producer}
kafka.producer.io-wait-time-ns-avgkafka.producer.io_waitJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-producer}
kafka.producer.byte-ratekafka.producer.bytes_outJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-producer}
kafka.consumer.total.bytes-consumed-ratekafka.consumer.bytes_inJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-consumer}
kafka.consumer.total.records-consumed-ratekafka.consumer.messages_inJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-consumer}
kafka.network.io{state:out}kafka.net.bytes_out.rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}秒あたりのレートを計算し、Gauge として送信
kafka.network.io{state:in}kafka.net.bytes_in.rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}秒あたりのレートを計算し、Gauge として送信
kafka.purgatory.size{type:produce}kafka.request.producer_request_purgatory.sizeJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.purgatory.size{type:fetch}kafka.request.fetch_request_purgatory.sizeJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.partition.under_replicatedkafka.replication.under_replicated_partitionsJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.isr.operation.count{operation:shrink}kafka.replication.isr_shrinks.rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}秒あたりのレートを計算し、Gauge として送信
kafka.isr.operation.count{operation:expand}kafka.replication.isr_expands.rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}秒あたりのレートを計算し、Gauge として送信
kafka.leader.election.ratekafka.replication.leader_elections.rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}秒あたりのレートを計算し、Gauge として送信
kafka.partition.offlinekafka.replication.offline_partitions_countJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.request.time.avg{type:produce}kafka.request.produce.time.avgJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.request.time.avg{type:fetchconsumer}kafka.request.fetch_consumer.time.avgJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.request.time.avg{type:fetchfollower}kafka.request.fetch_follower.time.avgJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.message.countkafka.messages_in.rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}秒あたりのレートを計算し、Gauge として送信
kafka.request.failed{type:produce}kafka.request.produce.failed.rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}秒あたりのレートを計算し、Gauge として送信
kafka.request.failed{type:fetch}kafka.request.fetch.failed.rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}秒あたりのレートを計算し、Gauge として送信
kafka.request.time.99p{type:produce}kafka.request.produce.time.99percentileJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.request.time.99p{type:fetchconsumer}kafka.request.fetch_consumer.time.99percentileJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.request.time.99p{type:fetchfollower}kafka.request.fetch_follower.time.99percentileJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.partition.countkafka.replication.partition_countJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.max.lagkafka.replication.max_lagJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.controller.active.countkafka.replication.active_controller_countJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.unclean.election.ratekafka.replication.unclean_leader_elections.rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}秒あたりのレートを計算し、Gauge として送信
kafka.request.queuekafka.request.channel.queue.sizeJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}
kafka.logs.flush.time.countkafka.log.flush_rate.rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka}秒あたりのレートを計算し、Gauge として送信
kafka.consumer.bytes-consumed-ratekafka.consumer.bytes_consumedJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-consumer}
kafka.consumer.records-consumed-ratekafka.consumer.records_consumedJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-consumer}
otel.kafka.consumer.fetch-size-avgkafka.consumer.fetch_size_avgJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-consumer}
otel.kafka.producer.compression-ratekafka.producer.compression-rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-producer}
otel.kafka.producer.record-error-ratekafka.producer.record_error_rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-producer}
otel.kafka.producer.record-retry-ratekafka.producer.record_retry_rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-producer}
otel.kafka.producer.record-send-ratekafka.producer.record_send_rateJMX レシーバー / JMX Metrics Gatherer {target_system:kafka-producer}
kafka.partition.current_offsetkafka.broker_offsetkafkametricsreceiver
kafka.consumer_group.lagkafka.consumer_lagkafkametricsreceiver
kafka.consumer_group.offsetkafka.consumer_offsetkafkametricsreceiver
jvm.gc.collections.count{name:Copy && name:PS Scavenge && name:ParNew && name:G1 Young Generation}jvm.gc.minor_collection_countJMX レシーバー / JMX Metrics Gatherer {target_system:jvm}秒あたりのレートを計算し、Gauge として送信
jvm.gc.major_collection_count{name:MarkSweepCompact && name:PS MarkSweep && name:ConcurrentMarkSweep && name:G1 Mixed Generation && G1 Old Generation && Shenandoah Cycles && ZGC}jvm.gc.major_collection_countJMX レシーバー / JMX Metrics Gatherer {target_system:jvm}秒あたりのレートを計算し、Gauge として送信
jvm.gc.collections.elapsed{name:Copy && name:PS Scavenge && name:ParNew && name:G1 Young Generation}jvm.gc.minor_collection_timeJMX レシーバー / JMX Metrics Gatherer {target_system:jvm}秒あたりのレートを計算し、Gauge として送信
jvm.gc.collections.elapsed{name:MarkSweepCompact && name:PS MarkSweep && name:ConcurrentMarkSweep && name:G1 Mixed Generation && G1 Old Generation && Shenandoah Cycles && ZGC}jvm.gc.major_collection_timeJMX レシーバー / JMX Metrics Gatherer {target_system:jvm}秒あたりのレートを計算し、Gauge として送信

注: Datadog では -_ に変換されます。先頭に otel. が付くメトリクスの場合、これは OTel メトリクス名と Datadog メトリクス名が同じであることを意味します (例: kafka.producer.request-ratekafka.producer.request_rate)。これらのメトリクスの二重カウントを避けるために、OTel メトリクスの先頭には otel. が追加されます。

参考資料

PREVIEWING: rtrieu/product-analytics-ui-changes