Pré-requisitos
Conforme mencionado em Parte 1 do blog, precisamos executar o Prometheus e o Grafana no ambiente Kubernetes em nosso Amazon EKS. A maneira recomendada é usar o Kube-Prometheusum projeto de código aberto. Isso não apenas simplificará a implantação, mas também adicionará muito mais componentes, como o Exportador de nós do Prometheus que monitora as métricas do host Linux e é normalmente usado em um ambiente Kubernetes.
Clonar o https://github.com/coreos/kube-prometheus do Github, mas não crie nenhum manifesto ainda.
Componentes incluídos neste pacote:
- O Operador do Prometheus
- Altamente disponível Prometeu
- Altamente disponível Gerenciador de alertas
- Exportador de nós do Prometheus
- Adaptador Prometheus para APIs de métricas do Kubernetes
- métricas do estado do cubo
- Grafana
1 2 3 4 5 6 |
➜ cubo-prometeu git:(mestre) ✗ ls DCO LEIAME.md exemplos jsonnet roteiros LICENÇA construir.sh experimental jsonnetfile.json sincronização-para-interno-registro.jsonnet Arquivo de criação código-de-conduta.md ir.mod jsonnetfile.trava.json teste.sh AVISO documentos ir.soma personalização.yaml testes PROPRIETÁRIOS exemplo.jsonnet hack manifestos |
Observação:
Este tutorial funciona com base no fato de que os manifestos que trazem os recursos relevantes para o Prometheus Operator ainda estão localizados na pasta manifestos.
Caso tenham sido feitas alterações, faça os devidos ajustes, pois o repositório é experimental e está sujeito a alterações.
Criar o Couchbase ServiceMonitor
O ServiceMonitor diz ao Prometheus para monitorar um recurso de serviço que define os pontos de extremidade que o Prometheus coleta para obter métricas de entrada fornecidas pelo couchbase-exporter. Esse arquivo,couchbase-serviceMonitor.yamldeve ser kube-prometheus/manifests diretório.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Versão da API: monitoring.coreos.com/v1 gentil: ServiceMonitor metadados: nome: couchbase espaço de nomePadrão: # <1> rótulos: aplicativo: couchbase especificação: pontos finais: - porto: métricas # <2> intervalo: 5s # <3> namespaceSelector: matchNames: - padrão # seletor: matchLabels: aplicativo: couchbase # <5> |
Legenda:
- Talvez você queira incluir nosso Couchbase
Monitor de serviço
nomonitoramento
juntamente com o outro namespaceMonitores de serviço
. Para os exemplos deste tutorial, deixamos apenas nopadrão
para facilitar o uso. - O
porto
pode ser um valor de cadeia de caracteres e funcionará para diferentes números de porta do serviço, desde que o nome corresponda. intervalo
informa ao Prometheus a frequência com que o endpoint deve ser analisado. Aqui, queremos fazer a correspondência com o namespace doServiço
que estaremos criando na próxima etapa,- Observe que o namespace our
Serviço
será executado deve ser o mesmo namespace do cluster do Couchbase do qual desejamos extrair métricas. - Semelhante ao
namespaceSelector
, este é um simpleslabelSelector
que selecionará o serviço que estaremos criando.
Criar o serviço de métricas do Couchbase
O Serviço
definirá a porta que descrevemos em nosso ServiceMonitor em spec.endpoint[0].port
anteriormente. seu arquivo,couchbase-service.yamldeve ser kube-prometheus/manifests diretório.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Versão da API: v1 gentil: Serviço metadados: nome: couchbase-metrics espaço de nomePadrão: # <1> rótulos: aplicativo: couchbase especificação: portos: - nome: métricas porto: 9091 # <2> protocolo: TCP seletor: aplicativo: couchbase cluster de base de sofá: cb-example # <3> |
Legenda:
- Conforme mencionado anteriormente, certifique-se de que o
Serviço
esteja no mesmo namespace que o cluster do Couchbase do qual você deseja extrair métricas; caso contrário, nenhum pod será selecionado e nenhum endpoint será exibido no Prometheus Targets. Certifique-se também de que esse valor corresponda aspec.namespaceSelector
noMonitor de serviço
. - Mantenha essa porta como seu valor padrão de 9091, pois essa é a porta para a qual o Couchbase Exporter exportará.
- Um nível adicional de granularidade ao seu seletor pode ser adicionado no caso de você ter mais de um cluster do Couchbase em execução no mesmo namespace.
Descoberta do Prometheus Dynamic Service
O Prometheus descobre os pontos de extremidade de monitoramento dinamicamente, fazendo a correspondência entre os rótulos no ServiceMonitor e os serviços que especificam o cluster e os pontos de extremidade, a porta 9091 em nosso caso.
Criar os Manifestos
Siga o comando específico fornecido no LEIAME do Github para exibir nossos recursos criados junto com os outros manifestos padrão fornecidos.
Componentes como Prometheus, AlertManager, NodeExporter e Grafana devem então ser inicializados e podemos confirmar isso inspecionando os pods no namespace monitoramento
.
Vamos começar.
Crie o namespace e os CRDs do Kubernetes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
cubo-prometeu git:(mestre) $ kubectl criar -f manifestos/configuração espaço de nome/monitoramento criado definição de recursos personalizados.apiextensões.k8s.io/gerentes de alerta.monitoramento.coreos.com criado definição de recursos personalizados.apiextensões.k8s.io/monitores de pod.monitoramento.coreos.com criado definição de recursos personalizados.apiextensões.k8s.io/Prometeus.monitoramento.coreos.com criado definição de recursos personalizados.apiextensões.k8s.io/prometheusrules.monitoramento.coreos.com criado definição de recursos personalizados.apiextensões.k8s.io/monitores de serviços.monitoramento.coreos.com criado definição de recursos personalizados.apiextensões.k8s.io/thanosrulers.monitoramento.coreos.com criado papel de agrupamento.rbac.autorização.k8s.io/prometeu-operador criado aglutinação de papéis.rbac.autorização.k8s.io/prometeu-operador criado implantação.aplicativos/prometeu-operador criado serviço/prometeu-operador criado conta de serviço/prometeu-operador criado |
Aguarde alguns minutos antes da próxima etapa, mas pode ser necessário executar o comando várias vezes para que todos os componentes sejam criados com êxito.
Criar os recursos restantes
1 2 3 4 5 6 7 8 9 10 11 |
cubo-prometeu git:(mestre) $ kubectl criar -f manifestos/ gerenciador de alertas.monitoramento.coreos.com/principal criado segredo/gerenciador de alertas-principal criado serviço/gerenciador de alertas-principal criado conta de serviço/gerenciador de alertas-principal criado monitor de serviços.monitoramento.coreos.com/gerenciador de alertas criado serviço/couchbase-métricas criado monitor de serviços.monitoramento.coreos.com/couchbase criado ... monitor de serviços.monitoramento.coreos.com/cubeta criado |
Verificar os namespaces de monitoramento
Componentes como Prometheus, AlertManager, NodeExporter e Grafana devem então ser inicializados e podemos confirmar isso inspecionando os pods no namespace monitoramento
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ kubectl obter cápsulas -n monitoramento NOME PRONTO STATUS RESTARTS IDADE gerenciador de alertas-principal-0 2/2 Em execução 0 69m gerenciador de alertas-principal-1 2/2 Em execução 0 69m gerenciador de alertas-principal-2 2/2 Em execução 0 69m grafana-75d8c76bdd-4l284 1/1 Em execução 0 69m cubo-estado-métricas-54dc88ccd8-nntts 3/3 Em execução 0 69m nó-exportador-pk65z 2/2 Em execução 0 69m nó-exportador-s9k9n 2/2 Em execução 0 69m nó-exportador-vhjpw 2/2 Em execução 0 69m prometeu-adaptador-8667948d79-vfcbv 1/1 Em execução 0 69m prometeu-k8s-0 3/3 Em execução 1 69m prometeu-k8s-1 3/3 Em execução 0 69m prometeu-operador-696554666f-9cnnv 2/2 Em execução 0 89m |
Verifique se o ServiceMonitor foi criado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ kubectl obter monitores de serviços --todos-Espaços de nomes NAMESPACE NOME IDADE padrão couchbase 2m33s monitoramento gerenciador de alertas 2m33s monitoramento coredns 2m22s monitoramento grafana 2m26s monitoramento cubo-apiserver 2m22s monitoramento cubo-controlador-gerente 2m22s monitoramento cubo-programador 2m21s monitoramento cubo-estado-métricas 2m25s monitoramento cubeta 2m21s monitoramento nó-exportador 2m25s monitoramento prometeu 2m22s monitoramento prometeu-operador 2m23s |
Verifique se o nosso serviço foi criado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ kubectl obter serviço --todos-Espaços de nomes NAMESPACE NOME PORTO(S) padrão cb-exemplo 8091/TCP,8092/TCP,8093/TCP, padrão cb-exemplo-srv 11210/TCP,11207/TCP padrão couchbase-métricas 9091/TCP padrão couchbase-operador 8080/TCP,8383/TCP padrão couchbase-operador-admissão 443/TCP padrão kubernetes 443/TCP cubo-sistema cubo-dns 53/UDP,53/TCP cubo-sistema cubeta 10250/TCP,10255/TCP,4194/TCP,... monitoramento gerenciador de alertas-principal 9093/TCP monitoramento gerenciador de alertas-operado 9093/TCP,9094/TCP,9094/UDP monitoramento grafana 3000/TCP monitoramento cubo-estado-métricas 8443/TCP,9443/TCP monitoramento nó-exportador 9100/TCP monitoramento prometeu-adaptador 443/TCP monitoramento prometeu-k8s 9090/TCP monitoramento prometeu-operado 9090/TCP monitoramento prometeu-operador 8443/TCP |
Na saída acima, vemos não apenas os serviços, mas também as portas. Usaremos essas informações para encaminhar essas portas, como fizemos com a interface do usuário de administração do Couchbase, para acessar esses serviços.
Para verificar se tudo está funcionando corretamente com a implantação do Prometheus Operator, execute o seguinte comando para visualizar os registros:
1 |
$ kubectl registros -f implantações/prometeu-operador -n monitoramento prometeu-operador |
Encaminhamento de portas
Já encaminhamos a porta 8091 da interface de usuário de administração do Couchbase de um nó do Couchbase anteriormente, mas estou apresentando isso novamente, desta vez do ponto de vista do serviço.
Além dessa porta, na verdade precisamos apenas do acesso ao serviço Grafana, a porta 3000. No entanto, vamos acessar a porta 9090 do serviço Prometheus também. Em seguida, podemos dar uma olhada em todas as métricas dos diferentes exportadores e experimentar um pouco de PromQL, a Prometheus Query Language.
Agora, os três itens acima devem ser suficientes. No entanto, há algumas vantagens adicionais em dar uma olhada nas métricas de cada serviço individual também. O exportador do Couchbase expõe as métricas do Couchbase na porta 9091. Portanto, podemos encaminhar essas portas também. Observe que você realmente precisa apenas de acesso ao Grafana.
1 2 3 4 5 6 |
kubectl --espaço de nome padrão porto-avançar serviço/cb-exemplo 8091 & kubectl --espaço de nome monitoramento porto-avançar serviço/prometeu-k8s 9090 & kubectl --espaço de nome monitoramento porto-avançar serviço/grafana 3000 & kubectl --espaço de nome monitoramento porto-avançar serviço/gerenciador de alertas-principal 9093 & kubectl --espaço de nome monitoramento porto-avançar serviço/nó-exportador 9100 & kubectl --espaço de nome padrão porto-avançar serviço/couchbase-métricas 9091 & |
Confira os alvos da Prometheus
Acesso: http://localhost:9090/targets
Todos os alvos do Prometheus devem ser UP. Há muitos deles, pois o Kube-Prometheus implantou vários exportadores.
Confira as métricas brutas do Couchbase
Acesso: http://localhost:9091/metrics
1 2 3 4 5 6 7 8 9 10 11 12 |
# HELP cbbucketinfo_basic_dataused_bytes basic_dataused # TYPE cbbucketinfo_basic_dataused_bytes gauge cbbucketinfo_basic_dataused_bytes{balde="travesseiro"} 1.84784896e+08 cbbucketinfo_basic_dataused_bytes{balde="amostra de viagem"} 1.51648256e+08 # AJUDA cbbucketinfo_basic_diskfetches basic_diskfetches # TYPE cbbucketinfo_basic_diskfetches gauge cbbucketinfo_basic_diskfetches{balde="travesseiro"} 0 cbbucketinfo_basic_diskfetches{balde="amostra de viagem"} 0 # HELP cbbucketinfo_basic_diskused_bytes basic_diskused # TYPE cbbucketinfo_basic_diskused_bytes gauge cbbucketinfo_basic_diskused_bytes{balde="travesseiro"} 1.98967788e+08 cbbucketinfo_basic_diskused_bytes{balde="amostra de viagem"} 1.91734038e+08 |
Essa saída é útil porque você pode pesquisar rapidamente na lista.
Experimente uma consulta PromQL básica
Na interface do usuário acima, clique em Gráfico Primeiro.
A caixa suspensa fornece a lista de métricas extraídas. Essa é a lista completa de todos as métricas coletadas por todos os exportadores e essa é uma lista bastante assustadora. Um método para restringir a lista apenas às métricas do Couchbase é, obviamente, acessar o endpoint 9091, conforme descrito anteriormente.
Confira o Grafana
Acesso: http://localhost:3000
O nome de usuário e a senha são: admin/admin
A implantação do Grafana no kube-prometheus já tem a fonte de dados do Prometheus definida e um grande conjunto de Painéis padrão. Vamos dar uma olhada no Painel de controle do nó padrão
Criar um painel Grafana de amostra para monitorar as métricas do Couchbase
Não criaremos um painel completo, mas uma pequena amostra com alguns painéis para mostrar como isso é feito. Esse painel monitorará o número de itens em um bucket e o número de operações GET e SET.
Observação: Tenha o aplicativo pillow-fight em execução, conforme descrito na Parte 1. Isso gerará as operações que estamos interessados em monitorar.
Métricas da Prometheus
Acesso: http://localhost:9091/gráfico
Estamos interessados nos itens atuais em um bucket. Há duas métricas que fornecem isso: por cluster e por nó. Vamos usar a métrica por nó. Assim, permitiremos que o Prometheus manipule todas as agregações, de acordo com as práticas recomendadas. Outra vantagem é que podemos até mesmo mostrar os itens atuais no bucket, por nó, apenas para verificar se nosso conjunto de dados está distorcido.
Vamos dar uma olhada em um elemento:
1 |
cbpernodebucket_curr_items{balde="travesseiro",ponto final="métricas",instância="192.168.2.93:9091",trabalho="couchbase-metrics",espaço de nome="default",nó="cb-example-0000.cb-example.default.svc:8091",cápsula="cb-example-0000",serviço="couchbase-metrics"} |
No exemplo acima, estamos interessados nesses rótulos: balde, parte de nó (a parte do meio, cb-exemplo que é o nome do cluster, e cápsula. Também estamos interessados em serviço para filtrar. Isso nos ajudará a projetar um painel no qual poderemos visualizar as métricas por bucket, nó ou cluster.
O painel de amostra
Vamos criar um novo painel de amostra em branco.
Adição de variáveis
Como queremos as métricas por bucket, nó e cluster, vamos adicionar essas variáveis para que possam ser selecionadas em uma caixa suspensa.
O exemplo acima cria a variável bucket. Observe a expressão Query e Regex.
Vamos criar mais 2 para que tenhamos 3 variáveis:
A consulta não muda para esses 3, mas aqui estão as expressões Regex:
1 2 3 4 5 |
Consulta: {serviço="couchbase-metrics"} $nó: Regex= .*cápsula="(.*?)".* $balde: Regex= .*balde="(.*?)".* $agrupamento: Regex=.*nó=\".*\.(.*)\..*\..*:8091\".* |
Criando um painel
Criar 3 painéis para itens atuais, GETs e SETs
Você pode duplicar cada painel e editá-los. Estas são as consultas:
Painel de itens: sum(cbpernodebucket_curr_items{bucket=~"$bucket",pod=~"$node"}) by (bucket)
GETs Panel: sum(cbpernodebucket_cmd_get{bucket=~"$bucket",pod=~"$node"}) by (bucket)
SETs Panel: sum(cbpernodebucket_cmd_set{bucket=~"$bucket",pod=~"$node"}) by (bucket)
A amostra completa do painel do Grafana
Esta é a aparência do nosso painel de amostra final.
Limpeza
Por fim, limpe sua implantação:
1 2 3 4 5 6 7 |
cubo-prometeu git:(mestre) $ kubectl excluir --ignorar-não-encontrado=verdadeiro -f manifestos/ -f manifestos/configuração cao-2 $ kubectl excluir -f briga de travesseiros-dados-carregador.yaml cao-2 $ kubectl excluir -f meu-agrupamento.yaml cao-2 $ caixa/cbopcfg | kubectl excluir -f - cao-2 $ kubectl excluir -f crd.yaml cao-2 $ eksctl excluir agrupamento --região=nós-leste-1 --nome=prasadCAO2 |
Recursos:
- Faça o download do Couchbase Autonomous Operator 2.0 Beta para Kubernetes
- Introdução ao Couchbase Autonomous Operator 2.0 Beta
- Tutorial - Operador autônomo do Couchbase no EKS
- Compartilhe suas ideias sobre o Fóruns do Couchbase