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
- Provisione um cluster. Consulte o Fluxo de trabalho para clusters de Tanzu Kubernetes provisionamento.
Observação: Para instalar a extensão do Prometheus, você deve implantar um cluster que usa o serviceDomain padrão (
cluster.local
). - Conecte-se ao cluster. Consulte o Conectar-se a um Tanzu Kubernetes cluster como um vCenter Single Sign-On usuário.
- Baixe o pacote TKG Extensions v1.3.1 para o host do cliente no qual você executa o kubectl.
- Pré-requisitos de instalação das extensões TKG no cluster Tanzu Kubernetes de destino.
Implantar a extensão do Prometheus
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. |
- Verifique se você concluiu cada um dos pré-requisitos de extensão. Consulte o Pré-requisitos de extensão.
- Altere o diretório para a extensão Prometheus.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/prometheus
- 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
- 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
- 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" ...
- 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 namespacetanzu-system-monitoring
. Verifique usandokubectl get secrets -n tanzu-system-monitoring
. - 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
. - Verifique o status do aplicativo Prometheus.
kubectl get app prometheus -n tanzu-system-monitoring
O status deve mudar deReconciling
paraReconcile succeeded
. Se o status forReconcile failed
, consulte Solução de problemas. - Visualize informações detalhadas sobre o aplicativo Prometheus.
kubectl get app prometheus -n tanzu-system-monitoring -o yaml
- Verifique os DaemonSets do Prometheus.
kubectl get daemonsets -n tanzu-system-monitoring
- 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.
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.
- 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
- 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, alteresyncPeriod
emprometheus-extension.yaml
para um valor menor e aplique a extensão de bit fluente usandokubectl apply -f prometheus-extension.yaml
. - 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. - Visualize o status detalhado e solucione problemas.
kubectl get app prometheus -n tanzu-system-monitoring -o yaml
Excluir a extensão do Prometheus
- Altere o diretório para a extensão Prometheus.
cd /extensions/monitoring/prometheus/
- Exclua o aplicativo Prometheus.
kubectl delete app prometheus -n tanzu-system-monitoring
Resultado esperado:
app.kappctrl.k14s.io "prometheus" deleted
. - 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
. - 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
- 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
- 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
- Exclua a implantação existente do Prometheus. Consulte o Excluir a extensão do Prometheus.
- Implante a extensão do Prometheus. Consulte o Implantar a extensão do Prometheus.
Configurar a extensão do Prometheus
/extensions/monitoring/prometheus/prometheus-data-values.yaml
.
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 |
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 |
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 |
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 |
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). |
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