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 |
➜ kube-prometheus git:(master) ✗ ls DCO README.md examples jsonnet scripts LICENSE build.sh experimental jsonnetfile.json sync-to-internal-registry.jsonnet Makefile code-of-conduct.md go.mod jsonnetfile.lock.json test.sh NOTICE docs go.sum kustomization.yaml tests OWNERS example.jsonnet hack manifests |
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 |
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: couchbase namespace: default # <1> labels: app: couchbase spec: endpoints: - port: metrics # <2> interval: 5s # <3> namespaceSelector: matchNames: - default # <4> selector: matchLabels: app: couchbase # <5> |
Legenda:
- Talvez você queira incluir nosso Couchbase
Monitor de serviçonomonitoramentojuntamente com o outro namespaceMonitores de serviço. Para os exemplos deste tutorial, deixamos apenas nopadrãopara facilitar o uso. - O
portopode ser um valor de cadeia de caracteres e funcionará para diferentes números de porta do serviço, desde que o nome corresponda. intervaloinforma ao Prometheus a frequência com que o endpoint deve ser analisado. Aqui, queremos fazer a correspondência com o namespace doServiçoque estaremos criando na próxima etapa,- Observe que o namespace our
Serviçoserá executado deve ser o mesmo namespace do cluster do Couchbase do qual desejamos extrair métricas. - Semelhante ao
namespaceSelector, este é um simpleslabelSelectorque 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 |
apiVersion: v1 kind: Service metadata: name: couchbase-metrics namespace: default # <1> labels: app: couchbase spec: ports: - name: metrics port: 9091 # <2> protocol: TCP selector: app: couchbase couchbase_cluster: cb-example # <3> |
Legenda:
- Conforme mencionado anteriormente, certifique-se de que o
Serviçoesteja 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.namespaceSelectornoMonitor 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 |
kube-prometheus git:(master) $ kubectl create -f manifests/setup namespace/monitoring created customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/prometheuses.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/thanosrulers.monitoring.coreos.com created clusterrole.rbac.authorization.k8s.io/prometheus-operator created clusterrolebinding.rbac.authorization.k8s.io/prometheus-operator created deployment.apps/prometheus-operator created service/prometheus-operator created serviceaccount/prometheus-operator created |
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 |
kube-prometheus git:(master) $ kubectl create -f manifests/ alertmanager.monitoring.coreos.com/main created secret/alertmanager-main created service/alertmanager-main created serviceaccount/alertmanager-main created servicemonitor.monitoring.coreos.com/alertmanager created service/couchbase-metrics created servicemonitor.monitoring.coreos.com/couchbase created ... servicemonitor.monitoring.coreos.com/kubelet created |
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 get pods -n monitoring NAME READY STATUS RESTARTS AGE alertmanager-main-0 2/2 Running 0 69m alertmanager-main-1 2/2 Running 0 69m alertmanager-main-2 2/2 Running 0 69m grafana-75d8c76bdd-4l284 1/1 Running 0 69m kube-state-metrics-54dc88ccd8-nntts 3/3 Running 0 69m node-exporter-pk65z 2/2 Running 0 69m node-exporter-s9k9n 2/2 Running 0 69m node-exporter-vhjpw 2/2 Running 0 69m prometheus-adapter-8667948d79-vfcbv 1/1 Running 0 69m prometheus-k8s-0 3/3 Running 1 69m prometheus-k8s-1 3/3 Running 0 69m prometheus-operator-696554666f-9cnnv 2/2 Running 0 89m |
Verifique se o ServiceMonitor foi criado.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ kubectl get servicemonitors --all-namespaces NAMESPACE NAME AGE default couchbase 2m33s monitoring alertmanager 2m33s monitoring coredns 2m22s monitoring grafana 2m26s monitoring kube-apiserver 2m22s monitoring kube-controller-manager 2m22s monitoring kube-scheduler 2m21s monitoring kube-state-metrics 2m25s monitoring kubelet 2m21s monitoring node-exporter 2m25s monitoring prometheus 2m22s monitoring prometheus-operator 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 get svc --all-namespaces NAMESPACE NAME PORT(S) default cb-example 8091/TCP,8092/TCP,8093/TCP, default cb-example-srv 11210/TCP,11207/TCP default couchbase-metrics 9091/TCP default couchbase-operator 8080/TCP,8383/TCP default couchbase-operator-admission 443/TCP default kubernetes 443/TCP kube-system kube-dns 53/UDP,53/TCP kube-system kubelet 10250/TCP,10255/TCP,4194/TCP,... monitoring alertmanager-main 9093/TCP monitoring alertmanager-operated 9093/TCP,9094/TCP,9094/UDP monitoring grafana 3000/TCP monitoring kube-state-metrics 8443/TCP,9443/TCP monitoring node-exporter 9100/TCP monitoring prometheus-adapter 443/TCP monitoring prometheus-k8s 9090/TCP monitoring prometheus-operated 9090/TCP monitoring prometheus-operator 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 logs -f deployments/prometheus-operator -n monitoring prometheus-operator |
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 --namespace default port-forward svc/cb-example 8091 & kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090 & kubectl --namespace monitoring port-forward svc/grafana 3000 & kubectl --namespace monitoring port-forward svc/alertmanager-main 9093 & kubectl --namespace monitoring port-forward svc/node-exporter 9100 & kubectl --namespace default port-forward svc/couchbase-metrics 9091 & |
Confira os alvos da Prometheus
Acesso: https://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: https://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{bucket="pillow"} 1.84784896e+08 cbbucketinfo_basic_dataused_bytes{bucket="travel-sample"} 1.51648256e+08 # HELP cbbucketinfo_basic_diskfetches basic_diskfetches # TYPE cbbucketinfo_basic_diskfetches gauge cbbucketinfo_basic_diskfetches{bucket="pillow"} 0 cbbucketinfo_basic_diskfetches{bucket="travel-sample"} 0 # HELP cbbucketinfo_basic_diskused_bytes basic_diskused # TYPE cbbucketinfo_basic_diskused_bytes gauge cbbucketinfo_basic_diskused_bytes{bucket="pillow"} 1.98967788e+08 cbbucketinfo_basic_diskused_bytes{bucket="travel-sample"} 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: https://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: https://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{bucket="pillow",endpoint="metrics",instance="192.168.2.93:9091",job="couchbase-metrics",namespace="default",node="cb-example-0000.cb-example.default.svc:8091",pod="cb-example-0000",service="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 |
Query: {service="couchbase-metrics"} $node: Regex= .*pod="(.*?)".* $bucket: Regex= .*bucket="(.*?)".* $cluster: Regex=.*node=\".*\.(.*)\..*\..*: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 |
kube-prometheus git:(master) $ kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup cao-2 $ kubectl delete -f pillowfight-data-loader.yaml cao-2 $ kubectl delete -f my-cluster.yaml cao-2 $ bin/cbopcfg | kubectl delete -f - cao-2 $ kubectl delete -f crd.yaml cao-2 $ eksctl delete cluster --region=us-east-1 --name=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
