O Prometheus é um sistema de monitoramento de sistemas e serviços. Ele coleta métricas de destinos configurados em determinados intervalos, avalia expressões de regra, exibe os resultados e pode acionar alertas se alguma condição for observada como verdadeira. O Alertmanager trata os alertas gerados pelo Prometheus e os encaminha para os endpoints de recebimento. Implante o Tanzu Packages for Prometheus para coletar e visualizar métricas para clusters do TKG 2.

Requisitos do pacote

Obedeça aos seguintes requisitos para implantar a Tanzu Extension for Contour Ingress.

Componentes do pacote Prometheus

O Pacote Tanzu para Prometheus instala vários contêineres. Para obter mais informações, consulte https://prometheus.io/. O pacote extrai os contêineres do registro público VMware especificado no Repositório de Pacotes.
Contêiner Tipo de recurso Réplicas Descrição
prometheus-alertmanager Implantação 1 Manipula 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 status do pod, do trabalho e do cronjob, as solicitações de recursos e os limites.
prometheus-node-exporter DaemonSet 5 Exportador para métricas de hardware e SO expostas por kernels.
prometheus-pushgateway Implantação 1 Serviço que permite que você envie métricas de trabalhos que não podem ser raspados.
prometheus-server Implantação 1 Fornece a funcionalidade principal, incluindo raspagem, processamento de regras e alertas.

Instalar o pacote do Prometheus

Instale o pacote do Prometheus.

  1. Crie a especificação prometheus.yaml.
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: prometheus-sa
      namespace: tkg-system
    ---
    # temp
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: prometheus-role-binding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
      - kind: ServiceAccount
        name: prometheus-sa
        namespace: tkg-system
    ---
    apiVersion: packaging.carvel.dev/v1alpha1
    kind: PackageInstall
    metadata:
      name: prometheus
      namespace: tkg-system
    spec:
      serviceAccountName: prometheus-sa
      packageRef:
        refName: prometheus.tanzu.vmware.com
        versionSelection:
          constraints: 1.20.2+vmware.1-tkg.1-rc.2
      values:
      - secretRef:
          name: prometheus-data-values
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: prometheus-data-values
      namespace: tkg-system
    stringData:
      values.yml: |
        ---
        prometheus:
          pspNames: "vmware-system-restricted"
    
  2. Instale o pacote do Prometheus.
    kubectl apply -f prometheus.yaml

Parâmetros de configuração do Prometheus

A configuração do Prometheus é definida em prometheus-data-values.yaml. A tabela lista e descreve os parâmetros disponíveis.
Tabela 1. Parâmetros de configuração do Prometheus
Parâmetro Descrição Tipo Padrão
Monitoring.namespace Namespace em que o Prometheus será implantado seqüência de caracteres tanzu-system-monitoring
Monitoring.create_namespace O sinalizador indica se o namespace especificado por monitoring.namespace deve ser criado booliano falso
Monitoring.prometheus_server.config.prometheus_yaml Detalhes de configuração do monitor de cluster Kubernetes a serem passados para o 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 seqüência de caracteres ClusterIP
Monitoring.prometheus_server.enable_alerts.kubernetes_api Habilitar alertas de SLO para a API Kubernetes no Prometheus booliano verdadeiro
Monitoring.prometheus_server.sc.aws_type Tipo de AWS definido para storageclass na AWS seqüência de caracteres gp2
Monitoring.prometheus_server.sc.aws_fsType Tipo de sistema de arquivos da AWS definido para storageclass na AWS seqüência de caracteres ramal 4
Monitoring.prometheus_server.sc.allowVolumeExpansion Definir se a expansão de volume é permitida para storageclass na AWS booliano 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 a declaração de volume persistente. Por padrão, isso é nulo e o provisionador padrão é usado seqüência de caracteres null
Monitoring.prometheus_server.pvc.accessMode Defina o modo de acesso para a declaração de volume persistente. Valores com suporte: ReadWriteOnce, ReadOnlyMany, ReadWriteMany seqüência de caracteres ReadWriteOnce
Monitoring.prometheus_server.pvc.storage Definir o tamanho do armazenamento para a declaração de volume persistente seqüência de caracteres 8 Gi
Monitoring.prometheus_server.deployment.replicas Número de réplicas do Prometheus 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 air-gapped). seqüência de caracteres projects.registry.vmware.com/tkg/prometheus
Monitoring.prometheus_server.image.name Nome da imagem do Prometheus seqüência 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. seqüência de caracteres v2.17.1_vmware.1
Monitoring.prometheus_server.image.pullPolicy Política de extração de imagem do Prometheus seqüência de caracteres IfNotPresent
Monitoring.alertmanager.config.slack_demo Configuração de notificação do Slack para o Alertmanager seqüência 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 por e-mail para o Alertmanager seqüência 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 seqüência de caracteres ClusterIP
Monitoring.alertmanager.image.repository Localização do repositório com a imagem Alertmanager. O padrão é o registro público VMware. Altere esse valor se você estiver usando um repositório privado (por exemplo, ambiente air-gapped). seqüência de caracteres projects.registry.vmware.com/tkg/prometheus
Monitoring.alertmanager.image.name Nome da imagem do Alertmanager seqüência 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. seqüência de caracteres v0.20.0_vmware.1
Monitoring.alertmanager.image.pullPolicy Política de extração de imagem do Alertmanager seqüência 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 a declaração de volume persistente. Por padrão, isso é nulo e o provisionador padrão é usado. seqüência de caracteres null
Monitoring.alertmanager.pvc.accessMode Defina o modo de acesso para a declaração de volume persistente. Valores com suporte: ReadWriteOnce, ReadOnlyMany, ReadWriteMany seqüência de caracteres ReadWriteOnce
Monitoring.alertmanager.pvc.storage Definir o tamanho do armazenamento para a declaração de volume persistente seqüência de caracteres 2Gi
Monitoring.alertmanager.deployment.replicas Número de réplicas do alertmanager inteiro 1
Monitoring.kube_state_metrics.image.repository Repositório que contém 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 air-gapped). seqüência de caracteres projects.registry.vmware.com/tkg/prometheus
Monitoring.kube_state_metrics.image.name Nome da imagem kube-state-metircs seqüência 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. seqüência de caracteres v1.9.5_vmware.1
Monitoring.kube_state_metrics.image.pullPolicy política de extração de imagem kube-state-metircs seqüência de caracteres IfNotPresent
Monitoring.kube_state_metrics.deployment.replicas Número de réplicas de métricas de estado de kube inteiro 1
Monitoring.node_exporter.image.repository Repositório que contém 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 air-gapped). seqüência de caracteres projects.registry.vmware.com/tkg/prometheus
Monitoring.node_exporter.image.name Nome da imagem do exportador de nó seqüência de caracteres exportador de nó
Monitoring.node_exporter.image.tag tag de imagem do exportador de nó. Esse valor pode precisar ser atualizado se você estiver atualizando a versão. seqüência de caracteres v0.18.1_vmware.1
Monitoring.node_exporter.image.pullPolicy política de pull de imagem do exportador de nó seqüência 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ó. booliano falso
Monitoring.node_exporter.deployment.replicas Número de réplicas do exportador de nós inteiro 1
Monitoring.pushgateway.image.repository Repositório que contém a imagem do pushgateway. O padrão é o registro público VMware. Altere esse valor se você estiver usando um repositório privado (por exemplo, ambiente air-gapped). seqüência de caracteres projects.registry.vmware.com/tkg/prometheus
Monitoring.pushgateway.image.name Nome da imagem do pushgateway seqüência de caracteres pushgateway
Monitoring.pushgateway.image.tag tag de imagem pushgateway. Esse valor pode precisar ser atualizado se você estiver atualizando a versão. seqüência de caracteres v1.2.0_vmware.1
Monitoring.pushgateway.image.pullPolicy política de pull de imagem pushgateway seqüência de caracteres IfNotPresent
Monitoring.pushgateway.deployment.replicas Número de réplicas de pushgateway inteiro 1
Monitoring.cadvisor.image.repository Repositório que contém 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 air-gapped). seqüência de caracteres projects.registry.vmware.com/tkg/prometheus
Monitoring.cadvisor.image.name Nome da imagem do cadvisor seqüência de caracteres cadvisor
Monitoring.cadvisor.image.tag tag de imagem cadvisor. Esse valor pode precisar ser atualizado se você estiver atualizando a versão. seqüência de caracteres v0.36.0_vmware.1
Monitoring.cadvisor.image.pullPolicy política de pull de imagem do cadvisor seqüência de caracteres IfNotPresent
Monitoring.cadvisor.deployment.replicas Número de réplicas do cadvisor inteiro 1
Monitoring.ingress.enabled Ativar/desativar a entrada para o prometheus e o alertmanager booliano

falso

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

Monitoring.ingress.virtual_host_fqdn Nome do host para acessar o Prometheus e o Alertmanager seqüência de caracteres prometheus.system.tanzu
Monitoring.ingress.prometheus_prefix Prefixo de caminho para o Prometheus seqüência de caracteres /
Monitoring.ingress.alertmanager_prefix Prefixo do caminho para o alertmanager seqüência 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 seqüência 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. seqüência de caracteres Chave de certificado gerada
Tabela 2. Campos configuráveis para o Configmap Prometheus_Server
Parâmetro Descrição Tipo Padrão
assessment_interval frequência para avaliar regras duração 1m
scrape_interval frequência para raspar alvos duração 1m
scrape_timeout Quanto tempo leva para expirar o tempo limite de uma solicitação de raspagem duração 10s
rule_files Arquivos de regra especifica uma lista de globs. As regras e os alertas são lidos de todos os arquivos correspondentes arquivo yaml
scrape_configs Uma lista de configurações de raspagem. listar
job_name O nome do job atribuído às métricas extraídas por padrão seqüência de caracteres
kubernetes_sd_configs Lista de configurações de descoberta de serviço do Kubernetes. listar
relabel_configs Lista de configurações de renomeação de destino. listar
ação Ação a ser executada com base na correspondência de regex. seqüência de caracteres
regex Expressão regular com a qual o valor extraído é correspondido. seqüência de caracteres
source_labels Os rótulos de origem selecionam valores de rótulos existentes. seqüência de caracteres
esquema Configura o esquema de protocolo usado para solicitações. seqüência de caracteres
tls_config Define as configurações de TLS da solicitação de raspagem. seqüência de caracteres
ca_file Certificado de CA para validar o certificado do servidor de API com. nome do arquivo
insecure_skip_verify Desabilite a validação do certificado do servidor. booliano
bearer_token_file Informações opcionais de autenticação do arquivo de token de portador. nome do arquivo
substituição Valor de substituição no qual uma substituição de regex é executada se a expressão regular corresponder. seqüência de caracteres
target_label Rótulo no qual o valor resultante é gravado em uma ação de substituição. seqüência 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 EndsAt duração 5m
smtp_smarthost O host SMTP por meio do qual os e-mails são enviados. duração 1m
slack_api_url A URL do webhook do Slack. seqüência de caracteres global.slack_api_url
pagerduty_url A URL pagerduty para a qual enviar solicitações de API. seqüência de caracteres global.pagerduty_url
modelos Arquivos dos quais as definições de modelo de notificação personalizado são lidas caminho do arquivo
group_by agrupar os alertas por rótulo seqüência de caracteres
group_interval definir o tempo de espera antes de enviar uma notificação sobre novos alertas 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 êxito para um alerta duração 4h
receptores Uma lista de receptores de notificação. listar
gravidade Gravidade do incidente. seqüência de caracteres
canal O canal ou usuário para o qual enviar notificações. seqüência de caracteres
html O corpo HTML da notificação por e-mail. seqüência de caracteres
texto O corpo do texto da notificação por e-mail. seqüência de caracteres
send_resolved Se deve ou não notificar sobre alertas resolvidos. nome do arquivo
email_configs Configurações para integração de e-mail booliano
As anotações nos pods permitem um controle preciso do processo de raspagem. Essas anotações devem fazer parte dos metadados do pod. Eles não terão efeito se definidos em outros objetos, como Services ou DaemonSets.
Tabela 4. Anotações do pod do Prometheus
Anotação do pod Descrição
prometheus.io/scrape A configuração padrão raspará todos os pods e, se definida como false, essa anotação excluirá o pod do processo de raspagem.
prometheus.io/path Se o caminho das métricas não for /metrics, 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 do DaemonSet abaixo instruirá o Prometheus a raspar 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