Información general

Datadog detecta automáticamente las dependencias de un servicio instrumentado, como bases de datos, colas o API de terceros, incluso si esas dependencias no se instrumentaron directamente. A través del análisis de las solicitudes salientes de tus servicios instrumentados, Datadog infiere la presencia de las dependencias y recopila las métricas de rendimiento asociadas.

Mapa de dependencias de la página de servicios

Explora los servicios inferidos en el Catálogo de software, filtrando las entradas por tipo de entidad, como bases de datos, colas o API de terceros. Cada página de servicios se ajusta al tipo de servicio que estás investigando. Por ejemplo, las páginas de servicios de bases de datos muestran información específica de las bases de datos y, si estás utilizando Database Monitoring, incluyen datos de monitorización de estas bases de datos.

Configurar servicios inferidos

Para ver los servicios inferidos, debes habilitar algunas configuraciones. A partir de la versión 7.60.0 del Datadog Agent, estas configuraciones están activadas por defecto.

Para las versiones 7.55.1 o posteriores del Datadog Agent, añade lo siguiente a tu archivo de configuración datadog.yaml:

datadog.yaml

apm_config:
  compute_stats_by_span_kind: true
  peer_tags_aggregation: true

Alternativamente, configura estas variables de entorno en tu configuración del Datadog Agent:

DD_APM_COMPUTE_STATS_BY_SPAN_KIND=true 
DD_APM_PEER_TAGS_AGGREGATION=true

Si utilizas Helm, incluye estas variables de entorno en tu archivo values.yaml.

Para las versiones 7.50.3 a 7.54.1 del Datadog Agent, añade lo siguiente a tu archivo de configuración 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"]

Alternativamente, configura estas variables de entorno en tu configuración del 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"]'

Si utilizas Helm, incluye estas variables de entorno en tu archivo values.yaml.

Para OpenTelemetry Collector, la versión mínima recomendada es v0.95.0 o posterior de opentelemetry-collector-contrib. En ese caso, actualiza esta configuración:

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"]

Si tu versión del Collector es anterior a v0.95.0, actualiza la siguiente configuración del 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"]   

Ejemplo: collector.yaml.

Nombrar entidades inferidas

Para determinar los nombres y los tipos de las dependencias de servicios inferidos, Datadog utiliza atributos de tramo (span) estándar y los asigna a atributos peer.*. Por ejemplo, las API externas inferidas utilizan el esquema de nomenclatura por defecto net.peer.name como api.stripe.com, api.twilio.com y us6.api.mailchimp.com. Las bases de datos inferidas utilizan el esquema de nomenclatura por defecto db.instance.

Etiquetas (tags) pares

Etiqueta parAtributos de origen
peer.aws.dynamodb.tabletablename
peer.aws.kinesis.streamstreamname
peer.aws.s3.bucketbucketname, aws.s3.bucket
peer.aws.sqs.queuequeuename
peer.cassandra.contact.pointsdb.cassandra.contact.points
peer.couchbase.seed.nodesdb.couchbase.seed.nodes
peer.db.namedb.name, mongodb.db, db.instance, cassandra.keyspace, db.namespace
peer.db.systemdb.system
peer.hostnamepeer.hostname, hostname, net.peer.name, db.hostname, network.destination.name, grpc.host, http.host, server.address, http.server_name
peer.kafka.bootstrap.serversmessaging.kafka.bootstrap.servers
peer.messaging.destinationtopicname, messaging.destination, messaging.destination.name, messaging.rabbitmq.exchange, amqp.destination, amqp.queue, amqp.exchange, msmq.queue.path, aws.queue.name
peer.messaging.systemmessaging.system
peer.rpc.servicerpc.service
peer.rpc.systemrpc.system
peer.servicepeer.service

Nota: Los valores de atributos pares que coinciden con formatos de direcciones IP (por ejemplo, 127.0.0.1) se modifican y ofuscan con blocked-ip-address para evitar ruidos innecesarios y el etiquetado de métricas con dimensiones de alta cardinalidad. Como resultado, es posible que veas que algunos servicios blocked-ip-address aparecen como dependencias descendentes de tus servicios instrumentados.

Prioridad de etiquetas pares

Para asignar el nombre a las entidades inferidas, Datadog utiliza un orden específico de prioridad entre etiquetas pares, cuando las entidades se definen mediante una combinación de varias etiquetas.

Tipo de entidadOrden de prioridad
Base de datospeer.db.name > peer.aws.s3.bucket (Para AWS S3) / peer.aws.dynamodb.table (Para AWS DynamoDB) / peer.cassandra.contact.points (Para Cassandra) / peer.couchbase.seed.nodes (Para Couchbase) > peer.hostname > peer.db.system
Colapeer.messaging.destination > peer.kafka.bootstrap.servers (para Kafka) / peer.aws.sqs.queue (para AWS SQS) / peer.aws.kinesis.stream (Para AWS Kinesis) > peer.messaging.system
Servicio inferidopeer.service > peer.rpc.service > peer.hostname

Si la etiqueta con mayor prioridad, como peer.db.name, no se detecta como parte de la instrumentación, Datadog utiliza la segunda etiqueta con mayor prioridad, como peer.hostname, y continúa en ese orden.

Nota: Datadog nunca define el peer.service para bases de datos y colas inferidas. peer.service es el atributo par con mayor prioridad. Si se define, tiene prioridad sobre todos los demás atributos.

Migración a la nomenclatura global de servicios por defecto

Con los servicios inferidos, las dependencias de servicios se detectan automáticamente a partir de los atributos de tramo existentes. Como resultado, no es necesario cambiar los nombres de los servicios (utilizando la etiqueta service) para identificar estas dependencias.

Habilita DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED para asegurarte de que ninguna integración Datadog defina nombres de servicios diferentes del nombre global del servicio por defecto. Esto también mejora la forma en que las conexiones servicio-a-servicio y los servicios inferidos son representados en las visualizaciones de Datadog, a través de todos los lenguajes de bibliotecas de rastreo e integraciones compatibles.

La activación de esta opción puede afectar a métricas de APM, métricas de tramos personalizadas, análisis de trazas (traces), filtros de retención, análisis de datos confidenciales, monitores, dashboards o notebooks existentes que hacen referencia a los antiguos nombres de servicios. Actualiza estos recursos para utilizar la etiqueta global de servicio por defecto (servicio:<DD_SERVICE>).

Para obtener instrucciones sobre cómo eliminar servicios anulados y migrar a servicios inferidos, consulta la guía Anulación de servicios.

La función de servicios inferidos no está disponible por defecto en tu centro de datos. Rellena este formulario para solicitar acceso.

Referencias adicionales

Más enlaces, artículos y documentación útiles: