O Prometheus é um sistema de monitoramento de serviços e sistemas. Ele coleta métricas de destinos configurados em determinados intervalos, avalia expressões de regra, exibe os resultados e pode disparar alertas se alguma condição for considerada verdadeira. O Alertmanager lida com alertas gerados pelo Prometheus e os encaminha para seus endpoints de recebimento. Implante a extensão TKG para o Prometheus para coletar e visualizar métricas para clusters do Tanzu Kubernetes.

Pré-requisitos de extensão

Este tópico descreve como implantar a extensão TKG v1.3.1 para o Prometheus com o Alertmanager para monitoramento de cluster. Siga os seguintes requisitos antes de implantar a extensão. Além dos requisitos gerais, o monitoramento do Prometheus requer uma classe de armazenamento persistente padrão. Você pode criar um cluster com uma classe de armazenamento persistente padrão ou especificar uma no arquivo de configuração do Prometheus ao implantar a extensão. Consulte o Revise os requisitos de armazenamento persistente para extensões TKG.

Implantar a extensão do Prometheus

A extensão TKG para o Prometheus instala vários contêineres. Para obter mais informações, consulte https://prometheus.io/.
Container Tipo de Recurso Réplicas Descrição
prometheus-alertmanager Implantação 1 Lida com alertas enviados por aplicativos cliente, como o servidor Prometheus.
prometheus-cadvisor DaemonSet 5 Analisa e expõe o uso de recursos e os dados de desempenho de contêineres em execução
prometheus-kube-state-metrics Implantação 1 Monitora o status e a capacidade do nó, a conformidade do conjunto de réplicas, o pod, o trabalho e o status do cronjob, as solicitações e os limites de recursos.
prometheus-node-exporter DaemonSet 5 Exportador de métricas de hardware e sistema operacional expostas por kernels.
prometheus-pushgateway Implantação 1 Serviço que permite enviar métricas de trabalhos que não podem ser removidos.
prometheus-server Implantação 1 Fornece funcionalidades básicas, incluindo coleta, processamento de regras e alertas.
A extensão está configurada para receber os contêineres do registro público VMware em https://projects.registry.vmware.com/. Se você estiver usando um registro privado, altere a URL do endpoint nos valores de dados e nas configurações de extensão para corresponder. Consulte o Configurar a extensão do Prometheus.
  1. Verifique se você concluiu cada um dos pré-requisitos de extensão. Consulte o Pré-requisitos de extensão.
  2. Altere o diretório para a extensão Prometheus.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/prometheus
  3. Crie o namespace tanzu-system-monitoring e a conta de serviço do Prometheus e os objetos de função.
    kubectl apply -f namespace-role.yaml
  4. Crie um arquivo de valores de dados do Prometheus.

    O arquivo de valores de dados de exemplo fornece a configuração mínima.

    cp prometheus-data-values.yaml.example prometheus-data-values.yaml
  5. Configure a extensão do Prometheus atualizando o prometheus-data-values.yaml. Consulte Configurar a extensão do Prometheus para obter uma descrição dos campos e opções.
    Se o cluster não estiver provisionado com uma classe de armazenamento persistente padrão, você poderá especificá-la no arquivo de valores de dados. Além disso, certifique-se de que o namespace tenha armazenamento suficiente para as declarações de volume persistentes.
    monitoring:
      prometheus_server:
        image:
          repository: projects.registry.vmware.com/tkg/prometheus
        pvc:
          storage_class: vwt-storage-policy
          storage: "8Gi"
      alertmanager:
        image:
          repository: projects.registry.vmware.com/tkg/prometheus
        pvc:
          storage_class: vwt-storage-policy
          storage: "8Gi"
    ...      
    
  6. Crie o segredo do Prometheus usando o arquivo prometheus-data-values.
    kubectl create secret generic prometheus-data-values --from-file=values.yaml=prometheus-data-values.yaml -n tanzu-system-monitoring
    

    O segredo prometheus-data-values é criado no namespace tanzu-system-monitoring. Verifique usando kubectl get secrets -n tanzu-system-monitoring.

  7. Implante a extensão do Prometheus.
    kubectl apply -f prometheus-extension.yaml

    Em caso de sucesso, o aplicativo Prometheus é criado: app.kappctrl.k14s.io/prometheus created.

  8. Verifique o status do aplicativo Prometheus.
    kubectl get app prometheus -n tanzu-system-monitoring
    O status deve mudar de Reconciling para Reconcile succeeded. Se o status for Reconcile failed, consulte Solução de problemas.
  9. Visualize informações detalhadas sobre o aplicativo Prometheus.
    kubectl get app prometheus -n tanzu-system-monitoring -o yaml
  10. Verifique os DaemonSets do Prometheus.
    kubectl get daemonsets -n tanzu-system-monitoring
  11. Verifique as implantações do Prometheus.
    kubectl get deployments -n tanzu-system-monitoring

Solução de problemas de implantação do Prometheus

Se a implantação ou a reconciliação falhar, execute kubectl get pods -A para exibir o status dos pods. Em condições normais, você verá que os pods são Running. Se o status for ImagePullBackOff ou ImageCrashLoopBackOff, a imagem do contêiner não poderá ser extraída do registro. Verifique a URL nos valores de dados e nos arquivos YAML de extensão e certifique-se de que eles sejam precisos.

Verifique os logs do contêiner, onde name-XXXX é o nome do pod exclusivo quando você executa kubectl get pods -A:
kubectl logs pod/prometheus-alertmanager-XXXXX -c prometheus-alertmanager -n tanzu-system-monitoring
kubectl logs pod/prometheus-server-XXXXX -c prometheus-server -n tanzu-system-monitoring

Atualizar a extensão do Prometheus

Atualize a configuração de uma extensão do Prometheus implantada em um cluster do Tanzu Kubernetes.

  1. Obtenha os valores de dados do Prometheus do segredo.
    kubectl get secret prometheus-data-values -n tanzu-system-monitoring -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > prometheus-data-values.yaml
    
  2. Atualize o segredo dos valores de dados do Prometheus.
    kubectl create secret generic prometheus-data-values --from-file=values.yaml=prometheus-data-values.yaml -n tanzu-system-monitoring -o yaml --dry-run | kubectl replace -f-
    
    A extensão do Prometheus será reconciliada com os valores de dados atualizados.
    Observação: Por padrão, o kapp-controller sincronizará os aplicativos a cada 5 minutos. A atualização deve entrar em vigor em 5 minutos ou menos. Se você quiser que a atualização entre em vigor imediatamente, altere syncPeriod em prometheus-extension.yaml para um valor menor e aplique a extensão de bit fluente usando kubectl apply -f prometheus-extension.yaml.
  3. Verifique o status da extensão.
    kubectl get app prometheus -n tanzu-system-monitoring

    O status deve mudar para Reconcile Succeeded assim que o Prometheus for atualizado.

  4. Visualize o status detalhado e solucione problemas.
    kubectl get app prometheus -n tanzu-system-monitoring -o yaml

Excluir a extensão do Prometheus

Exclua a extensão do Prometheus de um cluster Tanzu Kubernetes.
Observação: Conclua as etapas em ordem. Não exclua o namespace, a conta de serviço e os objetos de função antes que o aplicativo Prometheus seja totalmente excluído. Isso pode levar a erros do sistema.
Cuidado: O Prometheus e o Grafana usam o mesmo namespace. A exclusão do namespace é destrutiva para qualquer extensão implantada lá. Se o Grafana estiver implantado, não exclua o namespace antes de excluir o Grafana.
  1. Altere o diretório para a extensão Prometheus.
    cd /extensions/monitoring/prometheus/
  2. Exclua o aplicativo Prometheus.
    kubectl delete app prometheus -n tanzu-system-monitoring

    Resultado esperado: app.kappctrl.k14s.io "prometheus" deleted.

  3. Verifique se o aplicativo Prometheus foi excluído.
    kubectl get app prometheus -n tanzu-system-monitoring

    Resultado esperado: apps.kappctrl.k14s.io "prometheus" not found.

  4. Exclua o namespace tanzu-system-monitoring e a conta de serviço do Prometheus e os objetos de função.
    Aviso: Não execute essa etapa se o Grafana estiver implantado.
    kubectl delete -f namespace-role.yaml
  5. Se você quiser reimplantar o Prometheus, remova o segredo prometheus-data-values.
    kubectl delete secret prometheus-data-values -n tanzu-system-monitoring

    Resultado esperado: secret "prometheus-data-values" deleted.

Atualizar a extensão do Prometheus

Se você tiver uma extensão do Prometheus existente implantada, poderá atualizá-la para a versão mais recente.
  1. Exporte o configmap do Prometheus e salve-o como backup.
    kubectl get configmap prometheus -n tanzu-system-monitoring -o 'go-template={{ index .data "prometheus.yaml" }}' > prometheus-configmap.yaml
    
  2. Exclua a implantação existente do Prometheus. Consulte o Excluir a extensão do Prometheus.
  3. Implante a extensão do Prometheus. Consulte o Implantar a extensão do Prometheus.

Configurar a extensão do Prometheus

A configuração do Prometheus é definida em /extensions/monitoring/prometheus/prometheus-data-values.yaml.
Tabela 1. Parâmetros de configuração do Prometheus
Parâmetro Descrição Tipo Padrão
Monitoring.namespace Namespace onde o Prometheus será implantado cadeia de caracteres tanzu-system-Monitoring
Monitoring.create_namespace O sinalizador indica se é necessário criar o namespace especificado por Monitoring.namespace boolean falso
Monitoring.prometheus_server.config.prometheus_yaml Detalhes de configuração do monitor de cluster do Kubernetes a serem transmitidos ao Prometheus arquivo yaml prometheus.yaml
Monitoring.prometheus_server.config.alerting_rules_yaml Regras de alerta detalhadas definidas no Prometheus arquivo yaml alerting_rules.yaml
Monitoring.prometheus_server.config.recording_rules_yaml Regras de registro detalhadas definidas no Prometheus arquivo yaml gravação_rules.yaml
Monitoring.prometheus_server.service.type Tipo de serviço para expor o Prometheus. Valores com suporte: ClusterIP cadeia de caracteres ClusterIP
Monitoring.prometheus_server.enable_alerts.kubernetes_api Ativar alertas de SLO para a API do Kubernetes no Prometheus boolean verdadeiro
Monitoring.prometheus_server.sc.aws_type Tipo de AWS definido para classe de armazenamento na AWS cadeia de caracteres GP2
Monitoring.prometheus_server.sc.aws_fsType Tipo de sistema de arquivos da AWS definido para classe de armazenamento na AWS cadeia de caracteres ext4
Monitoring.prometheus_server.sc.allowVolumeExpansion Defina se a expansão do volume é permitida para classes de armazenamento na AWS boolean verdadeiro
Monitoring.prometheus_server.pvc.annotations Anotações de classe de armazenamento mapa {}
Monitoring.prometheus_server.pvc.storage_class Classe de armazenamento a ser usada para declaração de volume persistente. Por padrão, isso é nulo e o provisionador padrão é usado cadeia de caracteres nulo
Monitoring.prometheus_server.pvc.accessMode Defina o modo de acesso para a reivindicação de volume persistente. Valores com suporte: ReadWriteOnce, ReadOnlyMany, ReadWriteMany cadeia de caracteres ReadWriteOnce
Monitoring.prometheus_server.pvc.storage Defina o tamanho do armazenamento para a declaração de volume persistente cadeia de caracteres 8Gi
Monitoring.prometheus_server.deployment.replicas Número de réplicas do prometheus número inteiro 1
Monitoring.prometheus_server.image.repository Localização do repositório com a imagem do Prometheus. O padrão é o registro público VMware. Altere esse valor se você estiver usando um repositório privado (por exemplo, ambiente isolado). cadeia de caracteres projects.registry.vmware.com/tkg/prometheus
Monitoring.prometheus_server.image.name Nome da imagem do Prometheus cadeia de caracteres Prometheus
Monitoring.prometheus_server.image.tag Tag de imagem do Prometheus. Esse valor pode precisar ser atualizado se você estiver atualizando a versão. cadeia de caracteres v2.17.1_vmware.1
Monitoring.prometheus_server.image.pullPolicy Política de pull de imagem do Prometheus cadeia de caracteres IfNotPresent
Monitoring.alertmanager.config.slack_demo Configuração de notificação do Slack para o Alertmanager cadeia de caracteres
slack_demo:
  name: slack_demo
  slack_configs:
  - api_url: https://hooks.slack.com
    channel: '#alertmanager-test'
Monitoring.alertmanager.config.email_receiver Configuração de notificação de e-mail para o Alertmanager cadeia de caracteres
email_receiver:
  name: email-receiver
  email_configs:
  - to: [email protected]
    send_resolved: false
    from: [email protected]
    smarthost: smtp.eample.com:25
    require_tls: false
Monitoring.alertmanager.service.type Tipo de serviço para expor o Alertmanager. Valores com suporte: ClusterIP cadeia de caracteres ClusterIP
Monitoring.alertmanager.image.repository Localização do repositório com a imagem do Alertmanager. O padrão é o registro público VMware. Altere esse valor se você estiver usando um repositório privado (por exemplo, ambiente isolado). cadeia de caracteres projects.registry.vmware.com/tkg/prometheus
Monitoring.alertmanager.image.name Nome da imagem do Alertmanager cadeia de caracteres alertmanager
Monitoring.alertmanager.image.tag Tag de imagem do Alertmanager. Esse valor pode precisar ser atualizado se você estiver atualizando a versão. cadeia de caracteres v0.20.0_vmware.1
Monitoring.alertmanager.image.pullPolicy Política de pull de imagem do Alertmanager cadeia de caracteres IfNotPresent
Monitoring.alertmanager.pvc.annotations Anotações de classe de armazenamento mapa {}
Monitoring.alertmanager.pvc.storage_class Classe de armazenamento a ser usada para declaração de volume persistente. Por padrão, isso é nulo e o provisionador padrão é usado. cadeia de caracteres nulo
Monitoring.alertmanager.pvc.accessMode Defina o modo de acesso para a reivindicação de volume persistente. Valores com suporte: ReadWriteOnce, ReadOnlyMany, ReadWriteMany cadeia de caracteres ReadWriteOnce
Monitoring.alertmanager.pvc.storage Defina o tamanho do armazenamento para a declaração de volume persistente cadeia de caracteres 2Gi
Monitoring.alertmanager.deployment.replicas Número de réplicas do alertmanager número inteiro 1
Monitoring.kube_state_metrics.image.repository Repositório contendo a imagem kube-state-metircs. O padrão é o registro público VMware. Altere esse valor se você estiver usando um repositório privado (por exemplo, ambiente isolado). cadeia de caracteres projects.registry.vmware.com/tkg/prometheus
Monitoring.kube_state_metrics.image.name Nome da imagem kube-state-metircs cadeia de caracteres kube-state-metrics
Monitoring.kube_state_metrics.image.tag tag de imagem kube-state-metircs. Esse valor pode precisar ser atualizado se você estiver atualizando a versão. cadeia de caracteres v1.9.5_vmware.1
Monitoring.kube_state_metrics.image.pullPolicy política de recebimento de imagem kube-state-metircs cadeia de caracteres IfNotPresent
Monitoring.kube_state_metrics.deployment.replicas Número de réplicas kube-state-metrics número inteiro 1
Monitoring.node_exporter.image.repository Repositório contendo a imagem do exportador de nó. O padrão é o registro público VMware. Altere esse valor se você estiver usando um repositório privado (por exemplo, ambiente isolado). cadeia de caracteres projects.registry.vmware.com/tkg/prometheus
Monitoring.node_exporter.image.name Nome da imagem do exportador de nó cadeia de caracteres node-exporter
Monitoring.node_exporter.image.tag tag de imagem node-exporter. Esse valor pode precisar ser atualizado se você estiver atualizando a versão. cadeia de caracteres v0.18.1_vmware.1
Monitoring.node_exporter.image.pullPolicy Política de recebimento de imagem node-exporter cadeia de caracteres IfNotPresent
Monitoring.node_exporter.hostNetwork Se definido como hostNetwork: true, o pod poderá usar o namespace de rede e os recursos de rede do nó. boolean falso
Monitoring.node_exporter.deployment.replicas Número de réplicas do exportador de nó número inteiro 1
Monitoring.pushgateway.image.repository Repositório contendo imagem pushgateway. O padrão é o registro público VMware. Altere esse valor se você estiver usando um repositório privado (por exemplo, ambiente isolado). cadeia de caracteres projects.registry.vmware.com/tkg/prometheus
Monitoring.pushgateway.image.name Nome da imagem pushgateway cadeia de caracteres pushgateway
Monitoring.pushgateway.image.tag tag de imagem pushgateway. Esse valor pode precisar ser atualizado se você estiver atualizando a versão. cadeia de caracteres v1.2.0_vmware.1
Monitoring.pushgateway.image.pullPolicy Política de pull de imagem pushgateway cadeia de caracteres IfNotPresent
Monitoring.pushgateway.deployment.replicas Número de réplicas pushgateway número inteiro 1
Monitoring.cadvisor.image.repository Repositório contendo a imagem do cadvisor. O padrão é o registro público VMware. Altere esse valor se você estiver usando um repositório privado (por exemplo, ambiente isolado). cadeia de caracteres projects.registry.vmware.com/tkg/prometheus
Monitoring.cadvisor.image.name Nome da imagem do cadvisor cadeia de caracteres cadvisor
Monitoring.cadvisor.image.tag tag de imagem cadvisor. Esse valor pode precisar ser atualizado se você estiver atualizando a versão. cadeia de caracteres v0.36.0_vmware.1
Monitoring.cadvisor.image.pullPolicy política de pull de imagem do cadvisor cadeia de caracteres IfNotPresent
Monitoring.cadvisor.deployment.replicas Número de réplicas do cadvisor número inteiro 1
Monitoring.ingress.enabled Ativar / desativar a entrada para prometheus e alertmanager boolean

falso

Para usar a entrada, defina este campo como true e implante o Contour . Para acessar o Prometheus, atualize seu /etc/hosts local com uma entrada que mapeie prometheus.system.tanzu para um endereço IP do nó do trabalhador.

Monitoring.ingress.virtual_host_fqdn Nome do host para acessar o Prometheus e o Alertmanager cadeia de caracteres prometheus.system.tanzu
Monitoring.ingress.prometheus_prefix Prefixo de caminho para prometheus cadeia de caracteres /
Monitoring.ingress.alertmanager_prefix Prefixo de caminho para alertmanager cadeia de caracteres / alertmanager /
Monitoring.ingress.tlsCertificate.tls.crt Certificado opcional para entrada se você quiser usar seu próprio certificado TLS. Um certificado autoassinado é gerado por padrão cadeia de caracteres Certificado gerado
Monitoring.ingress.tlsCertificate.tls.key Chave privada de certificado opcional para entrada se você quiser usar seu próprio certificado TLS. cadeia de caracteres Chave de certificado gerada
Tabela 2. Campos configuráveis para Prometheus_Server Configmap
Parâmetro Descrição Tipo Padrão
avaliação_intervalo frequência para avaliar as regras duração 1 m
scrape_interval frequência para raspar os alvos duração 1 m
scrape_timeout Quanto tempo até uma solicitação de scrape atingir o tempo limite duração 10s
rule_files Arquivos de regra especifica uma lista de globs. Regras e alertas são lidos de todos os arquivos correspondentes arquivo yaml
scrape_configs Uma lista de configurações de scrape. lista
job_name O nome do trabalho atribuído às métricas recuperadas por padrão cadeia de caracteres
kubernetes_sd_configs Lista de configurações de descoberta de serviço do Kubernetes. lista
relabel_configs Lista de configurações de nova etiqueta de destino. lista
ação Ação a ser executada com base na correspondência de regex. cadeia de caracteres
regex Expressão regular com a qual o valor extraído é correspondido. cadeia de caracteres
source_labels Os rótulos de origem selecionam valores dos rótulos existentes. cadeia de caracteres
esquema Configura o esquema de protocolo usado para solicitações. cadeia de caracteres
tls_config Configura as configurações de TLS da solicitação de verificação. cadeia de caracteres
ca_file Certificado da autoridade de certificação com o qual validar o certificado do servidor de API. filename
insecure_skip_verify Desative a validação do certificado do servidor. boolean
bearer_token_file Informações de autenticação de arquivo de token de portador opcional. filename
substituição Valor de substituição em relação ao qual uma substituição de regex é realizada se a expressão regular corresponder. cadeia de caracteres
target_label Rótulo no qual o valor resultante é gravado em uma ação de substituição. cadeia de caracteres
Tabela 3. Campos configuráveis para o Configmap do Alertmanager
Parâmetro Descrição Tipo Padrão
resolve_timeout ResolveTimeout é o valor padrão usado pelo alertmanager se o alerta não incluir o EndsAt duração 5m
smtp_smarthost O host SMTP por meio do qual os e-mails são enviados. duração 1 m
slack_api_url A URL do webhook do Slack. cadeia de caracteres global.slack_api_url
pagerduty_url A URL do pagerduty para a qual enviar solicitações de API. cadeia de caracteres global.pagerduty_url
templates Arquivos a partir dos quais as definições de modelo de notificação personalizada são lidas caminho do arquivo
group_by agrupar os alertas por rótulo cadeia de caracteres
group_interval definir um tempo de espera antes de enviar uma notificação sobre novos alertas que são adicionados a um grupo duração 5m
group_wait Quanto tempo esperar inicialmente para enviar uma notificação para um grupo de alertas duração 30s
repeat_interval Quanto tempo esperar antes de enviar uma notificação novamente se ela já tiver sido enviada com sucesso para um alerta duração 4h
Receptores Uma lista de destinatários de notificação. lista
gravidade Gravidade do incidente. cadeia de caracteres
canal O canal ou usuário para o qual enviar notificações. cadeia de caracteres
html O corpo HTML da notificação por e-mail. cadeia de caracteres
text O corpo do texto da notificação de e-mail. cadeia de caracteres
send_resolved Notificar ou não sobre alertas resolvidos. filename
email_configs Configurações para integração de e-mail boolean
As anotações nos pods permitem um controle preciso do processo de remoção. Essas anotações devem fazer parte dos metadados do pod. Eles não terão efeito se definidos em outros objetos, como Serviços ou DaemonSets.
Tabela 4. Anotações do Pod do Prometheus
Anotação do pod Descrição
prometheus.io/scrape A configuração padrão removerá todos os pods e, se definida como falsa, essa anotação excluirá o pod do processo de remoção.
prometheus.io/path Se o caminho de métricas não for / métricas, defina-o com esta anotação.
prometheus.io/port Raspe o pod na porta indicada em vez das portas declaradas do pod (o padrão é um destino sem porta se nenhuma for declarada).
O manifesto DaemonSet abaixo instruirá o Prometheus a copiar todos os seus pods na porta 9102.
apiVersion: apps/v1beta2 # for versions before 1.8.0 use extensions/v1beta1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: weave
  labels:
    app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
      annotations:
        prometheus.io/scrape: 'true'
        prometheus.io/port: '9102'
    spec:
      containers:
      - name: fluentd-elasticsearch
        image: gcr.io/google-containers/fluentd-elasticsearch:1.20