Como Instalar o Conjunto de Monitoramento Prometheus para Cluster DOKS

Introdução

Organizações que estão cada vez mais adotando o Kubernetes para gerenciar seus contêineres precisam de uma solução para monitorar a saúde de seu sistema distribuído. Por esse motivo, surge o Prometheus – uma poderosa ferramenta de código aberto para monitorar aplicativos containerizados em seu espaço K8s.

Neste tutorial, você aprenderá como instalar e configurar o conjunto Prometheus para monitorar todos os pods de seu cluster DOKS, além das métricas de estado do cluster Kubernetes. Em seguida, você irá conectar o Prometheus ao Grafana para visualizar todas as métricas e realizar consultas usando a linguagem PromQL. Por fim, você irá configurar armazenamento persistente para sua instância do Prometheus, para persistir todos os dados de métricas do cluster DOKS e dos aplicativos.

Índice

Pré-requisitos

Para completar este tutorial, você precisará de:

  1. A Git client to clone the Starter Kit repository.
  2. Helm para gerenciar lançamentos e atualizações do stack do Prometheus.
  3. Kubectl para interação com o Kubernetes.
  4. Curl para testar os exemplos (aplicações back-end).
  5. Aplicativo de Exemplo Emojivoto implantado no cluster. Por favor, siga as etapas no README do repositório.

Por favor, certifique-se de que o contexto do kubectl está configurado para apontar para o seu cluster Kubernetes. Consulte o Passo 3 – Criando o Cluster DOKS do tutorial de configuração do DOKS.

Passo 1 – Instalando o Conjunto Prometheus

Neste passo, você irá instalar o conjunto kube-prometheus, que é um conjunto completo de monitoramento para Kubernetes. Ele inclui o Operador Prometheus, kube-state-metrics, manifestos pré-construídos, Exportadores de Nó, API de Métricas, Gerenciador de Alertas e Grafana.

Você vai utilizar o gerenciador de pacotes Helm para realizar esta tarefa. O gráfico Helm está disponível aqui para estudo.

Primeiramente, clone o repositório Starter Kit e altere o diretório para sua cópia local.

Em seguida, adicione o repositório Helm e liste os gráficos disponíveis:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

helm repo update prometheus-community

helm search repo prometheus-community

A saída se parece com o seguinte:

NAME                                                    CHART VERSION   APP VERSION     DESCRIPTION
prometheus-community/alertmanager                       0.18.1          v0.23.0         The Alertmanager handles alerts sent by client ...
prometheus-community/kube-prometheus-stack              35.5.1          0.56.3          kube-prometheus-stack collects Kubernetes manif...
...

O gráfico de interesse é prometheus-community/kube-prometheus-stack que irá instalar Prometheus, Promtail, Alertmanager e Grafana no cluster. Por favor, visite a página kube-prometheus-stack para mais detalhes sobre este gráfico.

Em seguida, abra e inspecione o arquivo 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml fornecido no repositório do Starter Kit usando um editor de sua escolha (preferencialmente com suporte a lint YAML). Por padrão, as métricas kubeSched e etcd estão desativadas – esses componentes são gerenciados pelo DOKS e não são acessíveis ao Prometheus. Note que o armazenamento está configurado como emptyDir. Isso significa que o armazenamento será perdido se os pods do Prometheus reiniciarem (você corrigirá isso posteriormente na seção Configurando Armazenamento Persistente para o Prometheus).

[OPCIONAL] Se você seguiu – Passo 4 – Adicionando um nó dedicado para observabilidade do guia Configurando um Cluster Kubernetes Gerenciado pela DigitalOcean, você precisará editar o arquivo 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml fornecido no repositório do Starter Kit e descomentar as seções de affinity tanto para Grafana quanto para Prometheus.

prometheusSpec:
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
              - key: preferred
                operator: In
                values:
                  - observability
grafana:
  enabled: true
  adminPassword: prom-operator
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
              - key: preferred
                operator: In
                values:
                  - observability

Explicações para a configuração acima:

  • preferredDuringSchedulingIgnoredDuringExecution – o escalonador tenta encontrar um nó que atenda à regra. Se um nó correspondente não estiver disponível, o escalonador ainda agenda o Pod.
  • preference.matchExpressions – seletor usado para corresponder a um nó específico com base em um critério. O exemplo acima indica ao escalonador para colocar cargas de trabalho (por exemplo, Pods) em nós rotulados usando a chave – preferred e valor – observability.

Por fim, instale o kube-prometheus-stack, usando Helm:

HELM_CHART_VERSION="35.5.1"

helm install kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
  --namespace monitoring \
  --create-namespace \
  -f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

A specific version of the Helm chart is used. In this case 35.5.1 was picked, which maps to the 0.56.3 version of the application (see output from Step 2.). It’s a good practice to lock on a specific version. This helps to have predictable results and allows versioning control via Git.

–create-namespace \

helm ls -n monitoring

Agora, verifique o status do lançamento do Helm da pilha Prometheus:

NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
kube-prom-stack monitoring      1               2022-06-07 09:52:53.795003 +0300 EEST   deployed        kube-prometheus-stack-35.5.1    0.56.3

A saída se parece com o seguinte. Observe o valor da coluna STATUS – deve dizer deployed.

kubectl get all -n monitoring

Veja quais recursos do Kubernetes estão disponíveis para o Prometheus:

NAME                                                         READY   STATUS    RESTARTS   AGE
pod/alertmanager-kube-prom-stack-kube-prome-alertmanager-0   2/2     Running   0          3m3s
pod/kube-prom-stack-grafana-8457cd64c4-ct5wn                 2/2     Running   0          3m5s
pod/kube-prom-stack-kube-prome-operator-6f8b64b6f-7hkn7      1/1     Running   0          3m5s
pod/kube-prom-stack-kube-state-metrics-5f46fffbc8-mdgfs      1/1     Running   0          3m5s
pod/kube-prom-stack-prometheus-node-exporter-gcb8s           1/1     Running   0          3m5s
pod/kube-prom-stack-prometheus-node-exporter-kc5wz           1/1     Running   0          3m5s
pod/kube-prom-stack-prometheus-node-exporter-qn92d           1/1     Running   0          3m5s
pod/prometheus-kube-prom-stack-kube-prome-prometheus-0       2/2     Running   0          3m3s

NAME                                               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/alertmanager-operated                      ClusterIP   None             <none>        9093/TCP,9094/TCP,9094/UDP   3m3s
service/kube-prom-stack-grafana                    ClusterIP   10.245.147.83    <none>        80/TCP                       3m5s
service/kube-prom-stack-kube-prome-alertmanager    ClusterIP   10.245.187.117   <none>        9093/TCP                     3m5s
service/kube-prom-stack-kube-prome-operator        ClusterIP   10.245.79.95     <none>        443/TCP                      3m5s
service/kube-prom-stack-kube-prome-prometheus      ClusterIP   10.245.86.189    <none>        9090/TCP                     3m5s
service/kube-prom-stack-kube-state-metrics         ClusterIP   10.245.119.83    <none>        8080/TCP                     3m5s
service/kube-prom-stack-prometheus-node-exporter   ClusterIP   10.245.47.175    <none>        9100/TCP                     3m5s
service/prometheus-operated                        ClusterIP   None             <none>        9090/TCP                     3m3s

NAME                                                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/kube-prom-stack-prometheus-node-exporter   3         3         3       3            3           <none>          3m5s

NAME                                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/kube-prom-stack-grafana               1/1     1            1           3m5s
deployment.apps/kube-prom-stack-kube-prome-operator   1/1     1            1           3m5s
deployment.apps/kube-prom-stack-kube-state-metrics    1/1     1            1           3m5s

NAME                                                            DESIRED   CURRENT   READY   AGE
replicaset.apps/kube-prom-stack-grafana-8457cd64c4              1         1         1       3m5s
replicaset.apps/kube-prom-stack-kube-prome-operator-6f8b64b6f   1         1         1       3m5s
replicaset.apps/kube-prom-stack-kube-state-metrics-5f46fffbc8   1         1         1       3m5s

NAME                                                                    READY   AGE
statefulset.apps/alertmanager-kube-prom-stack-kube-prome-alertmanager   1/1     3m3s
statefulset.apps/prometheus-kube-prom-stack-kube-prome-prometheus       1/1     3m3s

Você deve ter os seguintes recursos implantados: prometheus-node-exporter, kube-prome-operator, kube-prome-alertmanager, kube-prom-stack-grafana e kube-state-metrics. A saída se parece com:

kubectl --namespace monitoring port-forward svc/kube-prom-stack-grafana 3000:80

Em seguida, você pode se conectar ao Grafana (usando credenciais padrão: admin/prom-operator – veja o arquivo prom-stack-values-v35.5.1), encaminhando a porta para a máquina local:

Você NÃO deve expor o Grafana para a rede pública (por exemplo, criando um mapeamento de ingresso ou serviço de balanceamento de carga) com login/senha padrão.

A instalação do Grafana vem com vários painéis. Abra um navegador da web em localhost:3000. Uma vez dentro, você pode ir para Painéis -> Navegar e escolher diferentes painéis.

Na próxima parte, você descobrirá como configurar o Prometheus para descobrir alvos para monitoramento. Como exemplo, será utilizada a aplicação de exemplo Emojivoto. Você aprenderá também o que é um ServiceMonitor.

Passo 2 – Configurar Prometheus e Grafana

Você já implantou o Prometheus e o Grafana no cluster. Neste passo, você aprenderá como usar um ServiceMonitor. Um ServiceMonitor é uma das maneiras preferidas de dizer ao Prometheus como descobrir um novo alvo para monitoramento.

A Implantação Emojivoto criada no Passo 5 da seção Pré-requisitos fornece o endpoint /metrics por padrão na porta 8801 via um serviço Kubernetes.

kubectl get svc -n emojivoto

Em seguida, você descobrirá os serviços Emojivoto responsáveis por expor dados de métricas para o Prometheus consumir. Os serviços em questão são chamados de emoji-svc e voting-svc (observe que está usando o namespace emojivoto):

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
emoji-svc    ClusterIP   10.245.135.93    <none>        8080/TCP,8801/TCP   22h
voting-svc   ClusterIP   10.245.164.222   <none>        8080/TCP,8801/TCP   22h
web-svc      ClusterIP   10.245.61.229    <none>        80/TCP              22h

A saída se parece com o seguinte:

kubectl port-forward svc/emoji-svc 8801:8801 -n emojivoto

Em seguida, execute um port-forward para inspecionar as métricas:

curl -s http://localhost:8801/metrics

As métricas expostas podem ser visualizadas navegando com um navegador da web para localhost ou via curl:

A saída se parece com o seguinte:
go_gc_duration_seconds{quantile="0"} 5.317e-05
go_gc_duration_seconds{quantile="0.25"} 0.000105305
go_gc_duration_seconds{quantile="0.5"} 0.000138168
go_gc_duration_seconds{quantile="0.75"} 0.000225651
go_gc_duration_seconds{quantile="1"} 0.016986437
go_gc_duration_seconds_sum 0.607979843
go_gc_duration_seconds_count 2097

# TYPE go_gc_duration_seconds summary

Para inspecionar as métricas para o serviço voting-svc, pare o encaminhamento de porta do emoji-svc e execute as mesmas etapas para o segundo serviço.

  • Em seguida, conecte o Prometheus ao serviço de métricas Emojivoto. Existem várias maneiras de fazer isso:
  • <static_config> – permite especificar uma lista de alvos e um conjunto de rótulos comuns para eles.
  • <kubernetes_sd_config> – permite recuperar alvos de raspagem da API REST do Kubernetes e sempre permanecer sincronizado com o estado do cluster.

Prometheus Operator – simplifica o monitoramento do Prometheus dentro de um cluster Kubernetes via CRDs.

Em seguida, você usará o CRD ServiceMonitor exposto pelo Prometheus Operator para definir um novo alvo para monitoramento.

cd Kubernetes-Starter-Kit-Developers

Primeiro, mude o diretório (se ainda não estiver) onde o repositório Git do Starter Kit foi clonado:

additionalServiceMonitors:
  - name: emojivoto-monitor
    selector:
      matchExpressions:
        - key: app
          operator: In
          values:
            - emoji-svc
            - voting-svc
    namespaceSelector:
      matchNames:
        - emojivoto
    endpoints:
      - port: prom

Em seguida, abra o arquivo 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml fornecido no repositório do Starter Kit usando um editor de texto de sua escolha (preferencialmente com suporte a lint YAML). Por favor, remova os comentários que cercam a seção additionalServiceMonitors. A saída se parece com:

  • Explicações para a configuração acima:
  • selector -> matchExpressions – indica ao ServiceMonitor qual serviço monitorar. Ele irá direcionar todos os serviços com a chave de rótulo app e os valores emoji-svc e voting-svc. Os rótulos podem ser obtidos executando: kubectl get svc --show-labels -n emojivoto
  • namespaceSelector – aqui, você deseja corresponder ao namespace onde o Emojivoto foi implantado.

endpoints -> port – refere-se à porta do serviço a ser monitorado.

HELM_CHART_VERSION="35.5.1"

helm upgrade kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
  --namespace monitoring \
  -f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

Por fim, aplique as alterações usando o Helm:

kubectl port-forward svc/kube-prom-stack-kube-prome-prometheus 9090:9090 -n monitoring

Em seguida, verifique se o destino Emojivoto foi adicionado ao Prometheus para raspagem. Crie um encaminhamento de porta para o Prometheus na porta 9090:

Abra um navegador da web em localhost:9090. Em seguida, navegue até a página Status -> Targets, e inspecione os resultados (observe o caminho serviceMonitor/monitoring/emojivoto-monitor/0):

2 entradas sob os alvos descobertos porque a implantação do Emojivoto consiste em 2 serviços expondo o endpoint de métricas.

Na próxima etapa, você descobrirá o PromQL juntamente com alguns exemplos simples, para começar e descobrir o idioma.

Etapa 3 – PromQL (Linguagem de Consulta do Prometheus)

Nesta etapa, você aprenderá o básico da Linguagem de Consulta do Prometheus (PromQL). O PromQL ajuda você a realizar consultas em várias métricas provenientes de todos os Pods e aplicativos do seu cluster DOKS.

O PromQL é uma DSL ou Linguagem Específica do Domínio que é especificamente construída para o Prometheus e permite que você faça consultas para métricas. A expressão geral define o valor final, enquanto expressões aninhadas representam valores para argumentos e operandos. Para explicações mais detalhadas, por favor, visite a página oficial do PromQL.

Em seguida, você vai inspecionar uma das métricas do Emojivoto, nomeadamente o emojivoto_votes_total, que representa o número total de votos. É um valor de contador que aumenta a cada solicitação contra o endpoint de votos do Emojivoto.

kubectl port-forward svc/kube-prom-stack-kube-prome-prometheus 9090:9090 -n monitoring

Primeiro, crie um encaminhamento de porta para o Prometheus na porta 9090:

Em seguida, abra o navegador de expressões.

emojivoto_votes_total{container="voting-svc", emoji=":100:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 20
emojivoto_votes_total{container="voting-svc", emoji=":bacon:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 17
emojivoto_votes_total{container="voting-svc", emoji=":balloon:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 21
emojivoto_votes_total{container="voting-svc", emoji=":basketball_man:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 10
emojivoto_votes_total{container="voting-svc", emoji=":beach_umbrella:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 10
emojivoto_votes_total{container="voting-svc", emoji=":beer:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 11

No campo de entrada de consulta, cole emojivoto_votes_total e pressione enter. A saída se parece com:

Navegue até a aplicação Emojivoto e, a partir da página inicial, clique no emoji 100 para votar nele.

emojivoto_votes_total{container="voting-svc", emoji=":100:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 21
emojivoto_votes_total{container="voting-svc", emoji=":bacon:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 17
emojivoto_votes_total{container="voting-svc", emoji=":balloon:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 21
emojivoto_votes_total{container="voting-svc", emoji=":basketball_man:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 10
emojivoto_votes_total{container="voting-svc", emoji=":beach_umbrella:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 10
emojivoto_votes_total{container="voting-svc", emoji=":beer:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 11

Navegue até a página de resultados da consulta do Passo 3 e clique no botão Executar. Você deverá ver o contador para o emoji 100 aumentar em um. A saída se parece com:

emojivoto_votes_total{service="voting-svc"}

O PromQL agrupa dados semelhantes em algo chamado vetor. Como visto acima, cada vetor tem um conjunto de atributos que os diferenciam um do outro. Você pode agrupar resultados com base em um atributo de interesse. Por exemplo, se você se preocupa apenas com solicitações que vêm do serviço voting-svc, então por favor digite o seguinte no campo de consulta:

emojivoto_votes_total{container="voting-svc", emoji=":100:", endpoint="prom", instance="10.244.6.91:8801", job="voting-svc", namespace="emojivoto", pod="voting-6548959dd7-hssh2", service="voting-svc"} 492
emojivoto_votes_total{container="voting-svc", emoji=":bacon:", endpoint="prom", instance="10.244.6.91:8801", job="voting-svc", namespace="emojivoto", pod="voting-6548959dd7-hssh2", service="voting-svc"} 532
emojivoto_votes_total{container="voting-svc", emoji=":balloon:", endpoint="prom", instance="10.244.6.91:8801", job="voting-svc", namespace="emojivoto", pod="voting-6548959dd7-hssh2", service="voting-svc"} 521

A saída se parece com (observe que ele seleciona apenas os resultados que correspondem aos seus critérios):

O resultado acima mostra o total de solicitações para cada Pod da implantação Emojivoto que emite métricas (que consiste em 2).

Isto é apenas uma introdução muito simples sobre o que é o PromQL e do que ele é capaz. Mas ele pode fazer muito mais do que isso, como contar métricas, calcular a taxa ao longo de um intervalo predefinido, etc. Por favor, visite a página oficial do PromQL para mais recursos da linguagem.

No próximo passo, você aprenderá como usar o Grafana para visualizar métricas para a amostra da aplicação Emojivoto.

Passo 4 – Visualizando Métricas Usando Grafana

Embora o Prometheus tenha algum suporte integrado para visualização de dados, uma maneira melhor de fazer isso é através do Grafana, que é uma plataforma de código aberto para monitoramento e observabilidade, que permite visualizar e explorar o estado do seu cluster.

A página oficial é descrita como sendo capaz de:

Consultar, visualizar, alertar e entender seus dados, não importa onde eles estejam armazenados.

kubectl --namespace monitoring port-forward svc/kube-prom-stack-grafana 3000:80

Não são necessários passos adicionais para instalar o Grafana porque o Passo 1 – Instalando o Conjunto Prometheus instalou o Grafana para você. Tudo o que você precisa fazer é encaminhar uma porta como abaixo e obter acesso imediato aos painéis (credenciais padrão: admin/prom-monitor):

Para ver todas as métricas do Emojivoto, você vai usar um dos painéis padrão instalados do Grafana.

Navegue até a seção Painéis Grafana.

Em seguida, procure pelo painel Geral/Kubernetes/Recursos de Computação/Namespace(Pods) e acesse-o.

Por fim, selecione a fonte de dados Prometheus e adicione o namespace emojivoto.

Você pode brincar e adicionar mais painéis no Grafana para visualizar outras fontes de dados, bem como agrupá-los com base no escopo. Também, você pode explorar os painéis disponíveis para Kubernetes do projeto Grafana kube-mixin.

No próximo passo, você configurará armazenamento persistente para o Prometheus usando o armazenamento em bloco da DigitalOcean para persistir suas métricas de DOKS e aplicativos através de reinicializações de servidores ou falhas de cluster.

Etapa 5 – Configurando Armazenamento Persistente para Prometheus

Nesta etapa, você aprenderá como habilitar armazenamento persistente para o Prometheus para que os dados de métricas sejam persistidos através de reinicializações de servidores, ou em caso de falhas de cluster.

kubectl get storageclass

Primeiro, você precisa de uma classe de armazenamento para prosseguir. Execute o seguinte comando para verificar qual está disponível.

NAME                         PROVISIONER                 RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
do-block-storage (default)   dobs.csi.digitalocean.com   Delete          Immediate           true                   4d2h

A saída deve ser semelhante à seguinte. Observe que o Armazenamento em Bloco da DigitalOcean está disponível para você usar.

cd Kubernetes-Starter-Kit-Developers

Em seguida, mude o diretório (se ainda não o fez) onde o repositório Git do Starter Kit foi clonado:

prometheusSpec:
  storageSpec:
    volumeClaimTemplate:
      spec:
        storageClassName: do-block-storage
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 5Gi

Em seguida, abra o arquivo 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml fornecido no repositório do Starter Kit usando um editor de texto de sua preferência (preferencialmente com suporte a lint YAML). Procure pela linha storageSpec e descomente a seção necessária para o Prometheus. A definição storageSpec deve parecer com:

  • Explicações para a configuração acima:
  • volumeClaimTemplate – define um novo PVC.
  • storageClassName – define a classe de armazenamento (deve usar o mesmo valor obtido no comando kubectl get storageclass).

resources – define o valor de solicitações de armazenamento. Neste caso, é solicitada uma capacidade total de 5 Gi para o novo volume.

HELM_CHART_VERSION="35.5.1"

helm upgrade kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
  --namespace monitoring \
  -f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

Por fim, aplique as configurações usando o Helm:

kubectl get pvc -n monitoring

Após concluir as etapas acima, verifique o status do PVC:

NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS         MODES              AGE
kube-prome-prometheus-0   Bound    pvc-768d85ff-17e7-4043-9aea-4929df6a35f4   5Gi        RWO            do-block-storage   4d2h

A new Volume should appear in the Volumes web page from your DigitalOcean account panel:

A saída será semelhante ao seguinte. A coluna STATUS deve exibir Bound.

Passo 6 – Configurando Armazenamento Persistente para o Grafana

Nesta etapa, você aprenderá como habilitar armazenamento persistente para o Grafana, de modo que os gráficos sejam mantidos através de reinicializações do servidor ou em caso de falhas no cluster. Você definirá uma Reivindicação de Volume Persistente (PVC) de 5 Gi, usando o Armazenamento de Blocos da DigitalOcean. Os próximos passos são os mesmos que o Passo 5 – Configurando Armazenamento Persistente para o Prometheus.

grafana:
  ...
  persistence:
    enabled: true
    storageClassName: do-block-storage
    accessModes: ["ReadWriteOnce"]
    size: 5Gi

Primeiro, abra o arquivo 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml fornecido no repositório do Starter Kit, usando um editor de texto de sua escolha (preferencialmente com suporte a lint YAML). A seção de armazenamento de persistência para o Grafana deve se parecer com:

HELM_CHART_VERSION="35.5.1"

helm upgrade kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
--namespace monitoring \
-f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

Em seguida, aplique as configurações usando o Helm:

kubectl get pvc -n monitoring

Após concluir os passos acima, verifique o status do PVC:

NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS         MODES              AGE
kube-prom-stack-grafana   Bound    pvc-768d85ff-17e7-4043-9aea-4929df6a35f4   5Gi        RWO            do-block-storage   4d2h

A new Volume should appear in the Volumes web page from your DigitalOcean account panel:

A saída se parece com a seguinte. A coluna STATUS deve exibir Bound.

Melhores Práticas para Dimensionamento de PV

  • Para calcular o tamanho necessário para o volume com base em suas necessidades, siga os conselhos e a fórmula da documentação oficial:
  • Prometheus armazena uma média de apenas 1-2 bytes por amostra. Assim, para planejar a capacidade de um servidor Prometheus, você pode usar a fórmula aproximada:
    espaço_em_disco_necessário = tempo_de_retenção_segundos * amostras_ingeridas_por_segundo * bytes_por_amostra

Para reduzir a taxa de amostras ingeridas, você pode ou reduzir o número de séries temporais que você coleta (menos alvos ou menos séries por alvo), ou pode aumentar o intervalo de coleta. No entanto, reduzir o número de séries é provavelmente mais eficaz, devido à compressão de amostras dentro de uma série.

Por favor, siga a seção Aspectos Operacionais para mais detalhes sobre o assunto.

Conclusão

Neste tutorial, você aprendeu como instalar e configurar o stack Prometheus, em seguida, usou o Grafana para instalar novos painéis e visualizar métricas de aplicativos de cluster DOKS. Você também aprendeu como realizar consultas de métricas usando PromQL. Finalmente, configurou e habilitou armazenamento persistente para o Prometheus armazenar as métricas do seu cluster.

Configurar o monitoramento do cluster DOKS com Helm e Prometheus Operator

Source:
https://www.digitalocean.com/community/developer-center/how-to-install-prometheus-monitoring-stack-for-doks-cluster