Gestionar tu cluster de Kubernetes con Elastic Observability

Como ingeniero de operaciones (SRE, gerente de IT, DevOps), siempre debes lidiar con cómo gestionar la gran cantidad de datos y tecnología. Kubernetes se está volviendo cada vez más generalizado, y la mayoría de estos despliegues se harán en Amazon Kubernetes Service (EKS), Google Kubernetes Engine (GKE) o Azure Kubernetes Service (AKS). Es posible que algunos de ustedes usen un solo cloud, mientras que otros tienen la carga agregada de gestionar clusters en varios servicios en el cloud de Kubernetes. Además de la complejidad del Proveedor Cloud, también debes gestionar cientos de servicios desplegados, lo que genera cada vez más datos de telemetría y observabilidad.

Las operaciones cotidianas de comprender el estado de los clusters de Kubernetes y las aplicaciones que se ejecutan en ellos, mediante los logs, las métricas y los rastreos que generan, será probablemente tu principal desafío. Pero como ingeniero de operaciones, necesitarás todos esos datos importantes para ayudar a prevenir, predecir y corregir problemas. Definitivamente no necesitas esa cantidad de métricas, logs y rastreos distribuidos en varias herramientas cuando debes visualizar y analizar los datos de telemetría de Kubernetes para solucionar problemas y brindar soporte.

Elastic Observability ayuda a gestionar la gran cantidad de logs y métricas de Kubernetes brindando capacidades de observabilidad amplias y centralizadas más allá de logging por el que somos conocidos. Elastic Observability te brinda contexto e información granular sobre el comportamiento de tus clusters de Kubernetes junto con las aplicaciones que se ejecutan en ellos unificando todos los datos de rastreo, logs y métricas a través de agentes APM y OpenTelemetry.

Independientemente de la ubicación de los clusters (EKS, GKE, AKS, autogestionados) o la aplicación, el monitoreo de Kubernetes se simplifica con Elastic Observability. Todas las métricas de nodos, pods, contenedores, aplicaciones e infraestructura (AWS, GCP, Azure), los logs de aplicaciones e infraestructura, y también rastreos de aplicaciones se encuentran disponibles en Elastic Observability.

En este blog mostraremos lo siguiente:

  • Cómo Elastic Cloud puede agregar e ingestar datos de logs y métricas a través de Elastic Agent (fácilmente desplegado en tu cluster como un DaemonSet) para recuperar logs y métricas del host (métricas del sistema, estadísticas de contenedores) junto con logs de todos los servicios que se ejecutan sobre Kubernetes.
  • Cómo Elastic Observability puede aportar una experiencia de telemetría unificada (logs, métricas, rastreos) en todos los componentes del cluster de Kubernetes (pods, nodos, servicios, espacios de nombre y más).
Elastic Agent con integración de Kubernetes
Elastic Agent con integración de Kubernetes

Requisitos previos y configuración

Si tienes pensado seguir este blog, estos son algunos de los componentes y detalles que usamos para configurar esta demostración:

  • Asegúrate de tener una cuenta en Elastic Cloud y un stack desplegado (consulta las instrucciones aquí).
  • Si bien nosotros usamos GKE, tú puedes usar cualquier ubicación para tu cluster de Kubernetes.
  • Usamos una variante de la aplicación de demostración siempre tan popular HipsterShop. Originalmente, la escribió Google para mostrar Kubernetes en una gran cantidad de variantes disponibles, como la app de demostración de OpenTelemetry. Para usar esta aplicación, dirígete aquí y sigue las instrucciones de despliegue. No es necesario que despliegues otelcollector para que las métricas de Kubernetes fluyan; lo veremos a continuación.
  • Elastic brinda soporte para la ingesta nativa desde Prometheus y FluentD, pero en este blog, mostramos una ingesta directa desde el cluster de Kubernetes a través de Elastic Agent. Haremos un blog de seguimiento en el que mostraremos cómo Elastic también puede incorporar telemetría de Prometheus o FluentD/bit.

¿Qué puedes observar y analizar con Elastic?

Antes de repasar los pasos de configuración de Elastic para ingestar y visualizar logs y métricas del cluster de Kubernetes, echemos un vistazo a los dashboards útiles de Elastic.

Como mencionamos, ejecutamos una variante de HipsterShop en GKE y desplegamos Elastic Agent con integración de Kubernetes como un DaemonSet en el cluster de GKE. Al desplegar los agentes, Elastic comienza a ingestar métricas del cluster de Kubernetes (específicamente de kube-state-metrics) y, además, Elastic extraerá toda la información de logs del cluster.

Cómo visualizar las métricas de Kubernetes en Elastic Observability

Estos son algunos dashboards de Kubernetes que estarán disponibles de fábrica en Elastic Observability.

Métricas del cluster de HipsterShop en el dashboard de visión general de Elastic Kubernetes
Métricas del cluster de HipsterShop en el dashboard de visión general de Elastic Kubernetes
Dashboard de pods de espacio de nombre predeterminado de HipsterShop en Elastic Observability
Dashboard de pods de espacio de nombre predeterminado de HipsterShop en Elastic Observability

Además del dashboard de visión general del cluster y dashboard de pods, Elastic tiene varios dashboards de fábrica útiles:

  • Dashboard de visión general de Kubernetes (ver arriba)
  • Dashboard de pods de Kubernetes (ver arriba)
  • Dashboard de nodos de Kubernetes
  • Dashboard de despliegues de Kubernetes
  • Dashboard de DaemonSets de Kubernetes
  • Dashboard de StatefulSets de Kubernetes
  • Dashboards de trabajos y CronJob de Kubernetes
  • Dashboards de servicios de Kubernetes
  • Se agregan más con regularidad

Además, puedes personalizar estos dashboards o crear uno propio.

Cómo trabajar con logs en Elastic Observability

Logs de contenedores de Kubernetes y logs de Elastic Agent
Logs de contenedores de Kubernetes y logs de Elastic Agent

Como puedes ver en estas pantallas anteriores, no solo se pueden obtener métricas de cluster de Kubernetes, sino todos los logs de Kubernetes con solo usar Elastic Agent en mi cluster de Kubernetes.

Prevenir, predecir y corregir problemas

Además de ayudar a gestionar métricas y logs, Elastic puede ayudarte a detectar y predecir anomalías en toda la telemetría de tu cluster. Simplemente activa Machine Learning en Elastic para los datos y ve cómo ayuda a mejorar el trabajo de análisis. Como puedes ver a continuación, Elastic no solo es una ubicación de observabilidad unificada para tus métricas y logs de cluster de Kubernetes, sino que también proporciona verdaderas capacidades de machine learning amplias para mejorar el análisis y la gestión.

Detección de anomalías en logs en Elastic Observability
Detección de anomalías en logs en Elastic Observability
Análisis de problemas en un pod de Kubernetes con Elastic Observability
Análisis de problemas en un pod de Kubernetes con Elastic Observability

En el primer grafo, puedes ver la detección de anomalías en los logs, y se muestra que algo podría estar mal en el período del 21 al 23 de septiembre. Profundiza en los detalles en el segundo grafo analizando una sola métrica de kubernetes.pod.cpu.usage.node que muestra problemas en la cpu a principios de septiembre y, de nuevo, más adelante el mismo mes. Puedes hacer análisis más complicados de la telemetría del cluster con Machine Learning a través de análisis multimétricas (en comparación con el problema de una sola métrica que mostramos arriba) junto con el análisis de población.

Elastic te proporciona mejores capacidades de machine learning para mejorar el análisis de la telemetría del cluster de Kubernetes. En la próxima sección, veremos lo fácil que es ingresar los datos de telemetría en Elastic.

Configuración general

Veamos los detalles de cómo ingresar las métricas, los logs y los rastreos en Elastic desde una aplicación HipsterShop desplegada en GKE.

Primero, elige tu versión favorita de Hipstershop; como mencionamos antes, usamos una variante de OpenTelemetry-Demo porque ya incluye OTel. Lo redujimos para este blog (menos servicios con algunos idiomas variados).

Paso 0: Obtener una cuenta en Elastic Cloud

Sigue las instrucciones para dar los primeros pasos en Elastic Cloud.

Paso 1: Obtener un cluster de Kubernetes y cargar tu app de Kubernetes en tu cluster

Pon tu aplicación en un cluster de Kubernetes en el servicio de Cloud que prefieras o plataforma de Kubernetes local. Una vez que tu aplicación esté activa en Kubernetes, tendrás los siguientes pods (o alguna de sus variantes) ejecutándose en el espacio de nombre default.

NAME                                    READY   STATUS    RESTARTS   AGE
adservice-8694798b7b-jbfxt              1/1     Running   0          4d3h
cartservice-67b598697c-hfsxv            1/1     Running   0          4d3h
checkoutservice-994ddc4c4-p9p2s         1/1     Running   0          4d3h
currencyservice-574f65d7f8-zc4bn        1/1     Running   0          4d3h
emailservice-6db78645b5-ppmdk           1/1     Running   0          4d3h
frontend-5778bfc56d-jjfxg               1/1     Running   0          4d3h
jaeger-686c775fbd-7d45d                 1/1     Running   0          4d3h
loadgenerator-c8f76d8db-gvrp7           1/1     Running   0          4d3h
otelcollector-5b87f4f484-4wbwn          1/1     Running   0          4d3h
paymentservice-6888bb469c-nblqj         1/1     Running   0          4d3h
productcatalogservice-66478c4b4-ff5qm   1/1     Running   0          4d3h
recommendationservice-648978746-8bzxc   1/1     Running   0          4d3h
redis-cart-96d48485f-gpgxd              1/1     Running   0          4d3h
shippingservice-67fddb767f-cq97d        1/1     Running   0          4d3h

Paso 2: Activar kube-state-metrics

A continuación, tendrás que activar kube-state-metrics.

Primero:

git clone https://github.com/kubernetes/kube-state-metrics.git

Luego, en el directorio kube-state-metrics del directorio de ejemplos, simplemente aplica la configuración estándar.

kubectl apply -f ./standard

Esto activará kube-state-metrics, y deberías ver un pod similar a este ejecutándose en el espacio de nombre kube-system.

kube-state-metrics-5f9dc77c66-qjprz                    1/1     Running   0          4d4h

Paso 3: Instalar Elastic Agent con integración de Kubernetes

Agrega la integración de Kubernetes:

  1. En Elastic, ve a las integraciones y selecciona Kubernetes Integration (Integración de Kubernetes), y luego Add Kubernetes (Agregar Kubernetes).
  2. Selecciona un nombre para la integración de Kubernetes.
  3. Activa kube-state-metrics en la pantalla de configuración.
  4. Asigna a la configuración un nombre en el cuadro de texto new-agent-policy-name.
  5. Guarda la configuración. Ahora está creada la integración con una política.

Puedes leer sobre las políticas de agente y cómo se usan en Elastic Agent aquí.

  1. Agrega la integración de Kubernetes.
  2. Selecciona la política que acabas de crear.
  3. En el tercer paso de las instrucciones de Add Agent (Agregar agente), copia y pega o descarga el manifiesto.
  4. Agrega el manifiesto al shell en el que se está ejecutando kubectl, guárdalo como elastic-agent-managed-kubernetes.yaml y ejecuta el comando siguiente.
kubectl apply -f elastic-agent-managed-kubernetes.yaml

Deberías ver que aparece un número de agentes como parte de un DaemonSet en el espacio de nombre kube-system.

NAME                                                   READY   STATUS    RESTARTS   AGE
elastic-agent-qr6hj                                    1/1     Running   0          4d7h
elastic-agent-sctmz                                    1/1     Running   0          4d7h
elastic-agent-x6zkw                                    1/1     Running   0          4d7h
elastic-agent-zc64h                                    1/1     Running   0          4d7h

En este cluster, tenemos cuatro nodos y cuatro elastic-agent iniciados como parte del DaemonSet.

Paso 4: Observar los dashboards de fábrica de Elastic para las métricas de Kubernetes y comenzar a descubrir logs de Kubernetes

Eso es todo. Deberías ver a las métricas fluir en todos los dashboards. A fin de ver los logs de pods específicos, simplemente ve a Discover en Kibana y busca un nombre de pod específico.

Métricas del cluster de HipsterShop en el dashboard de visión general de Elastic Kubernetes
Métricas del cluster de HipsterShop en el dashboard de visión general de Elastic Kubernetes
Dashboard de pods de espacio de nombre predeterminado de Hipstershop en Elastic Observability
Dashboard de pods de espacio de nombre predeterminado de Hipstershop en Elastic Observability

Además, también puedes buscar en todos los logs de pods directamente en Elastic.

Logs frontendService y cartService
Logs frontendService y cartService

En el ejemplo anterior, buscamos los logs frontendService y cartService.

Paso 5: Adicional

Como usamos una aplicación basada en OTel, Elastic puede incluso incorporar los rastreos de las aplicaciones. Pero eso es material para otro blog.

Este es un vistazo rápido de cómo se ven los rastreos de Hipster Shop para una transacción de frontend en Elastic Observability.

Rastreo de transacciones de finalización de compra en HipsterShop
Rastreo de transacciones de finalización de compra en HipsterShop

Conclusión: Elastic Observability es estupendo para el monitoreo de Kubernetes

Esperamos que hayas podido apreciar cómo Elastic Observability puede ayudarte a gestionar los clusters de Kubernetes junto con la complejidad de las métricas, los logs y los datos de rastreo que genera incluso para un despliegue simple.

Un breve resumen de las lecciones y demás:

  • Cómo Elastic Cloud puede agregar e ingestar datos de telemetría a través de Elastic Agent, que se despliega fácilmente en tu cluster como un DaemonSet y recupera métricas del host, como métricas del sistema, estadísticas de contenedores y métricas de todos los servicios que se ejecutan sobre Kubernetes.
  • Qué aporta Elastic Observability de una experiencia de telemetría unificada (logs, métricas, rastreos de Kubernetes) en todos los componentes del cluster de Kubernetes (pods, nodos, servicios, cualquier espacio de nombre y más).
  • Interés en la exploración de las capacidades de ML de Elastic, que reducirán el MTTHH (tiempo promedio hasta el happy hour).

¿Listo para comenzar? Regístrate y prueba las características y capacidades descritas arriba.