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: