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

Resumen

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.

Almacenamiento

Comparativas de almacenamiento:

Seguridad

Para poder acceder a las APIs de loki vamos a crear una autenticacion mediante usuario y contraseña encriptados usando la herramienta de htpasswd

Caracteristicas:

  • Permite el acceso limitado.
  • Autenticacion en autenticacion mediante usuario y contraseña
  • Permite encriptar la contraseña

Prerequisitos para la instalacion

Para instalar el stack completo de la herramienta es necesario contar con los siguientes prerequisitos:

  • Helm v3
  • Comando Az cli instalado
  • Crear password usando httpasswd

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

Instalacion Loki:

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 

Agregando datasource en Grafana:

En el portal de grafana, vamos a Add datasource y seleccionamos loki

Valores a agregar:

  • URL
  • Basicauth --> USER y PASS

Finalmente es posible crear LogQuerys que permitan traer datos los namespace, nodos, pods y otros.

¿Cuándo se debe utilizar?

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.

Conclusión

  • Arquitectura adataptable a diferentes mesas de trabajo.
  • Permite el analisis de logs del cluster de AKS

Pros

  • Posibilidad de monitorear logs que generan los pods y nodos.

Contras

  • No es posible el monitoreo metricas que generan los pods y nodos.