27 de noviembre de 2017 Ingeniería

Envío de logs de Kubernetes a Elasticsearch con Filebeat

Por Carlos Pérez-Aradros

Recientemente, escribimos acerca de las nuevas funciones de Filebeat para recuperar y enriquecer los logs de Docker con Filebeat, y, desde la versión 6.0, puede aprovechar esta misma tecnología cuando utilice Kubernetes.

Los metadatos son la clave

Cuando envíe logs desde infraestructura de contenedores, es importante que incluya metadatos de contexto para garantizar que podamos correlacionar los logs más tarde. Esto es muy importante en el caso de Kubernetes. Es posible que quiera acceder a los logs desde una implementación completa, un espacio de nombres, pods con una etiqueta específica o simplemente un único contenedor. Los metadatos son la clave para garantizar que pueda filtrar los logs para enfocarse en lo que realmente le importa.

Además, los metadatos son útiles para correlacionar eventos de diferentes fuentes. Cuando analiza problemas, es muy común verificar los logs y las métricas en conjunto. Gracias a los metadatos de Kubernetes, podemos filtrar ambos al mismo tiempo.

Agregar metadatos de Kubernetes

Usamos procesadores en todos nuestros Beats para modificar los eventos antes de enviarlos a Elasticsearch. Algunos de ellos se usan para agregar metadatos. Como parte de la versión 6.0.0, agregamos add_kubernetes_metadata a la lista.

add_kubernetes_metadata enriquece los logs con metadatos del contenedor fuente; agrega el nombre del pod, el nombre del contenedor y la imagen, etiquetas de Kubernetes y, de manera opcional, anotaciones. Funciona escuchando la API Kubernetes en busca de eventos del pod, y creando una memoria caché local de contenedores en ejecución. Cuando se lee una nueva línea del log, se enriquece con metadatos de la memoria caché local.

add_docker_metadata schema

Implementación

El envío de logs de Kubernetes con Filebeat es bastante sencillo: nosotros proporcionamos documentación y manifiestos de muestra para hacerlo. Filebeat se implementa como DaemonSet. Esto garantiza que se ejecute un agente en todos los nodos de Kubernetes. La carpeta de logs de Docker del host se ubica en el contenedor de Filebeat. Filebeat lee los logs del contenedor y los enriquece con add_kubernetes_metadata. Para probarlo y verlo por sus propios medios, siga estos sencillos pasos:

# Download Filebeat DaemonSet manifest
curl -L -O https://raw.githubusercontent.com/elastic/beats/6.0/deploy/kubernetes/filebeat-kubernetes.yaml

# Update Elasticsearch connection details
- name: ELASTICSEARCH_HOST
 value: elasticsearch
- name: ELASTICSEARCH_PORT
 value: "9200"
- name: ELASTICSEARCH_USERNAME
 value: elastic
- name: ELASTICSEARCH_PASSWORD
 value: changeme

# Deploy it to Kubernetes
kubectl create -f filebeat-kubernetes.yaml

Los logs comenzarán a transferirse a Elasticsearch, enriquecidos con metadatos de Kubernetes. Ahora puede filtrar los logs:

Busque logs de Kubernetes en Kibana

Comience con Elastic Stack y pruébelo usted mismo.