推測サービス

概要

Datadog は、インスツルメンテーションが実行されたサービスについて、データベース、キュー、サードパーティ API などの依存先のインスツルメンテーションが実行されていない場合でも、その依存関係を自動的に検出します。Datadog は、インスツルメンテーションが実行されたサービスからのアウトバウンドリクエストを分析して、これらの依存関係の存在を推測し、関連するパフォーマンスメトリクスを収集します。

サービス詳細画面の依存関係マップ

データベース、キュー、サードパーティ API などのエンティティタイプでエントリを絞り込んで、Catalog 内の推測サービスを調べます。各サービス詳細画面は、調査しているサービスの種類に合わせてカスタマイズされています。たとえば、データベースのサービス詳細画面には、データベース固有のインサイトが表示され、Database Monitoring を使用している場合は、データベースの監視データも含まれます。

推測サービスの設定

Datadog Agent バージョン 7.60.0 以降では、推測サービスを表示するために手動の構成は必要ありません。必要な構成である apm_config.compute_stats_by_span_kind および apm_config.peer_tags_aggregation は、デフォルトで有効になっています。

Datadog Agent バージョン 7.55.1 から 7.59.1 の場合は、以下の内容を datadog.yaml 構成ファイルに追加します。

datadog.yaml

apm_config:
  compute_stats_by_span_kind: true
  peer_tags_aggregation: true

または、Datadog Agent 構成で、以下の環境変数を設定します。

DD_APM_COMPUTE_STATS_BY_SPAN_KIND=true 
DD_APM_PEER_TAGS_AGGREGATION=true

Helm を使用している場合は、これらの環境変数を values.yaml ファイルに追加します。

Datadog Agent バージョン 7.50.3 から 7.54.1 の場合は、以下の内容を datadog.yaml 構成ファイルに追加します。

datadog.yaml

apm_config:
  compute_stats_by_span_kind: true
  peer_tags_aggregation: true
  peer_tags: ["_dd.base_service","amqp.destination","amqp.exchange","amqp.queue","aws.queue.name","aws.s3.bucket","bucketname","cassandra.keyspace","db.cassandra.contact.points","db.couchbase.seed.nodes","db.hostname","db.instance","db.name","db.namespace","db.system","grpc.host","hostname","http.host","http.server_name","messaging.destination","messaging.destination.name","messaging.kafka.bootstrap.servers","messaging.rabbitmq.exchange","messaging.system","mongodb.db","msmq.queue.path","net.peer.name","network.destination.name","peer.hostname","peer.service","queuename","rpc.service","rpc.system","server.address","streamname","tablename","topicname"]

または、Datadog Agent 構成で、以下の環境変数を設定します。

DD_APM_COMPUTE_STATS_BY_SPAN_KIND=true 
DD_APM_PEER_TAGS_AGGREGATION=true
DD_APM_PEER_TAGS='["_dd.base_service","amqp.destination","amqp.exchange","amqp.queue","aws.queue.name","aws.s3.bucket","bucketname","cassandra.keyspace","db.cassandra.contact.points","db.couchbase.seed.nodes","db.hostname","db.instance","db.name","db.namespace","db.system","grpc.host","hostname","http.host","http.server_name","messaging.destination","messaging.destination.name","messaging.kafka.bootstrap.servers","messaging.rabbitmq.exchange","messaging.system","mongodb.db","msmq.queue.path","net.peer.name","network.destination.name","peer.hostname","peer.service","queuename","rpc.service","rpc.system","server.address","streamname","tablename","topicname"]'

Helm を使用している場合は、これらの環境変数を values.yaml ファイルに追加します。

OpenTelemetry コレクターの場合、推奨される最小バージョンは opentelemetry-collector-contrib v0.95.0 以降です。この場合、次の構成を更新します。

connectors:
  datadog/connector:
    traces:
      compute_stats_by_span_kind: true
      peer_tags_aggregation: true
      peer_tags: ["_dd.base_service","amqp.destination","amqp.exchange","amqp.queue","aws.queue.name","aws.s3.bucket","bucketname","db.cassandra.contact.points","db.couchbase.seed.nodes","db.hostname","db.instance","db.name","db.namespace","db.system","grpc.host","hostname","http.host","http.server_name","messaging.destination","messaging.destination.name","messaging.kafka.bootstrap.servers","messaging.rabbitmq.exchange","messaging.system","mongodb.db","msmq.queue.path","net.peer.name","network.destination.name","peer.hostname","peer.service","queuename","rpc.service","rpc.system","server.address","streamname","tablename","topicname"]

コレクターのバージョンが v0.95.0 未満の場合、次の構成を更新します。

exporters:
  datadog:
    traces:
      compute_stats_by_span_kind: true
      peer_tags_aggregation: true
      peer_tags: ["_dd.base_service","amqp.destination","amqp.exchange","amqp.queue","aws.queue.name","aws.s3.bucket","bucketname","db.cassandra.contact.points","db.couchbase.seed.nodes","db.hostname","db.instance","db.name","db.namespace","db.system","grpc.host","hostname","http.host","http.server_name","messaging.destination","messaging.destination.name","messaging.kafka.bootstrap.servers","messaging.rabbitmq.exchange","messaging.system","mongodb.db","msmq.queue.path","net.peer.name","network.destination.name","peer.hostname","peer.service","queuename","rpc.service","rpc.system","server.address","streamname","tablename","topicname"]   

: collector.yaml

推測エンティティの命名

Datadog では、推測されるサービス依存関係の名前とタイプを決定するために、標準のスパン属性を使用し、peer.* 属性にマッピングします。たとえば、推測された外部 API は、デフォルトの命名規則である net.peer.name を使用します (例: api.stripe.comapi.twilio.comus6.api.mailchimp.com)。推測されたデータベースでは、デフォルトの命名規則である db.instance が使用されます。名前変更ルールを作成することで、推測されたエンティティの名前を変更できます。

ピアタグ

ピアタグソース属性
peer.aws.dynamodb.tabletablename
peer.aws.kinesis.streamstreamname
peer.aws.s3.bucketbucketnameaws.s3.bucket
peer.aws.sqs.queuequeuename
peer.cassandra.contact.pointsdb.cassandra.contact.points
peer.couchbase.seed.nodesdb.couchbase.seed.nodes
peer.db.namedb.namemongodb.dbdb.instancecassandra.keyspacedb.namespace
peer.db.systemdb.system
peer.hostnamepeer.hostnamehostnamenet.peer.namedb.hostnamenetwork.destination.namegrpc.hosthttp.hostserver.addresshttp.server_name
peer.kafka.bootstrap.serversmessaging.kafka.bootstrap.servers
peer.messaging.destinationtopicnamemessaging.destinationmessaging.destination.namemessaging.rabbitmq.exchangeamqp.destinationamqp.queueamqp.exchangemsmq.queue.pathaws.queue.name
peer.messaging.systemmessaging.system
peer.rpc.servicerpc.service
peer.rpc.systemrpc.system
peer.servicepeer.service

: IP アドレス形式に一致するピア属性値は、不要なノイズを防ぎ、値の多いディメンションでメトリクスがタグ付けされることを避けるために、blocked-ip-address に変更されます。その結果、インスツルメンテーション済みのサービスの下流の依存関係として、blocked-ip-address サービスが表示される場合があります。

ピアタグの優先順位

エンティティが複数のタグの組み合わせで定義されている場合、Datadog はピアタグ間の優先順位を使用して、推測されたエンティティに名前を割り当てます。

エンティティタイプ優先順位
データベースpeer.db.name > peer.aws.s3.bucket (AWS S3) / peer.aws.dynamodb.table (AWS DynamoDB) / peer.cassandra.contact.points (Cassandra) / peer.couchbase.seed.nodes (Couchbase) > peer.hostname > peer.db.system
キューpeer.messaging.destination > peer.kafka.bootstrap.servers (Kafka) / peer.aws.sqs.queue (AWS SQS) / peer.aws.kinesis.stream (AWS Kinesis) > peer.messaging.system
推測サービスpeer.service > peer.rpc.service > peer.hostname

peer.db.name のような優先順位が最も高いタグがインスツルメンテーションでキャプチャされない場合、Datadog は 2 番目に優先度の高いタグ (peer.hostname など) を使用します。以降も同様です。

: Datadogは、推測されたデータベースとキューに peer.service を設定しません。peer.service は最も優先度の高いピア属性です。設定されている場合、他のすべての属性よりも優先されます。

グローバルなデフォルトサービス名への移行

推測サービスでは、既存のスパン属性からサービスの依存関係が自動的に検出されます。そのため、これらの依存関係を識別するために、(service タグを使用して) サービス名を変更する必要はありません。

DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED を有効にして、デフォルトのグローバルサービス名とは異なるサービス名が Datadog インテグレーションによって設定されないようにします。これにより、サポート対象のすべての SDK 言語とインテグレーションで、サービス間の関係と推測サービスがわかりやすく表示されるようにもなります。

このオプションを有効にすると、古いサービス名を参照する既存の APM メトリクス、カスタムスパンメトリクス、トレース分析、保持フィルター、機密データスキャン、モニター、ダッシュボード、ノートブックに影響する可能性があります。グローバルなデフォルトサービスタグ (service:<DD_SERVICE>) を使用するようにこれらのアセットを更新してください。

サービスオーバーライドを削除して、推測サービスに移行する方法については、サービスオーバーライドガイドを参照してください。

お客様のデータセンターでは、デフォルトで推測サービス機能を利用できません。アクセスをリクエストするには、このフォームに記入してください。

参考資料

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