Guía del comando AWK
Contenerizar una aplicación Python con Paketo Buildpacks

Logs de Kubernetes con Grafana Loki y Promtail

Logs book with computer bug.

Vamos a enviar todos los logs generados en nuestro cluster Kubernetes a un dashboard ordenado y en tiempo real en Grafana. Todo esto gracias a Loki y Promtail. Necesitaremos:

  • Cluster Kubernetes.
  • Instalación de Grafana.
  • Instalación de Grafana Loki.
  • Agente Promtail en cada nodo del cluster Kubernetes.

Si aún no tienes un clúster Kubernetes, sigue esta guía donde encontrarás varias formas de hacerlo en local o en remoto en Digital Ocean:

Guía tutorial Kubernetes

¿Qué es Grafana?

Grafana es una plataforma de análisis y visualización interactiva. Proporciona una gran variedad de tablas, gráficos y alertas, y se conecta a una serie de fuentes de datos compatibles, como Prometheus, bases de datos de series temporales o las conocidas RDBM. Permite consultar, visualizar y crear alertas sobre métricas, independientemente de dónde estén almacenadas.

Hay que pensarlo como el equivalente de Kibana en la pila ELK.

La instalación es bastante sencilla y la vamos a realizar a través de Helm. Si no tienes Helm ya instalado en tu estación de trabajo puedes hacerlo con los siguientes comandos bash:

curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null

sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list

sudo apt-get update
sudo apt-get install helm --yes

Dejando esto atrás, ahora podemos instalar la tabla Helm para Grafana:

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

helm install grafana grafana/grafana --namespace grafana --create-namespace

Veamos qué se ha aprovisionado hasta ahora:

kubectl get all -n grafana

Comprobación instalación grafana para logs

El servicio service/grafana sería de tipo ClusterIPen una instalación vanilla, en mi caso ya estoy usando MetalLB como balanceador de carga de red en mi cluster y he parcheado el servicio como de tipo LoadBalancer. Siéntete libre de ignorar esto, vamos a portar este servicio más tarde.

¿Qué es Grafana Loki y Promtail?

Grafana Loki es un sistema de agregación de logs, más concretamente como se indica en su página web «es un sistema de agregación de logs horizontalmente escalable, altamente disponible y multi-tenant inspirado en Prometheus. Está diseñado para ser muy rentable y fácil de operar. No indexa el contenido de los registros, sino un conjunto de etiquetas para cada flujo de registro». Es un proyecto de código abierto bastante nuevo que se inició en 2018 en Grafana Labs.

Gráfico Loki

Loki utiliza Promtail para agregar registros. Promtail es un agente recolector de logs que recopila, (re)etiqueta y envía logs a Loki. Está construido específicamente para Loki – una instancia de Promtail se ejecutará en cada nodo Kubernetes. Utiliza exactamente el mismo descubrimiento de servicios que _Prometheus _ y admite métodos similares para etiquetar, transformar y filtrar registros antes de su ingestión en Loki.

Loki no indexa el texto real de los registros. Las entradas de registro se agrupan en flujos y luego se indexan con etiquetas. De este modo, Loki no sólo reduce los costes totales, sino también el tiempo que transcurre entre la ingestión de las entradas de registro y su disponibilidad en las consultas.

Viene con su propio lenguaje de consulta, LogQL, que se puede utilizar desde su propia interfaz de línea de comandos o directamente desde Grafana. Por último, pero no menos importante, se puede integrar estrechamente con el Gestor de Alertas de Prometheus – aunque, los dos últimos están fuera del alcance de este artículo.

Usted tiene que pensar como el equivalente (no 1-1, pero en un contexto más amplio) de Elasticsearch en la pila ELK.

Loki, consta de múltiples componentes/microservicios:

Gráfico Grafana Loki logs

Pueden ser desplegados en 3 modos diferentes:

  • Modo Monolítico, todos los componentes microservicios de Loki se ejecutan dentro de un único proceso como un único binario.
  • Modo escalable simple, si desea separar las rutas de lectura y escritura.
  • Modo Microservicios, cada componente de Loki se ejecuta como un proceso distinto.

La instalación escalable requiere un almacén de objetos compatible con S3 como AWS S3, Google Cloud Storage o un almacén autoalojado como MinIO. En el modo de despliegue monolítico sólo se puede utilizar el sistema de archivos para el almacenamiento. Para más información sobre cómo configurar el almacenamiento de Loki consulta este enlace.

La instalación (y esencialmente la configuración) de Loki y Promtail se realiza mediante dos charts distintas e independientes.

En primer lugar, vamos a descargar los valores por defecto de cada chart y a realizar los cambios necesarios. Para Loki (dado que también elegiste ir con la chart loki-distributed)

helm show values grafana/loki-distributed > loki-distributed-overrides.yaml

Si estás planeando ir con un almacenamiento compatible con S3 y no con el sistema de archivos, haz los siguientes cambios en los valores de tu chart:

Cambios s3

Configuración S3

El formato del punto final de S3 es

s3://{AK}:{SK}@{endpoint}/{region}/{bucket}

A continuación vamos a habilitar y configurar el compactor:

Configuración compactor

Configuración compactor

Los valores de Loki ya están configurados, vamos a instalarlo y pasar a Promtail:

helm upgrade --install --values loki-distributed-overrides.yaml loki grafana/loki-distributed -n grafana-loki --create-namespace

helm show values grafana/promtail > promtail-overrides.yaml

Obtenemos todos los componentes que hemos instalado de la gráfica de Loki:

kubectl get all -n grafana-loki

Resultado Grafana Loki logs

Vamos a necesitar el endpoint de la pasarela de Loki como endpoint designado que Promtail utilizará para enviar logs a Loki. En nuestro caso sería loki-loki-distributed-gateway.grafana-loki.svc.cluster.local, así que vamos a añadirlo en los valores de la tabla de Promtail:

url grafana Loki

Ya estamos listos para desplegar Promtail. Ejecuta el comando y espera un poco hasta que todos los pods estén listos.

helm upgrade --install --values promtail-overrides.yaml promtail grafana/promtail -n grafana-loki

Configurar fuentes de datos Grafana y Dashboard

Todos los despliegues se han completado. Es hora de configurar nuestro Grafana. Como vimos antes Grafana tiene un servicio simple, vamos a portarlo y acceder a Grafana directamente desde http://localhost:8080/:

kubectl port-forward service/grafana 8080:80 -n grafana

Por supuesto, usted es libre de exponer este servicio de una manera diferente, ya sea con la asignación a la misma una IP externa por un equilibrador de carga o como una ruta de entrada a través de la solución de entrada de elección.

Panel Grafana

Vas a necesitar esas credenciales para iniciar sesión. El usuario por defecto es admin, pero la contraseña necesitará un poco de trabajo para ser recuperada. Obtenga todos los secretos en el espacio de nombres grafana:

kubectl get secrets -n grafana

Secrets grafana

Aquí es donde vive nuestra contraseña. Vamos a extraerla y decodificarla:

kubectl get secret grafana -n grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

Ya estamos dentro. Lo siguiente que tenemos que hacer es añadir Grafana Loki como fuente de datos:

Data source

Data Sources Loki

Como URL, utiliza el endpoint del servicio de pasarela de Grafana Loki: http://loki-loki-distributed-gateway.grafana-loki.svc.cluster.local. Probar, guardar y salir.

Último paso, ahora necesitamos añadir un dashboard para poder ver eventualmente nuestros logs. Al principio, puedes basarte en los ya existentes y luego adaptarlos a tus necesidades. Un buen punto de partida es este. Copia el ID de la plantilla del panel de control de la página web:

Dashboard template

y en tu entorno Grafana, elige Importar un nuevo Dashboard:

dashboard grafana

Pega el ID de la plantilla que acabamos de adquirir y carga el dashboard:

ID dashboard template

Ahora todas las piezas del puzzle deberían encajar y deberías poder ver los logs de tus cargas de trabajo Kubernetes directamente en tu interfaz Grafana como una experiencia casi en tiempo real:

Image description

Conclusión

En definitiva, cuando se trata de monitorización y observabilidad de Kubernetes esto es sólo arañar la superficie, pero sin embargo es un primer paso robusto que puedes cumplir con casi el mínimo esfuerzo y en menos de 10 minutos.

La combinación de Grafana Loki y Promtail ofrece una solución robusta y eficiente para la gestión de logs en entornos Kubernetes, mejorando la capacidad de monitorización y resolución de problemas en tiempo real. Al proporcionar una interfaz intuitiva y herramientas flexibles de visualización y análisis, esta solución empodera a los equipos de operaciones y desarrolladores para optimizar el rendimiento y la disponibilidad de sus aplicaciones en un clúster Kubernetes.

Más apuntes

Invítame a un café con bitcoins:
1QESjZDPxWtZ9sj3v5tvgfFn3ks13AxWVZ

Bitcoins para café
También puedes invitarme a algo para mojar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Rellena este campo
Rellena este campo
Por favor, introduce una dirección de correo electrónico válida.
Tienes que aprobar los términos para continuar