Gerenciamento do seu cluster do Kubernetes com o Elastic Observability

Como engenheiro(a) de operações (SRE, gerente de TI, DevOps), você está sempre na luta para saber como administrar a expansão da tecnologia e dos dados. O Kubernetes está se tornando cada vez mais difundido, e a maioria dessas implantações será no Amazon Elastic Kubernetes Service (EKS), no Google Kubernetes Engine (GKE) ou no Azure Kubernetes Service (AKS). Alguns de vocês podem estar usando uma única nuvem, enquanto outros terão o trabalho adicional de gerenciar clusters em vários serviços de nuvem do Kubernetes. Além da complexidade do provedor de serviços em nuvem, você também precisa gerenciar centenas de serviços implantados, gerando cada vez mais dados de observabilidade e telemetria.

As operações diárias de compreensão do status e da integridade de seus clusters do Kubernetes e das aplicações executadas neles, por meio dos logs, métricas e traces que eles geram, provavelmente serão seu maior desafio. Mas, como engenheiro(a) de operações, você precisará de todos esses dados importantes para ajudar a prevenir, prever e corrigir problemas. E certamente não precisa ter esse volume de métricas, logs e traces espalhado por várias ferramentas quando precisa visualizar e analisar dados de telemetria do Kubernetes para solução de problemas e suporte.

O Elastic Observability ajuda a gerenciar a expansão de métricas e logs do Kubernetes, fornecendo funcionalidades de observabilidade abrangentes e centralizadas, além do logging pelo qual somos conhecidos. O Elastic Observability fornece insights granulares e contexto sobre o comportamento dos seus clusters do Kubernetes, juntamente com as aplicações executadas neles, unificando todos os seus dados de métricas, logs e traces por meio de agentes do OpenTelemetry e de APM.

Independentemente do local do cluster (EKS, GKE, AKS, autogerenciado) ou da aplicação, o monitoramento do Kubernetes fica mais simples com o Elastic Observability. Todas as métricas de nós, pods, containers, aplicações e infraestrutura (AWS, GCP, Azure), logs de infraestrutura e aplicações, juntamente com traces de aplicações, estão disponíveis no Elastic Observability.

Neste blog, mostraremos:

  • Como o Elastic Cloud pode agregar e ingerir dados de métricas e logs por meio do Elastic Agent (facilmente implantado no seu cluster como um DaemonSet) para recuperar logs e métricas do host (métricas do sistema, estatísticas de container) junto com logs de todos os serviços executados no Kubernetes.
  • Como o Elastic Observability pode trazer uma experiência de telemetria unificada (logs, métricas, traces) em todos os componentes do cluster do Kubernetes (pods, nós, serviços, espaços de nome e muito mais).
Elastic Agent com integração do Kubernetes
Elastic Agent com integração do Kubernetes

Pré-requisitos e configuração

Se você planeja seguir este post, aqui estão alguns dos componentes e detalhes que usamos para configurar esta demonstração:

  • Você deverá ter uma conta no Elastic Cloud e uma stack implantada (consulte as instruções aqui).
  • Embora tenhamos usado o GKE, você pode usar qualquer local para seu cluster do Kubernetes.
  • Usamos uma variante da popular aplicação de demonstração Hipster Shop. Ela foi originalmente desenvolvida pelo Google para demonstrar o Kubernetes em diversas variantes disponíveis, como o app de demonstração do OpenTelemetry. Para usar o app, clique aqui e siga as instruções para implantar. Você não precisa implantar o otelcollector para que as métricas do Kubernetes fluam — falaremos sobre isso mais adiante.
  • A Elastic oferece suporte para a ingestão nativa do Prometheus e do FluentD, mas neste post mostramos uma ingestão direta do cluster do Kubernetes por meio do Elastic Agent. Posteriormente publicaremos um post mostrando como o Elastic também pode extrair telemetria do Prometheus ou do FluentD/bit.

O que você pode observar e analisar com o Elastic?

Antes de seguirmos as etapas de configuração do Elastic para ingerir e visualizar métricas e logs do cluster do Kubernetes, vamos dar uma olhada nos dashboards do Elastic.

Conforme observamos, executamos uma variante do Hipster Shop no GKE e implantamos o Elastic Agent com integração do Kubernetes como um DaemonSet no cluster do GKE. Após a implantação dos agentes, a Elastic começa a ingerir métricas do cluster do Kubernetes (especificamente de kube-state-metrics) e, adicionalmente, a Elastic extrairá todas as informações de log do cluster.

Visualização das métricas do Kubernetes no Elastic Observability

Aqui estão alguns dashboards do Kubernetes que estarão disponíveis imediatamente no Elastic Observability.

Métricas de cluster do Hipster Shop no dashboard de visão geral do Elastic Kubernetes
Métricas de cluster do Hipster Shop no dashboard de visão geral do Elastic Kubernetes
Dashboard do pod de espaço de nome padrão do Hipster Shop no Elastic Observability
Dashboard do pod de espaço de nome padrão do Hipster Shop no Elastic Observability

Além do dashboard de visão geral do cluster e do dashboard do pod, a Elastic tem vários dashboard úteis que vêm prontos para uso:

  • Dashboard de visão geral do Kubernetes (veja acima)
  • Dashboard do pod do Kubernetes (veja acima)
  • Dashboard de nós do Kubernetes
  • Dashboard de implantações do Kubernetes
  • Dashboard de DaemonSets do Kubernetes
  • Dashboards de StatefulSets do Kubernetes
  • Dashboards de CronJob e trabalhos do Kubernetes
  • Dashboards de serviços do Kubernetes
  • Outros serão adicionados regularmente

Além disso, você pode customizar esses dashboards ou criar os seus.

Trabalho com logs no Elastic Observability

Logs de container do Kubernetes e logs do Elastic Agent
Logs de container do Kubernetes e logs do Elastic Agent

Como você pode ver nas telas acima, posso obter as métricas de cluster do Kubernetes e também todos os logs do Kubernetes simplesmente usando o Elastic Agent no meu cluster do Kubernetes.

Prevenir, prever e corrigir problemas

Além de ajudar a gerenciar métricas e logs, a Elastic pode ajudar você a detectar e prever anomalias na telemetria do cluster. Basta ativar o Machine Learning no Elastic em relação aos seus dados e observar como ele ajuda a aprimorar seu trabalho de análise. Como você pode ver abaixo, o Elastic não é apenas um local unificado de observabilidade para os logs e métricas do cluster do Kubernetes, mas também fornece amplas funcionalidades reais de machine learning para aprimorar sua análise e gerenciamento.

Detecção de anomalia em logs no Elastic Observability
Detecção de anomalia em logs no Elastic Observability
Análise de problemas em um pod do Kubernetes com o Elastic Observability
Análise de problemas em um pod do Kubernetes com o Elastic Observability

No gráfico superior, você vê a detecção de anomalia nos logs, e ele mostra algo potencialmente errado no período de 21 a 23 de setembro. Aprofunde-se nos detalhes do gráfico inferior analisando uma única métrica kubernetes.pod.cpu.usage.node que mostra problemas de CPU no início de setembro e novamente no final do mês. Você pode fazer análises mais complicadas na sua telemetria do cluster com o Machine Learning usando análise multimétrica (em vez do problema de métrica única que estou mostrando acima) junto com a análise populacional.

A Elastic oferece melhores funcionalidades de machine learning para aprimorar sua análise da telemetria do cluster do Kubernetes. Na próxima seção, veremos como é fácil transferir seus dados de telemetria para o Elastic.

Para preparar tudo

Vamos examinar os detalhes de como transferir métricas, logs e traces para o Elastic de uma aplicação Hipster Shop implantada no GKE.

Primeiro, escolha sua versão favorita do Hipster Shop — como observamos acima, usamos uma variante do OpenTelemetry-Demo porque ela já tem o OTel. No entanto, reduzimos o tamanho para este post (menos serviços com alguns idiomas variados).

Etapa 0. Criar uma conta no Elastic Cloud

Siga as instruções para começar a usar o Elastic Cloud.

Etapa 1. Obter um cluster do Kubernetes e carregar o app do Kubernetes no seu cluster

Coloque o app em um cluster do Kubernetes no serviço de nuvem de sua preferência ou na plataforma do Kubernetes local. Depois que o app estiver em execução no Kubernetes, você terá os pods a seguir (ou alguma variante) em execução no espaço de nome 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

Etapa 2. Ativar o kube-state-metrics

Em seguida, você precisará ativar o kube-state-metrics.

Primeiro:

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

Em seguida, no diretório kube-state-metrics sob o diretório de exemplos, basta aplicar a configuração padrão.

kubectl apply -f ./standard

Isso ativará o kube-state-metrics, e você verá um pod semelhante a este em execução no espaço de nome kube-system.

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

Etapa 3. Instalar o Elastic Agent com a integração do Kubernetes

Adicionar a integração do Kubernetes:

  1. No Elastic, vá para Integrations (Integrações), selecione Kubernetes Integration (Integração do Kubernetes) e selecione Add Kubernetes (Adicionar Kubernetes).
  2. Selecione um nome para a integração do Kubernetes.
  3. Ative o kube-state-metrics na tela de configuração.
  4. Dê um nome à configuração na caixa de texto new-agent-policy-name.
  5. Salve a configuração. A integração com uma política foi criada.

Você pode ler sobre as políticas do agente e como elas são usadas no Elastic Agent aqui.

  1. Adicione a integração do Kubernetes.
  2. Selecione a política que você acabou de criar na segunda etapa.
  3. Na terceira etapa das instruções para adicionar o agente, copie e cole ou baixe o manifesto.
  4. Adicione o manifesto ao shell onde você tem o kubectl em execução, salve-o como elastic-agent-owned-kubernetes.yaml e execute o comando a seguir.
kubectl apply -f elastic-agent-managed-kubernetes.yaml

Você deverá ver vários agentes surgirem como parte de um DaemonSet no espaço de nome 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

No meu cluster, tenho quatro nós e quatro elastic-agents iniciados como parte do DaemonSet.

Etapa 4. Ver os dashboards prontos para uso da Elastic para métricas do Kubernetes e começar a descobrir logs do Kubernetes

É isso. Você deverá ver as métricas fluindo para todos os dashboards. Para visualizar logs de pods específicos, basta acessar o Discover no Kibana e buscar o nome de um pod específico.

Métricas de cluster do Hipster Shop no dashboard de visão geral do Elastic Kubernetes
Métricas de cluster do Hipster Shop no dashboard de visão geral do Elastic Kubernetes
Dashboard do pod de espaço de nome padrão do Hipster Shop no Elastic Observability
Dashboard do pod de espaço de nome padrão do Hipster Shop no Elastic Observability

Além disso, você pode navegar por todos os logs de pod diretamente no Elastic.

Logs frontendService e cartService
Logs frontendService e cartService

No exemplo acima, fiz uma busca dos logs frontendService e cartService.

Etapa 5. Bônus!

Como estávamos usando uma aplicação baseada no OTel, o Elastic pode até extrair os traces da aplicação. Mas isso é assunto para outro post.

Vamos dar uma rápida olhada em como ficam os traces do Hipster Shop para uma transação de front-end no Elastic Observability.

Trace para transação de finalização de compra do Hipster Shop
Trace para transação de finalização de compra do Hipster Shop

Conclusão: o Elastic Observability é ótimo para monitoramento do Kubernetes

Espero que você tenha gostado de saber como o Elastic Observability pode ajudar você a gerenciar os clusters do Kubernetes junto com a complexidade dos dados de métricas, logs e traces que eles geram, mesmo para uma implantação simples.

Fazendo uma rápida recapitulação das lições, aprendemos o seguinte:

  • Como o Elastic Cloud pode agregar e ingerir dados de telemetria por meio do Elastic Agent, que é facilmente implantado no seu cluster como um DaemonSet e recupera métricas do host, como métricas do sistema, estatísticas do container e métricas de todos os serviços executados no Kubernetes
  • O que a Elastic traz de uma experiência de telemetria unificada (logs, métricas, traces do Kubernetes) em todos os componentes do cluster do Kubernetes (pods, nós, serviços, espaços de nome e muito mais).
  • É interessante explorar as funcionalidades de machine learning da Elastic, que reduzirão seu MTTHH (tempo médio até o happy hour)

Tudo pronto para começar? Cadastre-se e experimente os recursos e funcionalidades que descrevi acima.