Monitorización de un cluster de kubernetes

Gestión y visualización de logs y métricas de un cluster de kubernetes con grafana, loki y prometheus

Problema actual

Ahora mismo, si ocurre algún problema con el servidor, no tenemos forma de detectarlo ni de monitorear su estado. Esto puede llevar a tiempos de inactividad prolongados y dificultades en la resolución de problemas.

Para solucionar este problema, necesitamos implementar un sistema de monitorización que nos permita detectar y responder rápidamente a cualquier fallo en el servidor. En la industria se suele optar por una de dos opciones: ELK stack (más robusta y con rodaje), o Grafana + Prometheus + Loki (una solución más moderna y eficiente y nativa a entornos contenerizados y cloud).

Yo opté por la segunda opción, ya que cubría todas mis necesidades consumiento menos recursos y siendo más simple de implementar.

Loki y promtail

Loki es el encargado de gestionar y almacenar los logs de servicios y sistema. Promtail es el agente que lleva los logs desde los contenedores a Loki.

Aplicamos los manifests de kubernetes, disponibles en mi github

kubectl create ns monitoring
kubectl apply -f https://raw.githubusercontent.com/akerra/k8s-grafana-loki-prometheus/main/loki/loki-stack.yaml
kubectl apply -f https://raw.githubusercontent.com/akerra/k8s-grafana-loki-prometheus/main/promtail/promtail-daemonset.yaml

Comprobamos que la api funciona correctamente

kubectl port-forward svc/loki 3100:3100 curl -X GET "http://localhost:3100/loki/api/v1/labels"

Prometheus

Prometheus es el encargado de recopilar métricas como consumo de CPU, memoria y disco.

Prometheus dispone de un helm que facilita su despliegue, el cual utilizaremos

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/prometheus --namespace monitoring

Comprobamos que la api funciona correctamente

kubectl port-forward svc/prometheus-server 9090:80
curl -X GET "http://localhost:9090/api/v1/labels"

Grafana

Grafana es la herramienta de visualización que nos permite crear dashboards personalizados para monitorizar nuestro cluster.

Desplegamos grafana con los manifests disponibles en mi github

kubectl apply -f https://raw.githubusercontent.com/akerra/k8s-grafana-loki-prometheus/main/grafana/grafana-deployment.yaml

Accedemos desde el navegador y comprobamos que los logs y las méticas son visibles en dashboards.

Con esto hemos conseguido nuestro objetivo de monitorización del cluster, recogiendo métricas y logs en un solo lugar. Esto nos ayudará a detectar picos de uso y concluir si el harware es apropiado o no, así como ayudarnos con auditorías y reparaciones.