본문 바로가기
WIKI 기술 지식 베이스

추론 서비스 (Inferred services)

원문 보기 위키 갱신

아웃바운드 요청 분석을 통해 데이터베이스와 큐 같은 서비스 종속성을 자동으로 발견하는 방법을 알아봐요. 계측되지 않은 종속성도 자동으로 감지하고 관련 성능 메트릭을 수집해요.

출처: 문서

본문

개요 (Overview)

Datadog은 계측된 서비스의 종속성(데이터베이스, 큐, 타사 API 등)을 해당 종속성이 직접 계측되지 않았더라도 자동으로 발견해요. 계측된 서비스의 아웃바운드 요청을 분석해 이러한 종속성의 존재를 추론하고 관련 성능 메트릭을 수집해요.

{% image source="https://docs.dd-static.net/images/tracing/visualization/service/dependencies_section.00796711c89198a72b9f4dfd5c756170.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/tracing/visualization/service/dependencies_section.00796711c89198a72b9f4dfd5c756170.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Service page dependency map" /%}

{% callout %}

다음 Datadog 사이트 사용자에게 중요한 안내: ap1.datadoghq.com, us3.datadoghq.com, us5.datadoghq.com, app.datadoghq.eu, app.datadoghq.com, ap2.datadoghq.com, uk1.datadoghq.com

Catalog에서 엔터티 유형(예: 데이터베이스, 큐, 타사 API)으로 항목을 필터링해 추론 서비스를 탐색해요. 각 서비스 페이지는 조사 중인 서비스의 유형에 맞게 조정돼요. 예를 들어 데이터베이스 서비스 페이지는 데이터베이스 특화 인사이트를 보여주고, Database Monitoring을 사용한다면 데이터베이스 모니터링 데이터도 포함해요.

추론 서비스 설정하기 (Set up inferred services)

{% tab title="Agent v7.60.0+" %} Datadog 에이전트 버전 7.60.0부터 추론 서비스를 보기 위한 수동 구성은 필요 없어요. 필요한 구성인 apm_config.compute_stats_by_span_kind와 apm_config.peer_tags_aggregation이 기본적으로 활성화되어 있어요. {% /tab %}

{% tab title="Agent v7.55.1 - v7.59.1" %} Datadog 에이전트 버전 7.55.1부터 7.59.1까지는 datadog.yaml 구성 파일에 다음을 추가해요:

datadog.yaml 파일에서:

apm_config:
  compute_stats_by_span_kind: true
  peer_tags_aggregation: true

또는 Datadog 에이전트 구성에 다음 환경 변수를 설정해요:

DD_APM_COMPUTE_STATS_BY_SPAN_KIND=true 
DD_APM_PEER_TAGS_AGGREGATION=true

Helm을 사용한다면 values.yaml 파일에 이러한 환경 변수를 포함하세요. {% /tab %}

{% tab title="Agent v7.50.3 - v7.54.1" %} Datadog 에이전트 버전 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 에이전트 구성에 다음 환경 변수를 설정해요:

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 파일에 이러한 환경 변수를 포함하세요. {% /tab %}

{% tab title="OpenTelemetry Collector" %} 새 OpenTelemetry Collector 구성에는 권장되는 span_metrics 커넥터 구성을 사용해요. 그 차원에는 Datadog이 추론에 사용하는 peer-service 속성이 포함돼요. 그 집합은 아래 peer_tags 목록과 다르므로, 두 구성 간에 추론된 엔터티가 달라질 수 있어요.

구성이 Datadog Connector를 사용한다면 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"]

Collector 버전이 v0.95.0 미만이면 다음 Collector 구성을 업데이트하세요:

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. {% /tab %}

추론 엔터티 이름 지정하기 (Naming inferred entities)

추론된 서비스 종속성의 이름과 유형을 결정하기 위해 Datadog은 표준 스팬 속성을 사용해 이를 peer.* 속성에 매핑해요. 예를 들어 추론된 외부 API는 api.stripe.com, api.twilio.com, us6.api.mailchimp.com 같은 기본 명명 체계 net.peer.name을 사용해요. 추론된 데이터베이스는 기본 명명 체계 db.instance를 사용해요. 이름 변경 규칙을 만들어 추론 엔터티의 이름을 바꿀 수 있어요.

피어 태그 (Peer tags)

피어 태그 (Peer Tag) 소스 속성 (Source Attributes)
peer.aws.dynamodb.table tablename
peer.aws.kinesis.stream streamname
peer.aws.s3.bucket bucketname, aws.s3.bucket
peer.aws.sqs.queue queuename
peer.cassandra.contact.points db.cassandra.contact.points
peer.couchbase.seed.nodes db.couchbase.seed.nodes
peer.db.name db.name, mongodb.db, db.instance, cassandra.keyspace, db.namespace
peer.db.system db.system
peer.hostname peer.hostname, hostname, net.peer.name, db.hostname, network.destination.name, grpc.host, http.host, server.address, http.server_name
peer.kafka.bootstrap.servers messaging.kafka.bootstrap.servers
peer.messaging.destination topicname, messaging.destination, messaging.destination.name, messaging.rabbitmq.exchange, amqp.destination, amqp.queue, amqp.exchange, msmq.queue.path, aws.queue.name
peer.messaging.system messaging.system
peer.rpc.service rpc.service
peer.rpc.system rpc.system
peer.service peer.service

참고: IP 주소 형식과 일치하는 피어 속성 값은 불필요한 노이즈와 높은 카디널리티 차원으로 메트릭을 태그하는 것을 방지하기 위해 blocked-ip-address로 수정·삭제돼요. 그 결과 계측된 서비스의 다운스트림 종속성으로 나타나는 일부 blocked-ip-address 서비스를 볼 수 있어요.

피어 태그의 우선순위 (Precedence of peer tags)

추론 엔터티에 이름을 할당하기 위해 Datadog은 엔터티가 여러 태그의 조합으로 정의될 때 피어 태그 사이에 특정 우선순위 순서를 사용해요.

엔터티 유형 (Entity type) 우선순위 순서 (Order of precedence)
데이터베이스 (Database) 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
큐 (Queue) peer.messaging.destination > peer.kafka.bootstrap.servers (Kafka용) / peer.aws.sqs.queue (AWS SQS용) / peer.aws.kinesis.stream (AWS Kinesis용) > peer.messaging.system
추론 서비스 (Inferred service) peer.service > peer.rpc.service > peer.hostname

peer.db.name 같은 최우선 순위 태그가 계측의 일부로 캡처되지 않으면 Datadog은 peer.hostname 같은 두 번째 우선순위 태그를 사용하고 이런 순서로 계속 진행해요.

참고: Datadog은 추론된 데이터베이스와 큐에 대해 peer.service를 설정하지 않아요. peer.service는 최우선 순위 피어 속성이에요. 설정되면 다른 모든 속성보다 우선해요.

전역 기본 서비스 이름 지정으로 마이그레이션하기 (Migrate to global default service naming)

추론 서비스를 사용하면 기존 스팬 속성에서 서비스 종속성이 자동으로 감지돼요. 결과적으로 이러한 종속성을 식별하기 위해 서비스 이름을 변경(service 태그 사용)할 필요가 없어요.

DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED를 활성화해 어떤 Datadog 통합도 기본 전역 서비스 이름과 다른 서비스 이름을 설정하지 않도록 하세요. 이는 또한 지원되는 모든 SDK 언어와 통합에서 Datadog 시각화에 서비스 간 연결과 추론 서비스가 표현되는 방식을 개선해요.

{% alert level="danger" %} 이 옵션을 활성화하면 이전 서비스 이름을 참조하는 기존 APM 메트릭, 커스텀 스팬 메트릭, 트레이스 분석, 보존 필터, 민감 데이터 검사, 모니터, 대시보드 또는 노트북에 영향을 줄 수 있어요. 이러한 자산을 전역 기본 서비스 태그(service:<DD_SERVICE>)를 사용하도록 업데이트하세요. {% /alert %}

서비스 재정의를 제거하고 추론 서비스로 마이그레이션하는 방법은 Service Overrides 가이드를 참고하세요.

{% /callout %}

{% callout %}

다음 Datadog 사이트 사용자에게 중요한 안내: app.ddog-gov.com, us2.ddog-gov.com

{% alert level="info" %} Inferred Services 기능은 데이터센터에서 기본적으로 사용할 수 없어요. 액세스를 요청하려면 이 양식을 작성하세요. {% /alert %}

{% /callout %}

더 알아보기 (Learn more)

도움이 되는 추가 문서, 링크, 아티클이에요: