Configurar el OpenTelemetry Collector
El OpenTelemetry Collector te permite recopilar, procesar y exportar datos de telemetría de tus aplicaciones de una manera independiente del proveedor. Cuando se configura con el Datadog Exporter y el Datadog Connector, puedes enviar tus trazas, logs y métricas a Datadog sin necesidad del Datadog Agent.
- Datadog Exporter: Reenvía datos de trazas, métricas y logs de los SDK de OpenTelemetry a Datadog (sin necesidad del Datadog Agent)
- Datadog Connector: Calcula métricas de rastreo a partir de los datos de tramos recopilados
Instalar y configurar
1 - Descargar el OpenTelemetry Collector
Descarga la última versión de la distribución OpenTelemetry Collector Contrib, desde el repositorio del proyecto.
2 - Configurar el Datadog Exporter y el Datadog Connector
Para utilizar el Datadog Exporter y el Datadog Connector, defínelos en tu [configuración del [OpenTelemetry Collector4:
- Crea un archivo de configuración llamado
collector.yaml
. - Utiliza el siguiente archivo de ejemplo para empezar.
- Configura tu clave de API Datadog como la variable de entorno
DD_API_KEY
.
The following examples use
0.0.0.0
as the endpoint address for convenience. This allows connections from any network interface. For enhanced security, especially in local deployments, consider using
localhost
instead.
For more information on secure endpoint configuration, see the
OpenTelemetry security documentation.
receivers:
otlp:
protocols:
http:
endpoint: 0.0.0.0:4318
grpc:
endpoint: 0.0.0.0:4317
# The hostmetrics receiver is required to get correct infrastructure metrics in Datadog.
hostmetrics:
collection_interval: 10s
scrapers:
paging:
metrics:
system.paging.utilization:
enabled: true
cpu:
metrics:
system.cpu.utilization:
enabled: true
disk:
filesystem:
metrics:
system.filesystem.utilization:
enabled: true
load:
memory:
network:
processes:
# The prometheus receiver scrapes metrics needed for the OpenTelemetry Collector Dashboard.
prometheus:
config:
scrape_configs:
- job_name: 'otelcol'
scrape_interval: 10s
static_configs:
- targets: ['0.0.0.0:8888']
filelog:
include_file_path: true
poll_interval: 500ms
include:
- /var/log/**/*example*/*.log
processors:
batch:
send_batch_max_size: 100
send_batch_size: 10
timeout: 10s
connectors:
datadog/connector:
exporters:
datadog/exporter:
api:
site:
key: ${env:DD_API_KEY}
service:
pipelines:
metrics:
receivers: [hostmetrics, prometheus, otlp, datadog/connector]
processors: [batch]
exporters: [datadog/exporter]
traces:
receivers: [otlp]
processors: [batch]
exporters: [datadog/connector, datadog/exporter]
logs:
receivers: [otlp, filelog]
processors: [batch]
exporters: [datadog/exporter]
Esta configuración básica permite recibir datos de OTLP a través de HTTP y gRPC, y configura un procesador por lotes.
Si quieres consultar la lista completa de opciones de configuración del Datadog Exporter, consulta el archivo de configuración de ejemplo completamente documentado. Opciones adicionales como api::site
y host_metadata
pueden ser relevantes, dependiendo de tu despliegue.
Configuración del procesador por lotes
El procesador por lotes se requiere en entornos que no son de desarrollo. La configuración exacta depende de tu carga de trabajo específica y de los tipos de señales.
Configura el procesador por lotes basándote en los límites de ingesta de Datadog:
Pueden producirse errores en 413 - Request Entity Too Large
, si se introducen demasiados datos de telemetría en el procesador por lotes.
3 - Configurar tu aplicación
Para obtener mejores metadatos para trazas y para simplificar la integración con Datadog:
Utiliza detectores de recursos: si los proporciona el SDK del lenguaje, adjunta información de contenedor como atributos de recurso. Por ejemplo, en Go, utiliza la opción de recurso WithContainer()
.
Aplica etiquetado de servicios unificado: asegúrate de haber configurado tu aplicación con los atributos de recursos apropiados para el etiquetado de servicios unificado. Esto vincula la telemetría de Datadog con etiquetas (tags) para nombre de servicio, entorno de despliegue y versión de servicio. La aplicación debe establecer estas etiquetas utilizando las convenciones semánticas de OpenTelemetry: service.name
, deployment.environment
y service.version
.
4 - Configurar el generador de logs para tu aplicación
Dado que la funcionalidad de generación de logs del SDK de OpenTelemetry no es totalmente compatible (consulta tu lenguaje específico en la documentación de OpenTelemetry para más información), Datadog recomienda el uso de una biblioteca de generación de logs estándar para tu aplicación. Sigue la documentación de recopilación de logs específica del lenguaje para configurar el generador de logs adecuado en tu aplicación. Datadog recomienda especialmente la configuración de tu biblioteca de registro para la salida de logs en JSON, a fin de evitar la necesidad de reglas de análisis personalizadas.
Configurar el receptor de log de archivo
Configura el receptor de log de archivo utilizando operadores. Por ejemplo, si hay un servicio checkoutservice
que está escribiendo logs en /var/log/pods/services/checkout/0.log
, un ejemplo de log podría tener este aspecto:
{"level":"info","message":"order confirmation email sent to \"jack@example.com\"","service":"checkoutservice","span_id":"197492ff2b4e1c65","timestamp":"2022-10-10T22:17:14.841359661Z","trace_id":"e12c408e028299900d48a9dd29b0dc4c"}
Ejemplo de configuración de log de archivo:
filelog:
include:
- /var/log/pods/**/*checkout*/*.log
start_at: end
poll_interval: 500ms
operators:
- id: parse_log
type: json_parser
parse_from: body
- id: trace
type: trace_parser
trace_id:
parse_from: attributes.trace_id
span_id:
parse_from: attributes.span_id
attributes:
ddtags: env:staging
include
: Lista de archivos que el receptor rastreastart_at: end
: Indica que se lea el nuevo contenido que se está escribiendopoll_internal
: Define la frecuencia de sondeo- Operadores:
json_parser
: analiza los logs JSON. Por defecto, el receptor de log de archivos convierte cada línea de log en un registro de log, que es el body
del modelo de datos de logs. A continuación, el json_parser
convierte el cuerpo JSON en atributos del modelo de datos.trace_parser
: Extrae trace_id
y span_id
del log para correlacionar logs y trazas en Datadog.
Reasignar el atributo service.name
de OTel a service
para logs
Para las versiones 0.83.0 y posteriores del Datadog Exporter, el campo service
de logs de OTel se rellena como la convención semántica de OTel service.name
. Sin embargo, service.name
no es uno de los atributos de servicio predeterminados en el preprocesamiento de logs de Datadog.
Para que el campo service
se rellene correctamente en tus logs, puedes especificar que service.name
sea la fuente de un servicio de log estableciendo un procesador de reasignación de servicio de log.
Hay múltiples maneras de desplegar el OpenTelemetry Collector y el Datadog Exporter en una infraestructura Kubernetes. Para que el receptor filelog funcione, el despliegue del Agent/DaemonSet es el método de despliegue recomendado.
En entornos contenedorizados, las aplicaciones escriben logs en stdout
o stderr
. Kubernetes recopila los logs y los escribe en una localización estándar. Es necesario montar la localización en el nodo host del Collector para el receptor filelog. A continuación se muestra un ejemplo de extensión con los montajes necesarios para enviar logs.
apiVersion: apps/v1
metadata:
name: otel-agent
labels:
app: opentelemetry
component: otel-collector
spec:
template:
metadata:
labels:
app: opentelemetry
component: otel-collector
spec:
containers:
- name: collector
command:
- "/otelcol-contrib"
- "--config=/conf/otel-agent-config.yaml"
image: otel/opentelemetry-collector-contrib:0.71.0
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
# The k8s.pod.ip is used to associate pods for k8sattributes
- name: OTEL_RESOURCE_ATTRIBUTES
value: "k8s.pod.ip=$(POD_IP)"
ports:
- containerPort: 4318 # default port for OpenTelemetry HTTP receiver.
hostPort: 4318
- containerPort: 4317 # default port for OpenTelemetry gRPC receiver.
hostPort: 4317
- containerPort: 8888 # Default endpoint for querying metrics.
volumeMounts:
- name: otel-agent-config-vol
mountPath: /conf
- name: varlogpods
mountPath: /var/log/pods
readOnly: true
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
volumes:
- name: otel-agent-config-vol
configMap:
name: otel-agent-conf
items:
- key: otel-agent-config
path: otel-agent-config.yaml
# Mount nodes log file location.
- name: varlogpods
hostPath:
path: /var/log/pods
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
Configuración del Datadog Exporter predefinida
Puedes encontrar ejemplos de configuración predefinida del Datadog Exporter en la carpetaexporter/datadogexporter/examples
en el proyecto OpenTelemetry Collector Contrib. Consulta el archivo de ejemplo de configuración completo, ootb-ec2.yaml
. Configura cada uno de los siguientes componentes para adaptarlos a tus necesidades:
Referencias adicionales
Más enlaces, artículos y documentación útiles: