Painéis Grafana para administração do Kubernetes

Olá pessoal! Hoje, continuamos a compartilhar material traduzido especificamente para os alunos do curso da Plataforma de Infraestrutura baseado em Kubernetes . Boa leitura.



1. Introdução




Há já algum tempo que experimentei criar painéis da Grafana para administrar o Kubernetes. Como proprietário e administrador de vários clusters do Kubernetes, eu queria obter uma representação visual de algumas das métricas. Primeiro, preciso dos painéis normais da Grafana para os componentes Kubernetes Control Plane e Node: kube-api, kube-scheduler, kube-controller-manager, assim como kubelet e kube-proxy . Em segundo lugar, gostaria de postar os painéis resultantes no GitHub para que outros possam deixar sugestões e relatórios de erros (problemas), enviar solicitações de alterações (solicitações de recebimento), atualizar painéis (git pull) e me ajudar a trabalhar neles.

Publicar painéis Grafana


Os painéis Grafana agora são publicados principalmente em grafana.com/dashboards . Para obter o painel desejado, você precisa encontrá-lo na página, copiar o identificador e importá-lo para a instância local do Grafana. Embora a importação de painéis seja relativamente simples, a experiência mostra que a maioria dos usuários acha inconveniente trabalhar com eles. Existem várias razões para isso.

Primeiro, as pessoas usam seletores de tags diferentes para indicar metas de monitoramento no Prometheus. Em segundo lugar, nas novas versões dos exportadores do Prometheus e nos aplicativos para acessar métricas, os nomes das métricas são alterados e excluídos constantemente. Em terceiro lugar, é extremamente difícil encontrar painéis de alta qualidade - você nunca sabe o que obterá após a importação. Depois de selecionar o painel, você deve vasculhar todos os gráficos e editar as métricas, juntamente com os seletores das etiquetas - e isso é uma grande quantidade de trabalho manual.

Projeto Monitorando Mixins


Eu encontrei um projeto muito legal chamado Monitoring Mixins. De fato, esse é um tipo de ecossistema projetado para superar todos os problemas do painel dolorido. A idéia veio de Frederic Branczyk, e foi ele quem escreveu o documento de design original , que eu recomendo fortemente que você leia. Além disso, ele pensou em um mecanismo real para atualizar painéis e extraí-los de vários repositórios do GitHub. Esse mecanismo é muito parecido com o de go get , e eu realmente gostei. Aqui você pode ler uma breve descrição do gerenciador de pacotes jsonnet-bundler usando esse mecanismo. Muito obrigado a Frederick pelos desenvolvimentos úteis!

Pacote Kubernetes Grafana Mixin


Se você ler este lugar, poderá fazer uma pausa e apreciar as belas fotos.

Servidor API



Painel do servidor da API Kubernetes

Gerente de controlador



Painel do Kubernetes Controller Manager

Planejador



Painel do Agendador do Kubernetes

Kublet (agente do nó)



Painel Kubernetes Cublet


Painel Kubernetes Cublet

Proxy Kube



Painel Proxy do Kube

Usando o Kubernetes Grafana Mixin


Primeiro você precisa instalar o jsonnet e o jsonnet-bundler .

Jsonnet


Se você estiver usando o macOS, poderá usar o brew install jsonnet . Caso contrário, é melhor compilar você mesmo esse componente.

 git clone https://github.com/google/jsonnet.git jsonnet_git cd jsonnet_git make sudo mv jsonnet /usr/local/bin/ 

Empacotador Jsonnet


 go get -u github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb 

Painéis de importação


Crie um novo diretório para o projeto e digite-o com o cd .

Instale o mixin :

 jb init jb install https://github.com/povilasv/kubernetes-grafana-mixin 

Agora crie um novo arquivo config.libsonnet .

 local kubedashboards = import 'kubernetes-grafana-mixin/mixin.libsonnet'; kubedashboards { _config+:: { kubeletSelector: 'job="kubernetes-nodes2"', kubeSchedulerSelector: 'job="kube-scheduler2"', kubeControllerManagerSelector: 'job="kube-controller-manager2"', kubeApiserverSelector: 'job="kube-apiserver2"', kubeProxySelector: 'job="kube-proxy2"', }, } 

Depois disso, o painel de informações é importado e os seletores de trabalhos são substituídos.
Corrija os seletores de tags do Prometheus para se adequar ao seu ambiente.
Agora crie o diretório de dashboards . Por fim, execute o jsonnet para compilar o config.libsonnet :

 jsonnet -J vendor -m dashboards -e '(import "config.libsonnet").grafanaDashboards' 

Você verá a seguinte lista:

 dashboards/kube-apiserver.json dashboards/kube-controller-manager.json dashboards/kube-proxy.json dashboards/kube-scheduler.json dashboards/kubelet.json 

Resultado


Exiba o conteúdo do catálogo do painel.

 ls -l dashboards 

 -rw-r--r-- 1 povilasv povilasv 35746 Apr 26 08:29 kube-apiserver.json -rw-r--r-- 1 povilasv povilasv 34790 Apr 26 08:29 kube-controller-manager.json -rw-r--r-- 1 povilasv povilasv 62845 Apr 26 08:29 kubelet.json -rw-r--r-- 1 povilasv povilasv 27673 Apr 26 08:29 kube-proxy.json -rw-r--r-- 1 povilasv povilasv 25650 Apr 26 08:29 kube-scheduler.json 

Adicionando painéis ao Grafana


Eu já disse que recomendo colocar painéis nos arquivos de configuração. Você pode aprender mais sobre como isso é feito na documentação do Grafana .

Por outro lado, nada impede que você abra a interface Grafana e adicione painéis nela.

Atualizar painéis


Com o tempo, os painéis serão alterados. Para atualizá-los, o seguinte comando é suficiente:

 jb update 

Isso é tudo por hoje.

Espero que você goste dos meus painéis. Em um artigo separado, falarei sobre como os criei e por que os fiz dessa maneira, portanto, assine as atualizações. Os assinantes veem meu trabalho primeiro, mesmo antes da publicação.

Também estou extremamente interessado nos seus comentários. Se você usou meus painéis, avalie o quanto eles foram úteis para você ou compartilhe se eles o ajudaram em uma situação de trabalho real. Apenas deixe um comentário!

A propósito, se você quiser me agradecer por meus esforços, pode olhar para minha lista de desejos aberta e me comprar, por exemplo, um bom livro.

Eu realmente aprecio projetos de código aberto de qualidade. O pacote kubernetes-grafana-mixin está disponível sob uma licença de licenciamento Apache 2 . Se você gostou do projeto, confira no Github!

Source: https://habr.com/ru/post/pt456946/


All Articles