Utiliza el agente contenedor para rastrear logs del host
Datadog recomienda utilizar STDOUT/STDERR para recolectar logs del contenedor.
Los pods/contenedores no tienen acceso a los archivos del host por defecto, lo que también se aplica a los agentes. Si intentas configurar tu agente contenedor para que recolecte logs de los archivos del host, aparecerá un mensaje de error similar al que se muestra a continuación:
syslog
------
Type: file
Path: /var/log/messages
Status: Error: file /var/log/messages does not exist
Para que el agente contenedor tenga acceso a los archivos del host, monta el archivo o el directorio en agente contenedor. Revisa la lista de configuración de archivos y directorios del agente para saber qué archivo y directorio del host montar según tu sistema operativo.
Aquí hay algunos ejemplos para Kubernetes y Docker:
Para montar los archivos de logs de tu host en el agente contenedor, establece el directorio de logs del host en la sección de volúmenes del manifiesto del agente y el directorio de logs del contenedor en la sección volumeMounts:
volumeMounts:
- name: customlogs
## El directorio de logs deseado dentro del agente contenedor:
mountPath: /container/var/test-dir/logs/
volumes:
- name: customlogs
hostPath:
## El directorio en el host que contiene los archivos de logs.
path: /var/test-dir/logs/
A continuación, configura el agente para que rastree los archivos para recolectar los logs. Para ello, puedes montar una configuración de logs personalizada en /conf.d/. El nombre del archivo puede ser cualquier cosa, siempre que tenga una extensión .yaml.
Es preferible utilizar un ConfigMap para almacenar configuraciones en lugar de montar directamente un archivo del host. Aquí tienes un manifiesto ConfigMap de ejemplo que tiene un archivo logs.yaml:
kind: ConfigMap
apiVersion: v1
metadata:
name: ddagent-logs-configmap
namespace: default
data:
logs.yaml: |-
logs:
- type: file
service: syslog
source: os
## Utiliza el directorio de registro del contenedor que configuraste en el manifiesto del agente.
path: /container/var/test-dir/logs/*.log
Crea el objeto ConfigMap utilizando el comando:
kubectl create -f <configmap manifest>
A continuación, móntalo en /conf.d/:
volumeMounts:
- name: cm-logs
mountPath: /conf.d/
volumes:
- name: cm-logs
configMap:
name: ddagent-logs-configmap
Para montar el archivo de log del host, añade un parámetro de volumen en el comando docker run del agente:
-v /<host log directory>/:<container log directory>/
A continuación, crea localmente una configuración personalizada de logs:
logs:
- type: file
service: syslog
source: os
path: <container log path>/*.log
y móntala en /conf.d/. El nombre del archivo puede ser cualquiera:
-v <absolute path>/logs.yaml:/conf.d/logs.yaml
Su el comando de instalación de Docker del agente debe tener este aspecto:
docker run -d --name datadog-agent \
--cgroupns host \
--pid host \
-e DD_API_KEY=<DATADOG_API_KEY> \
-e DD_LOGS_ENABLED=true \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /proc/:/host/proc/:ro \
-v /opt/datadog-agent/run:/opt/datadog-agent/run:rw \
-v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
-v /<host log directory>/:<container log directory>/ \
-v /<config location>/logs.yaml:/conf.d/logs.yaml \
gcr.io/datadoghq/agent:latest
Verificación
Una vez configurado todo esto, puedes iniciar el agente. Deberías ver algo parecido a lo siguiente cuando lo ejecutes docker exec -it datadog-agent agent status:
==========
Logs Agent
==========
Sending compressed logs in HTTPS to agent-http-intake.logs.datadoghq.com on port 443
BytesSent: 10605
EncodedBytesSent: 2144
LogsProcessed: 32
LogsSent: 31
logs
----
Type: file
Path: /container/var/test-dir/logs/*.log
Status: OK
1 files tailed out of 1 files matching
Inputs: /container/var/test-dir/logs/722bfb2cb35cc627-json.log
Más enlaces, artículos y documentación útiles: