Asignación de convenciones semánticas de OpenTelemetry a nombres de host
OpenTelemetry define ciertas convenciones semánticas para atributos de recursos relacionados con nombres de host. Si una carga útil del Protocolo de OpenTelemetry (OTLP) para cualquier tipo de señal tiene atributos de recurso de nombre de host conocidos, Datadog respeta estas convenciones e intenta utilizar su valor como nombre de host. El algoritmo predeterminado de resolución de nombres de host se ha creado teniendo en cuenta la compatibilidad con el resto de productos de Datadog, pero puedes anularlo si es necesario.
Este algoritmo se utiliza en el exportador de Datadog así como en el pipeline de ingesta OTLP en el Datadog Agent. Cuando se utiliza la configuración recomendada para el exportador de Datadog, el procesador de detección de recursos añade los atributos necesarios a la carga útil para garantizar una resolución precisa del nombre de host.
Convenciones utilizadas para determinar el nombre de host
Las convenciones se comprueban en los atributos de recursos en el siguiente orden y se utiliza el primer nombre de host válido. Si no hay convenciones válidas, se utiliza la lógica del nombre de host alternativa. Esta lógica varía según el producto.
- Se comprueban las convenciones específicas de Datadog:
host
y datadog.host.name
. - Se comprueban las convenciones específicas del proveedor de la nube para AWS, Azure y GCP.
- Se comprueban las convenciones específicas de Kubernetes.
- Si no se encuentran convenciones específicas, se recurre a
host.id
y host.name
.
En las secciones siguientes se explica cada conjunto de convenciones con más detalle.
Convenciones semánticas generales del nombre de host
Las convenciones host
y datadog.host.name
son convenciones específicas de Datadog. Se consideran las primeras y se pueden utilizar para anular el nombre de host detectado con las convenciones semánticas habituales de OpenTelemetry. Es preferible utilizar la convención datadog.host.name
, ya que está espaciada por nombres, y es menos probable que entre en conflicto con otros comportamientos específicos del proveedor.
En OpenTelemetry Collector, puedes utilizar el procesador transform
para establecer la convención datadog.host.name
en tus pipelines. Por ejemplo, para establecer el nombre de host como my-custom-hostname
en todas las métricas, trazas (traces) y logs en un pipeline dado, utiliza la siguiente configuración:
transform:
metric_statements: &statements
- context: resource
statements:
- set(attributes["datadog.host.name"], "my-custom-hostname")
trace_statements: *statements # Use the same statements as in metrics
log_statements: *statements # Use the same statements as in metrics
No olvides añadir el procesador transform
a tus pipelines.
Convenciones específicas del proveedor de la nube
El atributo de recurso cloud.provider
se utiliza para determinar el proveedor de la nube. Otros atributos se utilizan para determinar el nombre de host de cada plataforma específica. Si falta cloud.provider
o alguno de los atributos, se comprueba el siguiente conjunto de convenciones.
Amazon Web Services
Si cloud.provider
tiene el valor aws
, se comprueban las siguientes convenciones:
- Comprueba
aws.ecs.launchtype
para determinar si la carga útil procede de una tarea de ECS Fargate. Si es así, utiliza aws.ecs.task.arn
como identificador con el nombre de etiqueta task_arn
. - De lo contrario, utiliza
host.id
como nombre de host. Esto coincide con el Id. de instancia de EC2.
Google Cloud
Si cloud.provider
tiene el valor gcp
, se comprueban las siguientes convenciones:
- Comprueba que tanto
host.name
como cloud.account.id
están disponibles y tienen el formato esperado, elimina el prefijo de host.name
y fusiona ambos en un nombre de host.
Azure
Si cloud.provider
tiene el valor azure
, se comprueban las siguientes convenciones:
- Utiliza
host.id
como nombre de host si está disponible y tiene el formato esperado. - Si no, vuelve a
host.name
.
Convenciones específicas de Kubernetes
Si k8s.node.name
y el nombre de clúster están disponibles, el nombre de host se establece en <node name>-<cluster name>
. Si solo k8s.node.name
está disponible, el nombre de host se establece en el nombre del nodo.
Para obtener el nombre de clúster, se comprueban las siguientes convenciones:
- Comprueba
k8s.cluster.name
y utilízalo si está presente. - Si
cloud.provider
está configurado como azure
, extrae el nombre de clúster de azure.resourcegroup.name
. - Si
cloud.provider
está configurado como aws
, extrae el nombre de clúster del primer atributo que empiece por ec2.tag.kubernetes.io/cluster/
.
host.id
y host.name
Si ninguna de las convenciones anteriores está presente, los atributos de recurso host.id
y host.name
se utilizan tal cual para determinar el nombre de host.
Nota: La especificación de OpenTelemetry permite que host.id
y host.name
tengan valores que pueden no coincidir con los utilizados por otros productos de Datadog en un determinado entorno. Si utilizas varios productos de Datadog para monitorizar el mismo host, es posible que tengas que anular el nombre de host utilizando datadog.host.name
para garantizar la coherencia.
Lógica de nombres de host alternativa
Si no se encuentran nombres válidos de host, el comportamiento varía en función de la ruta de ingesta.
Se utiliza la lógica de nombre de host alternativa. Esta lógica genera un nombre de host para la máquina donde
se está ejecutando el exportador de Datadog, que es compatible con el resto de productos de Datadog, al comprobar las siguientes fuentes:
- El campo
hostname
de la configuración del Exportador de Datadog. - API del proveedor de la nube.
- Nombre de host de Kubernetes.
- Nombre de dominio completo.
- Nombre de host del sistema operativo.
Esto puede dar lugar a nombres de host incorrectos en despliegues de gateway. Para evitarlo, utiliza el procesador resource detection
en tus pipelines para asegurar una resolución de nombres de host precisa.
Nombres de host no válidos
Los siguientes nombres de host no se consideran válidos y se descartan:
0.0.0.0
127.0.0.1
localhost
localhost.localdomain
localhost6.localdomain6
ip6-localhost
Referencias adicionales
Más enlaces, artículos y documentación útiles: