Guia Prático: Configurando o Prometheus em um Cluster Kubernetes

Guia Prático: Configurando o Prometheus em um Cluster Kubernetes

Nesse artigo faremos um guia para configurar o Prometheus em um cluster Kubernetes. Essa configuração irá coletar métricas de nó, pods e serviços automaticamente usando um auto disconvery do Prometheus.

Explicar o Prometheus está fora do escopo deste artigo. Se você quiser saber mais sobre o Prometheus, clique aqui!

Arquitetura de Prometheus

A pilha de monitoramento Kubernetes Prometheus tem os seguintes componentes.

  1. Servidor Prometheus
  2. Alertmanager
  3. Grafana 

 

Observações: Iremos abordar o deploy dos outros componentes em outros posts!

 

Configuração de monitoramento do Prometheus no Kubernetes

Conecte-se ao cluster:

Conecte-se ao seu cluster Kubernetes e certifique-se de ter privilégios de administrador para criar funções de cluster. se você estiver usando o Google Cloud GKE, precisará executar os seguintes comandos, pois precisa de privilégios para criar funções de cluster para esta configuração do Prometheus.

ACCOUNT=$(gcloud info --format='value(config.account)') kubectl create clusterrolebinding owner-cluster-admin-binding \ --clusterrole cluster-admin \ --user $ACCOUNT

Prometheus Manifests

Todos os arquivos de configuração que mencionei neste post estão localizados em nosso Github.
Caso quiserem clonar o repositório, utilize o seguinte com o comando:

 git clone https://github.com/4linux/kube-prometheus-monitoring.git 

Criando uma namespace

Primeiro, criaremos uma namespace para todos os nossos componentes de monitoramento. Se você não criar uma namespace dedicada, todos os objetos de deployment do Kube Prometheus Monitoring serão implementados no namespace default.

 kubectl create namespace monitoring 

O Prometheus usa APIs do Kubernetes para ler todas as métricas disponíveis de nodes, pods, Deployments e etc. Por esse motivo, precisamos criar uma política RBAC com read accessos grupos de API necessários e vincular a política ao monitoring namespace.

Criando um ClusterRole

Crie um arquivo clusterRole.yaml

Você pode pegar o Raw do arquivo aqui.

Na função adicionamos get, list watch permissões para nós, terminais de serviços, pods e entradas. A vinculação de função é vinculada ao namespace de monitoramento. Se você tiver algum caso de uso para recuperar métricas de qualquer outro objeto, precisará adicioná-lo a essa função de cluster.

Crie a role com o seguinte comando 

kubectl create -f clusterRole.yaml

Criando uma ConfigMap

 

Crie um arquivo chamado config-map.yaml

Você pode pegar o Raw do arquivo aqui.

Todas as configurações principais do prometheus se localizam no arquivo prometheus.yaml e todas as rules do Alertmanager são localizadas no arquivo prometheus.rules .
Iremos usar a ConfigMap para a criação desses dois arquivos para depois montar no volume /etc/prometheus através do nosso arquivo de deployment.

Crie a ConfigMap com o seguinte comando

kubectl create -f config-map.yaml


Observações:
prometheus.yamlcontém todas as configurações para descobrir pods e serviços em execução no cluster Kubernetes através das seguintes targets

Criando uma ConfigMap 

  1. kubernets-apiservers: Faz a raspagem de todas as métricas dos APIs dos servidores
  2. kubernetes-nodes: Faz a raspagem de todas as métricas dos nodes kubernetes
  3. kubernetes-pods: Faz a raspagem de todas as métricas dos pods no kubernetes
  4. kubernetes-service-endpoints: todos os endpoints de serviço serão descartados se os metadados do serviço forem anotados com as anotações prometheus.io/scrape e prometheus.io/port. Ele pode ser usado para monitoramento da black-box.

Criando o Deployment

Crie um arquivo chamado prometheus-deployment.yaml

Você pode pegar o Raw do arquivo aqui.

Esse nosso deployment utiliza a imagem oficial do prometheus da hub Docker.

Observações: Nesse exemplo, não estamos utilizando nenhum volume persistente para o armazenamento do nosso Prometheus, devido a ser uma configuração básica.
Caso utilize essa confguração em produção, adicione um volume persistente nesse deployment.

Crie o deployment com o seguinte comando

kubectl create -f prometheus-deployment.yaml

Agora você pode verificar se o deployment está criado com o seguinte comando

kubectl get deployments -n monitoring

Expondo o Prometheus

Você pode visualizar o painel do Prometheus implantado de três maneiras diferentes.

  1. Usando o encaminhamento de porta Kubectl
  2. Expondo a implantação do Prometheus como um serviço com NodePort ou um Load Balancer.
  3. Adicionar um Ingress, caso tenha um controlador Ingress implantado.

Usando o encaminhamento de porta kubectl

Usando o encaminhamento de porta kubectl, você pode acessar seu pod localmente usando uma porta selecionada em seu localhost.
Este método é usado principalmente para fins de debug.

Primeiro: Verifique o nome do pod do Prometheus

kubectl get pods -n monitoring

a saída será semelhante a essa:

kubectl get deployments -n monitoring
NAME                                    READY   STATUS    RESTARTS AGE 
prometheus-monitoring-4linux6548-m0n17  1/1     Running       0    2m

execute o seguinte comando com o nome do seu pod para acessar o Prometheus da porta localhost 8080.

kubectl port-forward prometheus-monitoring-4linux6548-m0n17 -n monitoring

Observações: Não esqueça de substituir prometheus-monitoring-4linux6548-m0n17 pelo nome do seu pod.

Agora, se você acessar http://localhost:8080 pelo seu navegador, terá a página inicial do Prometheus.

Expondo o Prometheus como um serviço NodePort & LoadBalancer

Para acessar o frontend do Prometheus por um IPou um DNSnome, você precisa expô-lo como um serviço do Kubernetes.
Iremos expor o Prometheus na porta 30000 em todos os IPs dos nodes.

Crie um arquivo chamado prometheus-service.yaml

Você pode pegar o Raw do arquivo aqui.

 Observações: se você estiver no AWS, Azure ou Google Cloud, poderá usar o tipo Loadbalancer, que criará um balanceador de carga e o apontará automaticamente para o ponto de extremidade do serviço Kubernetes.

Crie o serviço usando o seguinte comando

kubectl create -f prometheus-service.yaml

Após a criação, você pode acessar o forntend do Prometheus usando qualquer um dos IPs do node na porta 30000. Se você estiver na nuvem, certifique-se de ter as regras de firewall corretas para acessar a porta 30000

agora, se você navegar até status – Targets, verá todos os endpoints do Kubernetes conectados ao Prometheus automaticamente usando a descoberta de serviço,

expondo o Prometheus usando o Ingress

Se no caso você tiver um ingress controller no seu cluster, poderá criar um objeto ingress  para o rotear o DNS do prometheus para o serviço back-end.

Além disso, você também pode adiconar um SSL para o Prometheus na camada de entrada.

Crie um arquivo chamado prometheus-ingress.yaml

Você pode pegar o Raw do arquivo aqui.

Crie o ingress usando o seguinte comando

kubectl create -f prometheus-ingress.yaml

Agora você pode acessar o Prometheus através de seu navegador utilizando o seu ingress

Conclusão

Nessa primeira parte do post de abordamos sobre a configuração de um dos componentes de monitoramento opensource para a coleta de métricas de aplicações e serviços para armazenamento em um banco de dados de séries temporais. O Prometheus tem uma linguagem e configurações de configuração complexas, então apenas tratamos o básico de sua gama de configurações. Embora o Prometheus seja uma ferramenta poderosa, pode ser um desafio configurá-lo e executá-lo sem um bom conhecimento da linguagem e configuração específicas. Para os demais componentes, acompanhem os próximos posts, onde abordaremos como fazer o deploy de um serviço de métricas do cluster kubernets e um serviço de métricas a nível de sistema linux de todos os nodes do kubernetes.

 

Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:

CURSOSCONSULTORIA

Anterior 4Linux se une ao Google Cloud: Infraestrutura open source na nuvem
Próxima Como montar seu próprio Registry Privado com Harbor

About author

João Pedro Santos
João Pedro Santos 3 posts

Linux Sysadmin que ama desafios, com experiência em troubleshooting em ambiente opensource e aplicações web. Focado em administração de infraestrutura em Nuvem, Software de código aberto, Monitoramento e Devops. Entusiasta da tecnologia e consultor de T.I. Linkedin: https://www.linkedin.com/in/joaopmdds/

View all posts by this author →

Você pode gostar também

Infraestrutura TI

Entenda a importância da observabilidade em suas aplicações

Saber o comportamento de nossas aplicações tornou-se primordial, mas o comportamento não se resume apenas a saber se a aplicação está funcionando ou se a aplicação está com todas as

Desenvolvimento

Integração de Chat Funcional com Ferramenta Rocket.Chat: Passo a Passo

Dando continuidade o nosso post anterior onde entendemos como utilizar as APIs do Rocket.Chat para manipular o Omnichannel, agora iremos integrar um chat funcional com essa ferramenta. Irei partir do

Desenvolvimento

Descubra os benefícios e vantagens do Zend Framework 2 para desenvolvimento PHP

Se você está lendo este artigo provavelmente você ja desenvolveu ou pretende desenvolver algum projeto de software, talvez você nunca tenha usado um framework antes por isso acho necessário uma