DEV Community

Celso Nery
Celso Nery

Posted on

Kubernetes: Monitorando o Cluster com Prometheus

🇺🇸 English version here.

Depois que um cluster Kubernetes está em operação, monitorar o que está acontecendo dentro dele — uso de CPU e memória, número de réplicas ativas, latência das aplicações — deixa de ser opcional. O Prometheus é hoje o padrão de fato para monitoramento no ecossistema Kubernetes: um banco de dados de séries temporais que coleta métricas periodicamente (modelo pull) e permite consultá-las e alertar sobre elas.

Neste artigo, mostro como instalar o Prometheus em um cluster on-premise usando Helm, e como preparar suas próprias aplicações para serem monitoradas por ele.

Pré-requisitos

Antes de instalar o Prometheus, confirme que você já tem:

  1. Helm instalado (veja o artigo específico sobre isso, se ainda não tiver);
  2. O Metrics Server instalado e funcionando — confirme com:
kubectl top nodes
Enter fullscreen mode Exit fullscreen mode

Se o comando retornar dados de uso de CPU e memória dos nós, o cluster já tem uma fonte básica de métricas ativa.

Instalando o Prometheus via Helm

Os charts do Prometheus (assim como de praticamente qualquer ferramenta popular do ecossistema Kubernetes) estão disponíveis no Artifact Hub — o principal repositório centralizado de charts Helm da comunidade.

1. Adicione o repositório oficial da comunidade Prometheus:

$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo update
Enter fullscreen mode Exit fullscreen mode

Para conferir os repositórios já adicionados ao Helm:

$ helm repo list
Enter fullscreen mode Exit fullscreen mode

2. Exporte os valores padrão do chart, para poder customizá-los antes de instalar:

$ helm show values prometheus-community/prometheus > prometheus-values.yaml
Enter fullscreen mode Exit fullscreen mode

Esse arquivo prometheus-values.yaml contém todas as opções configuráveis do chart — tipo de Service, recursos (CPU/memória), retenção de dados, entre muitas outras. Vale revisar (ou ao menos dar uma passada de olhos) antes de instalar, ajustando o que fizer sentido para o seu ambiente — por exemplo, mudando o tipo de exposição do serviço para NodePort, como veremos a seguir.

3. Instale o chart, usando o arquivo de valores customizado:

$ helm install prometheus prometheus-community/prometheus --values prometheus-values.yaml
Enter fullscreen mode Exit fullscreen mode

Sobre o kube-state-metrics

Vale destacar que o chart prometheus-community/prometheus já instala automaticamente, como subchart, o kube-state-metrics — componente responsável por expor métricas sobre o estado dos objetos do Kubernetes (número de pods desejados vs. disponíveis, status de Deployments, uso de recursos por namespace, etc.), complementando as métricas de infraestrutura já coletadas via Metrics Server. Ou seja, ao instalar o Prometheus pelo Helm dessa forma, você não precisa criar manualmente os manifestos de ServiceAccount, ClusterRole, ClusterRoleBinding, Deployment e Service do kube-state-metrics — o chart já resolve isso.

Acessando o Prometheus

Dependendo de como o Service foi exposto no prometheus-values.yaml (por exemplo, via NodePort), o Prometheus fica acessível por uma URL como:

https://adm.bagarote.com.br:30001
Enter fullscreen mode Exit fullscreen mode

E o endpoint de métricas cru (usado internamente pelo próprio Prometheus, mas também consultável manualmente para debug):

https://adm.bagarote.com.br:30001/metrics
Enter fullscreen mode Exit fullscreen mode

Os valores de host e porta acima são apenas exemplo — ajuste para o endereço real do seu cluster e a porta definida no values.yaml.

Habilitando o monitoramento em suas aplicações

Por padrão, o Prometheus não sabe automaticamente quais pods ele deve monitorar. A forma mais simples de indicar isso — usada nesta configuração — é através de annotations no manifesto da aplicação:

spec:
  template:
    metadata:
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/path: /metrics
        prometheus.io/port: "8080"
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: minhaempresa/api:1.0.0
          ports:
            - containerPort: 8080
Enter fullscreen mode Exit fullscreen mode

Essas annotations dizem ao Prometheus:

  • prometheus.io/scrape: "true": que este pod deve ser monitorado;
  • prometheus.io/path: o caminho onde a aplicação expõe suas métricas (por convenção, /metrics);
  • prometheus.io/port: a porta onde esse endpoint de métricas está disponível.

Para que isso funcione, a própria aplicação precisa expor um endpoint /metrics no formato que o Prometheus entende — geralmente através de uma biblioteca cliente específica da linguagem usada (por exemplo, micrometer para aplicações Java/Spring Boot, ou prom-client para Node.js).

Considerações finais

Com o Prometheus instalado e as aplicações anotadas corretamente, o cluster já passa a ter uma base sólida de métricas — tanto de infraestrutura quanto de aplicação. Esse é o primeiro passo natural antes de configurar visualizações mais amigáveis (com Grafana, tema do próximo artigo desta série de addons) e, eventualmente, alertas automáticos baseados nessas métricas.

Top comments (0)