Programa Intensivo em Containers e Kubernetes
  • Ínicio
  • Projeto final do Programa Intensivo de Formação em Containers e Kubernetes
  • Criando um container com o Docker
  • Orquestrando containers com Kubernetes
  • Política como código com Kyverno
  • Gerenciando o ciclo de vida de aplicações com Helm
  • Cosign: Garantindo a confiabilidade das nossas imagens
  • Monitorando nosso gerador de senhas com Prometheus e Grafana
  • Construindo uma imagem com uma única camada
Powered by GitBook
On this page
  • Definição dos objetos
  • Instalando o Prometheus e o Grafana
  • Acessando o Prometheus
  • Acessando o Grafana
  • Criando um service monitor e um pod monitor
  • Criando um alerta no Prometheus com o Alertmanager
  • Integrando o Alertmanager com o Grafana
  • Observação

Monitorando nosso gerador de senhas com Prometheus e Grafana

No Kubernetes o Prometheus coleta métricas do Kubernetes de várias maneiras:

  • Exportadores: O Prometheus utiliza exportadores para coletar métricas de diferentes componentes do Kubernetes, como:

  • kube-state-metrics: Coleta métricas sobre o estado dos objetos do Kubernetes, como Pods, Nós, Deployments, etc.

  • node-exporter: Coleta métricas sobre o hardware e sistema operacional dos nós do Kubernetes.

  • Endpoints de métricas: Alguns componentes do Kubernetes, como o API server, controller manager e scheduler, expõem seus próprios endpoints de métricas que o Prometheus pode scrape diretamente.

  • Descoberta de serviço: O Prometheus utiliza a descoberta de serviço do Kubernetes para encontrar automaticamente os alvos (targets) a serem monitorados, como Pods e Serviços.

  • Regras de alerta: O Prometheus permite definir regras de alerta com base nas métricas coletadas, que podem ser usadas para notificar sobre problemas no cluster Kubernetes.

Então, em resumo, o Prometheus utiliza uma combinação de exportadores, endpoints de métricas e descoberta de serviço para coletar as métricas do Kubernetes de forma abrangente e automatizada.

O Prometheus utiliza uma combinação de exportadores, endpoints de métricas e descoberta de serviço para coletar as métricas do Kubernetes de forma abrangente e automatizada.

Em nosso projeto criamos dois objetos Kubernetes, o PodMonitor e o ServiceMonitor para monitorar a nossa aplicação.

Definição dos objetos

Instalando o Prometheus e o Grafana

Para fazer a instalação do Prometheus use os comandos abaixo:

git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus
kubectl create -f manifests/setup
kubectl create -f manifests/

Acessando o Prometheus

kubectl get service -n monitoring

kubectl port-forward -n monitoring service/prometheus-k8s 9090:9090

Acessando o Grafana

kubectl port-forward -n monitoring service/grafana 3000:3000

Por padrão a senha e o usuário do Grafana é admin, posteriormente será solicitada a troca de senha. Foram criados manifestos de ingress para acessar o Prometheus e o Grafana, disponíveis na pasta /monitoring.

As aplicações estão acessíveis através dos seguintes endereços:

Criando um service monitor e um pod monitor

Para monitorar a nossa aplicação, criamos um ServiceMonitor e um PodMonitor. O ServiceMonitor monitora os serviços da aplicação e o PodMonitor monitora os pods da aplicação. As definições dos objetos estão disponíveis na pasta /monitoring.

O nosso ServiceMonitor monitora o serviço giropops-senhas no namespace giropops-senhas:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app: giropops-senhas
  name: sm-giropops-senhas
  namespace: giropops-senhas
spec:
  endpoints:
  - port: tcp-app
  selector:
    matchLabels:
      app: giropops-senhas

O nosso PodMonitor monitora os pods do deployment giropops-senhas no namespace giropops-senhas:

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  labels:
    app: giropops-senhas
  name: pd-giropops-senhas
  namespace: giropops-senhas
spec:
  selector:
    matchLabels:
      app: giropops-senhas
  podMetricsEndpoints:
  - port: tcp-app

Para encontrar o service e o pod corretos o Prometheus utiliza o selector e o port definidos no ServiceMonitor e no PodMonitor.

Para verificar se o Prometheus começou a monitorar a aplicação, acesse a aba Status do Prometheus e verifique se o ServiceMonitor e o PodMonitor estão aparecendo na lista de Service Discovery.

Vamos aplicar os manifestos:

cd monitoring
kubectl apply -f service-monitor.yaml -n giropops-senhas
kubectl apply -f pod-monitor.yaml -n giropops-senhas

Criando um alerta no Prometheus com o Alertmanager

Para criar um alerta no Prometheus, precisamos definir uma regra de alerta e configurar o Alertmanager para enviar notificações. Vamos criar um alerta para monitorar caso o nosso deployment fique fora do ar por mais de 1 minuto.

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: giropops-senhas-rules
  namespace: monitoring
  labels:
    app.kubernetes.io/name: prometheus
spec:
  groups:
  - name: giropops-senhas
    rules:
    - alert: GiropopsSenhasDown
      expr: up{namespace="giropops-senhas", app="giropops-senhas"} == 0
      for: 1m
      labels:
        severity: critical
      annotations:
        summary: "A aplicação Giropops Senhas está fora do ar"
        description: "A aplicação Giropops Senhas no namespace giropops-senhas está fora do ar por mais de 1 minutos."

Vamos aplicar o manifesto:

kubectl apply -f prometheus-rule.yaml -n monitoring

É possível visualizar o alerta no Prometheus, acessando a aba Alerts do Prometheus.

Integrando o Alertmanager com o Grafana

Para integrar o Alertmanager com o Grafana, precisamos configurar Alertmanager como datasource no Grafana e criar um painel para exibir os alertas. Siga os passos abaixo:

  1. No menu lateral clique em Configuration > Data Sources.

  2. Clique em Add data source.

  3. Selecione Alertmanager como tipo de data source.

  4. Dê um nome para a nova data source, por exemplo Alertmanager.

  5. Selecione a Implementation como Prometheus e habilite a opção Receive Grafana alerts para receber os alertas do Grafana no Alertmanager.

  6. Configure o endereço do Alertmanager como http://alertmanager-main.monitoring.svc.cluster.local:9093. Estamos usando o DNS interno do Kubernetes para fazer a conexão entre o Grafana e o Alertmanager. O tipo de Access deve ser Server.

  7. Clique em Save & Test para salvar a data source.

Agora é possível visualizar os alertas do Prometheus no Grafana. Acesse Alerting > Alerts rules e procure pelo nome do alerta GiropopsSenhasDown. Clique no botão Create Alert para criar um painel com o alerta.

Observação

No painel status da aplicação usamos a opção de Value mapping para mapear os valores de up para 1 e 0 para up e down, respectivamente. Isso permite exibir o status da aplicação como up ou down no painel.

A query usada para o painel status da aplicação é up{namespace="giropops-senhas", app="giropops-senhas"}.

PreviousCosign: Garantindo a confiabilidade das nossas imagensNextConstruindo uma imagem com uma única camada

Last updated 8 months ago

Prometheus:

Grafana:

Acesse o Grafana em e faça login com o usuário admin e a senha definida anteriormente.

A dashboard está acessível em

https://prom.nataliagranato.xyz/
https://grafana.nataliagranato.xyz
https://grafana.nataliagranato.xyz
Painel do Grafana