Como instalar o Conjunto de Monitoramento Prometheus para o 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, entra 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 do seu cluster DOKS, bem como as métricas do estado do cluster Kubernetes. Em seguida, você conectará o Prometheus ao Grafana para visualizar todas as métricas e executar consultas usando a linguagem PromQL. Por fim, você configurará armazenamento persistente para sua instância do Prometheus, para persistir todos os dados de métricas do seu cluster DOKS e 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 de back-end).
  5. Aplicativo de Exemplo Emojivoto implantado no cluster. Siga os passos no README do repositório correspondente.

Por favor, certifique-se de que o contexto do kubectl está configurado para apontar para o seu cluster Kubernetes. Consulte 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ós, API de Métricas, Gerenciador de Alertas e Grafana.

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

Primeiro, clone o repositório do 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 o 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 de 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á definido como emptyDir. Isso significa que o armazenamento será apagado 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 agendador tenta encontrar um nó que atenda à regra. Se um nó correspondente não estiver disponível, o agendador 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 agendador para colocar cargas de trabalho (por exemplo, Pods) em nós rotulados usando a chave – preferred e valor – observability.

Finalmente, 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 do stack 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

Então, você pode se conectar ao Grafana (usando credenciais padrão: admin/prom-operator – consulte 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, criar 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á utilizado o aplicativo de amostra Emojivoto. Você também aprenderá o que é um ServiceMonitor.

Passo 2 – Configurar Prometheus e Grafana

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

A implantação do Emojivoto criada no Passo 5 da seção de 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 do 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 comum de rótulos para eles.
  • <kubernetes_sd_config> – permite recuperar alvos de raspagem da API REST do Kubernetes e sempre permanecer sincronizado com o estado do cluster.

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

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

cd Kubernetes-Starter-Kit-Developers

Primeiro, mude o diretório (se ainda não o fez) 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 – faz referência à 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 Helm:

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

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

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

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

No próximo passo, você descobrirá o PromQL junto com alguns exemplos simples para começar e aprender a linguagem.

Passo 3 – PromQL (Linguagem de Consulta do Prometheus)

Neste passo, 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 de Domínio que é especificamente construída para o Prometheus e permite que você consulte métricas. A expressão geral define o valor final, enquanto as 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ão.

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 da 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 similares em algo chamado vetor. Como visto acima, cada vetor possui um conjunto de atributos que o diferencia dos outros. Você pode agrupar resultados com base em um atributo de interesse. Por exemplo, se você se importa apenas com as 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 seleciona apenas os resultados que correspondem aos seus critérios):

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

Isso é apenas uma introdução muito simples ao que o PromQL é e do que é capaz. Mas 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 aplicação de exemplo Emojivoto.

Passo 4 – Visualizando Métricas Usando o 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 estão armazenados.

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

Nenhuma etapa extra é necessária para instalar o Grafana porque o Passo 1 – Instalando o Stack Prometheus instalou o Grafana para você. Tudo que você precisa fazer é um encaminhamento de 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 instalados por padrão do Grafana.

Navegue até a seção de 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. Além disso, você pode explorar os painéis disponíveis para Kubernetes do projeto kube-mixin no Grafana.

Na próxima etapa, você irá configurar armazenamento persistente para o Prometheus usando armazenamento de blocos da DigitalOcean para persistir suas métricas do DOKS e do aplicativo em caso de reinicializações do servidor ou falhas do cluster.

Etapa 5 – Configurando Armazenamento Persistente para o Prometheus

Nesta etapa, você aprenderá como habilitar armazenamento persistente para o Prometheus para que os dados de métricas sejam mantidos em caso de reinicializações do servidor ou falhas no 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 ao seguinte. Observe que o armazenamento de blocos da DigitalOcean está disponível para você usar.

cd Kubernetes-Starter-Kit-Developers

Em seguida, altere o diretório (se ainda não estiver) 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 escolha (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 ficar assim:

  • 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 solicitado 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 os passos 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, para que os gráficos sejam mantidos através de reinicializações do servidor ou em caso de falhas no cluster. Você definirá uma Requisição de Volume Persistente (PVC) de 5 Gi, utilizando o Armazenamento em Bloco da DigitalOcean. Os próximos passos são os mesmos que Passo 5 – Configurando Armazenamento Persistente para o Prometheus.

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

Primeiramente, abra o arquivo 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml fornecido no repositório do Starter Kit, utilizando um editor de texto de sua escolha (preferencialmente com suporte a validação YAML). A seção de armazenamento persistente 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 será semelhante ao 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 o conselho 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 diminuir a taxa de amostras ingeridas, você pode reduzir o número de séries temporais que você raspa (menos alvos ou menos séries por alvo), ou você pode aumentar o intervalo de raspagem. 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, então usou o Grafana para instalar novos painéis e visualizar métricas de aplicativos do cluster DOKS. Você também aprendeu como realizar consultas de métricas usando PromQL. Por fim, configurou e habilitou armazenamento persistente para Prometheus armazenar suas métricas de 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