En el presente documento se proponen herramientas de monitoreo que permiten obtener logs de nodos y pods de un cluster de AKS. Para esto, se instalará promtail y loki mediante la herramienta de helm.
1. Control de versiones del documento
Autor | Christian Vidal |
Version | 1.0 |
Fecha | 03/08/2022 |
2. Componentes de la herramienta de monitoreo
Loki es similar a la pila ELK / EFK, pero es más fácil de configurar y operar con mejores funcionalidades.
Promtail, es el agente que se encarga de enviar los logs a Loki, y Grafana se va a encargar de visualizarlos y poder filtrar por algún criterio o por las etiquetas que definiremos.
3. Arquitectura de monitoreo de Logs
La instalacion de la herramienta podra extraer los logs del cluster del AKS a nivel de nodos y pods. Y para lograr esto se instalará un agente de loki y un agente de promtail por cada nodo, es decir, al tener un cluster de dos nodos se tendra un total 3 pods.
Comparativas de almacenamiento:
Para poder acceder a las APIs de loki vamos a crear una autenticacion mediante usuario y contraseña encriptados usando la herramienta de htpasswd
Para instalar el stack completo de la herramienta es necesario contar con los siguientes prerequisitos:
Ejecutar los siguientes comandos como pasos previos para instalar la herramienta, en donde agregaremos el repositorio Helm y crearemos el namespace llamado “monitoring” en el cluster de AKS:
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
kubectl create namespace monitoring
Crear archivo values.yaml que posteriormente se usará para la instalación de loki stack.
loki:
config:
query_scheduler:
max_outstanding_requests_per_tenant: 2048
query_range:
parallelise_shardable_queries: false
split_queries_by_interval: 0
Creación de usuario para conexión a loki datasource.
a) Crearemos usuario con la herramienta htpasswd
apt install apache2-utils
htpasswd -c auth example-user
b) Obtendremos el valor encodeado en base64 para crear el secreto
cat auth | base64
Aplicaremos el secreto usando el siguiente comando kubectl apply -f secret.yaml.
Ejemplo:
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: htpasswd
data:
auth: <base64-encoded htpasswd file>
Despues de la instalacion crearemos un ingress de modo que se pueda asegurar la conexión desde otro lugar con autenticacion a loki. Aplicaremos el secreto usando el siguiente comando kubectl apply -f ingress.yaml.
Ejemplo:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: htpasswd
nginx.ingress.kubernetes.io/auth-realm: "Enter your credentials"
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: loki
spec:
rules:
- host: aks-testdev-ingress-dev.eastus2.cloudapp.azure.com
http:
paths:
- path: /logging(/|$)(.*)
pathType: Prefix
backend:
serviceName: loki
servicePort: 3100
tls:
- secretName: tls-secret
hosts:
- aks-testdev-ingress-dev.eastus2.cloudapp.azure.com
La instalacion la plataforma de monitoreo se da mediante la herramienta de helm usando el repositorio de loki stack. Ejemplo de comando de instalacion de forma manual con los valores automatizados por reemplazar (Tamaño de memoria):
helm upgrade --install loki grafana/loki-stack –version 2.6.3 -f values.yaml \
--namespace monitoring \
--set loki.persistence.enabled=true,loki.persistence.storageClassName=default,loki.persistence.size=60Gi
En el portal de grafana, vamos a Add datasource y seleccionamos loki
Valores a agregar:
Finalmente es posible crear LogQuerys que permitan traer datos los namespace, nodos, pods y otros.
Con la presencia de un cluster de AKS, se recomienda tener el stack de la herramienta para mantener monitoreado los logs de de los nodos y pods.