O Prometheus é uma ferramenta de monitoramento open source para aplicações cloud-native. Este tópico descreve como implantar o Prometheus em um cluster ACK.
Contexto
Este tópico aborda o monitoramento de componentes do sistema e entidades de recursos em um cluster Kubernetes. Os alvos de monitoramento dividem-se em duas categorias:
Monitoramento de recursos: rastreia a utilização de recursos de nós, clusters e Pods.
Monitoramento de aplicações: acompanha métricas internas da aplicação, como contagem de usuários em tempo real. Exponha portas para ativar o monitoramento e os alertas no nível da aplicação.
Os alvos de monitoramento incluem:
Componentes do sistema: componentes nativos do Kubernetes, como API Server, cloud-controller-manager e etcd. Configure o monitoramento nos respectivos arquivos de configuração.
Entidades de recursos estáticos: recursos como status de nó e eventos de kernel. Especifique-os nos arquivos de configuração para ativar o monitoramento.
Entidades de recursos dinâmicos: objetos de workload do Kubernetes, como Deployments, DaemonSets e Pods. Implante o Prometheus para monitorá-los.
Aplicações personalizadas: exponha portas e use o Prometheus para coletar métricas personalizadas das suas aplicações.
Etapa 1: Implantar o Prometheus open source
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Na página Helm, clique em Deploy. Na seção Chart, pesquise e selecione **ack-prometheus-operator**, mantenha as configurações padrão e clique em Next.
Por padrão, o componente é instalado no namespace monitoring, recebendo o nome do próprio componente.
Personalize o nome da aplicação e o namespace conforme necessário.
-
Na página Parameters, selecione a versão do Chart 12.0.0, defina os parâmetros necessários e clique em OK.
A versão 12.0.0 oferece suporte à configuração de alertas com funcionalidades integradas.
Parâmetros opcionais:
Alert configuration: oferece suporte a alertas por DingTalk e e-mail.
Mount a custom ConfigMap to Prometheus: permite configurações personalizadas.
Mount a dashboard file to Grafana: adiciona painéis personalizados.
Após a instalação, verifique o status do componente na lista de charts Helm na página Helm .
Etapa 2: Visualizar tarefas de coleta do Prometheus
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Services, selecione o namespace monitoring onde o ack-prometheus-operator foi implantado. Na coluna Actions referente ao ack-prometheus-operator-prometheus, clique em Update.
-
Na caixa de diálogo, defina Type como LoadBalancer. Selecione Create Resource, defina Access Method como Public Access e configure Billing Method como Pay-as-you-go (Pay-by-CU). Clique em OK.
Consulte CLB Billing Overview .
Após a atualização, copie o endereço IP externo. Acesse a interface do Prometheus em
<external_IP_address>:9090, por exemplo,47.XX.XX.12:9090.-
Na interface do Prometheus, acesse para visualizar todas as tarefas de coleta de dados.
Se todas as tarefas exibirem UP, a coleta de dados está funcionando corretamente.
-
Na barra de menus, clique em Alerts para visualizar as regras de alerta atuais.
Na página Alerts, visualize estatísticas de status dos alertas: Inactive (89), Pending (3) e Firing (4). Os alertas acionados no momento incluem TargetDown (2 ativos) e Watchdog (1 ativo).
Etapa 3: Visualizar dados agregados no Grafana
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Services, selecione o namespace onde o **ack-prometheus-operator** está implantado (monitoring por padrão). Clique em Update na coluna Actions do Service chamado ack-prometheus-operator-grafana.
-
Na caixa de diálogo, defina Type como LoadBalancer. Selecione Create Resource, defina Access Method como Public Access e configure Billing Method como Pay-as-you-go (Pay-by-CU). Clique em OK.
Consulte CLB Billing Overview .
-
Após a atualização, copie o endereço IP externo. Abra o painel do Grafana em
<external_IP_address>(porta padrão: 80), por exemplo,47.XX.XX.12.
Configuração de alertas
O componente ack-prometheus-operator oferece suporte a alertas via DingTalk e e-mail.
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Clique em Create, localize ack-prometheus-operator e prossiga para a etapa Next. Na página Parameters, selecione a versão do Chart e configure os parâmetros conforme descrito abaixo.
Caso o ack-prometheus-operator já esteja instalado, clique no respectivo nome na lista de charts Helm e, em seguida, clique em Parameters para atualizar a configuração.
Configurar alertas do DingTalk
No arquivo de configuração, localize o campo
dingtalke definaenabledcomotrue.-
No campo
token, insira a URL do webhook do DingTalk.Consulte Use DingTalk Chatbots for Kubernetes Monitoring and Alerting para obter a URL do webhook.
-
No campo
alertmanagerconfig, localize a configuraçãoreceivere insira o nome do alerta do DingTalk definido emreceivers. O nome padrão éwebhook.
Configurar alertas por e-mail
Na seção destacada, insira os detalhes do e-mail.
No campo
alertmanagerconfig, localizereceivere insira o nome do alerta por e-mail definido emreceivers. O nome padrão émail.
config:
global:
resolve_timeout: 5m
route:
group_by: ['job']
group_wait: 1m
group_interval: 1m
repeat_interval: 2m
receiver: "null"
routes:
- match:
alertname: Watchdog
receiver: "null"
receivers:
- name: "null"
#- name: webhook
# webhook_configs:
# - url: http://ack-prometheus-operator-alertmanager.monitoring:8060/dingtalk/ops_dingding/send
# send_resolved: true
#- name: 'mail'
# email_configs:
# - to: 'xxxxxxx@qq.com' #receive address
# smarthost: 'smtp.163.com:465' #stmp server address
# from: 'xxxxx@163.com' #sender address
# auth_username: 'xxxxx@163.com' #email-username
# auth_password: 'xxxxxxxxx' #email-password(Authorization code)
# require_tls: false #tls switch
# send_resolved: true
Modelo de receptor de alertas
Personalize os modelos de alerta na seção templateFiles da configuração do alertmanager.
##
templateFiles: {}
#
# An example template:
# template_1.tmpl: |-
# {{ define "cluster" }}{{ .ExternalURL | reReplaceAll ".*alertmanager\.(.*)" "$1" }}{{ end }}
#
# {{ define "slack.myorg.text" }}
# {{- $root := . -}}
# {{ range .Alerts }}
# *Alert:* {{ .Annotations.summary }} - `{{ .Labels.severity }}`
# *Cluster:* {{ template "cluster" $root }}
# *Description:* {{ .Annotations.description }}
# *Graph:* <{{ .GeneratorURL }}|:chart_with_upwards_trend:>
# *Runbook:* <{{ .Annotations.runbook }}|:spiral_note_pad:>
# *Details:*
# {{ range .Labels.SortedPairs }} • *{{ .Name }}:* `{{ .Value }}`
# {{ end }}
Montar um ConfigMap personalizado no Prometheus
Use um ConfigMap chamado special-config para montar um arquivo de configuração e especificá-lo como parâmetro --config.file na inicialização do Pod.
-
Crie um ConfigMap.
-
Monte o ConfigMap.
Na página Parameters, adicione o seguinte ao campo
configmapspara montar o ConfigMap em/etc/prometheus/configmaps/no Pod do Prometheus.## ConfigMaps is a list of ConfigMaps in the same namespace as the Alertmanager object, which shall be mounted ## into the Alertmanager Pods. ## The ConfigMaps are mounted into /etc/alertmanager/configmaps/. ## configMaps: [special-config]Exemplo de configuração de
prometheusconfigmaps:## ConfigMaps is a list of ConfigMaps in the same namespace as the Prometheus ## The ConfigMaps are mounted into /etc/prometheus/configmaps/. ## configMaps: - "special-config" - "detail-config"
Configuração do Grafana
Montar um arquivo de painel no Grafana
Para montar um ConfigMap de painel em um Pod do Grafana, use o campo extraConfigmapMounts no assistente de Parameters.
extraConfigmapMounts: []
# - name: certs-configmap
# mountPath: /etc/grafana/ssl/
# configMap: certs-configmap
# readOnly: true
Certifique-se de que:
O painel exista como um ConfigMap no cluster e seus rótulos sigam o formato dos demais ConfigMaps.
-
O campo
extraConfigmapMountsna configuração do Grafana inclua o ConfigMap do painel e as informações de montagem.mountPath: defina como/tmp/dashboards/.ConfigMap: o nome do seu ConfigMap personalizado.name: o nome do arquivo JSON do painel.
Ativar persistência de painéis
Exporte os painéis como arquivos JSON para backup. Consulte Grafana Export.
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Localize ack-prometheus-operator e clique em Update. No campo
grafana, configure a opçãopersistenceconforme mostrado abaixo.## persistence: #Persistent switch enabled: false #storageClass Name,there are four types of storageclasses: alicloud-disk-available,alicloud-disk-efficiency,alicloud-disk-essd,alicloud-disk-ssd storageClassName: alicloud-disk-efficiency accessModes: - ReadWriteOnce size: 30Gi # annotations: {} # subPath: "" #existingClaim:
Operações relacionadas
Desinstalar o Prometheus open source
Para evitar recursos residuais, siga o procedimento correspondente à versão do seu chart Helm. Limpe manualmente a release do Helm, o namespace, os CRDs e o Service do kubelet.
O Service do kubelet não é excluído automaticamente durante a desinstalação — trata-se de um problema conhecido da comunidade ( #1523 ). Exclua-o manualmente conforme descrito abaixo.
Chart v12.0.0
Console
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
-
Na página Clusters, clique no nome do seu cluster e execute as operações a seguir no painel de navegação à esquerda.
Desinstale a release do Helm: escolha . Na lista de releases do Helm, localize a entrada ack-prometheus-operator, clique em Delete na coluna Actions e conclua a exclusão. Limpe os registros da release.
Exclua o namespace: clique em Namespaces and Quotas. Na lista de namespaces, localize e selecione monitoring e exclua-o.
-
Exclua as CustomResourceDefinitions (CRDs): acesse e clique na aba CRDs. Exclua todos os recursos de CRD sob o grupo de API
monitoring.coreos.com:AlertmanagerConfig
Alertmanager
PodMonitor
Probe
Prometheus
PrometheusRule
ServiceMonitor
ThanosRuler
Exclua o Service do kubelet: escolha Network > Services. Localize e exclua ack-prometheus-operator-kubelet no namespace kube-system.
Kubectl
-
Desinstale a release do Helm
helm uninstall ack-prometheus-operator -n monitoring -
Exclua o namespace
kubectl delete namespace monitoring -
Exclua os CRDs
kubectl delete crd alertmanagerconfigs.monitoring.coreos.com kubectl delete crd alertmanagers.monitoring.coreos.com kubectl delete crd podmonitors.monitoring.coreos.com kubectl delete crd probes.monitoring.coreos.com kubectl delete crd prometheuses.monitoring.coreos.com kubectl delete crd prometheusrules.monitoring.coreos.com kubectl delete crd servicemonitors.monitoring.coreos.com kubectl delete crd thanosrulers.monitoring.coreos.com -
Exclua o Service do kubelet
kubectl delete service ack-prometheus-operator-kubelet -n kube-system
Chart v65.1.1
Console
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
-
Na página Clusters, clique no nome do seu cluster e execute as operações a seguir no painel de navegação à esquerda.
Desinstale a release do Helm: escolha . Na lista de releases do Helm, localize a entrada ack-prometheus-operator, clique em Delete na coluna Actions e conclua a exclusão. Limpe os registros da release.
Exclua o namespace: clique em Namespaces and Quotas. Na lista de namespaces, localize e selecione monitoring e exclua-o.
-
Exclua as CustomResourceDefinitions (CRDs): acesse e clique na aba CRDs. Exclua todos os recursos de CRD sob o grupo de API
monitoring.coreos.com:AlertmanagerConfig
Alertmanager
PodMonitor
Probe
PrometheusAgent
Prometheus
PrometheusRule
ScrapeConfig
ServiceMonitor
ThanosRuler
Exclua o Service do kubelet: escolha Network > Services. Localize e exclua ack-prometheus-operator-kubelet no namespace kube-system.
Kubectl
-
Desinstale a release do Helm
helm uninstall ack-prometheus-operator -n monitoring -
Exclua o namespace
kubectl delete namespace monitoring -
Exclua os CRDs
kubectl delete crd alertmanagerconfigs.monitoring.coreos.com kubectl delete crd alertmanagers.monitoring.coreos.com kubectl delete crd podmonitors.monitoring.coreos.com kubectl delete crd probes.monitoring.coreos.com kubectl delete crd prometheusagents.monitoring.coreos.com kubectl delete crd prometheuses.monitoring.coreos.com kubectl delete crd prometheusrules.monitoring.coreos.com kubectl delete crd scrapeconfigs.monitoring.coreos.com kubectl delete crd servicemonitors.monitoring.coreos.com kubectl delete crd thanosrulers.monitoring.coreos.com -
Exclua o Service do kubelet
kubectl delete service ack-prometheus-operator-kubelet -n kube-system
Configurar silenciamento de alertas
As regras de silenciamento suprimem notificações de alerta correspondentes até que o período de silêncio expire ou a regra seja excluída.
-
Exponha o Alertmanager na porta local 9093:
kubectl --address 0.0.0.0 port-forward svc/alertmanager-operated 9093 -n monitoring -
Associate an Elastic IP address (EIP) with your ECS instance e, em seguida, acesse o Alertmanager em
<EIP>:9093.Certifique-se de que o grupo de segurança permita tráfego do seu IP local na porta 9093. Consulte Add a Security Group Rule .
Clique em Silence para configurar o silenciamento de alertas.
Perguntas frequentes
Nenhum alerta recebido após configuração do DingTalk
Obtenha a URL do webhook para o seu chatbot do DingTalk. Consulte Event Monitoring.
Localize o campo dingtalk, defina enabled como true e insira a URL do webhook do DingTalk no campo Token. Consulte Configurar alertas do DingTalk em Alert configuration.
Erro ao implantar prometheus-operator
A seguinte mensagem de erro é relatada:
Can't install release with errors: rpc error: code = Unknown desc = object is being deleted: customresourcedefinitions.apiextensions.k8s.io "xxxxxxxx.monitoring.coreos.com" already exists
Esse erro ocorre porque os CRDs de uma implantação anterior não foram limpos. Exclua os CRDs e reimplemente o componente:
kubectl delete crd prometheuses.monitoring.coreos.com
kubectl delete crd prometheusrules.monitoring.coreos.com
kubectl delete crd servicemonitors.monitoring.coreos.com
kubectl delete crd alertmanagers.monitoring.coreos.com
Alertas por e-mail não funcionam
Os alertas por e-mail podem falhar caso você insira sua senha de login em smtp_auth_password em vez do código de autorização. O endereço do servidor SMTP deve incluir um número de porta.
Ocorre um erro ao clicar em YAML Update: The current cluster is temporarily unavailable. Please try again later.
Isso acontece quando o arquivo de configuração do Tiller é muito grande, tornando o cluster inacessível. Reduza o tamanho do arquivo removendo comentários e monte-o como um ConfigMap. O prometheus-operator oferece suporte à montagem de ConfigMap apenas para Pods do prometheus e alertmanager. Consulte Mount a custom ConfigMap to Prometheus.
Ativar recursos após a implantação
Ative recursos após implantar o prometheus-operator. Na página de detalhes do cluster, escolha . Localize ack-prometheus-operator e clique em Update na coluna Actions. Encontre o recurso a ser ativado, configure-o e clique em OK.
Escolher entre TSDB e discos do Alibaba Cloud
O TSDB está disponível em menos regiões do que os discos do Alibaba Cloud. Política de retenção de dados:
## How long to retain metrics
##
retention: 10d
Problemas de exibição no painel do Grafana
Na página de detalhes do cluster, escolha . Localize ack-prometheus-operator e clique em Update na coluna Actions. Verifique se clusterVersion corresponde à versão do seu cluster. Para clusters anteriores à v1.16, insira 1.14.8-aliyun.1. Para v1.16 ou posterior, insira 1.16.6-aliyun.1.
Reinstalação falha após exclusão do namespace
Excluir apenas o namespace pode deixar configurações residuais. Limpe os seguintes recursos:
-
Exclua as permissões RBAC.
-
Exclua os ClusterRoles.
kubectl delete ClusterRole ack-prometheus-operator-grafana-clusterrole kubectl delete ClusterRole ack-prometheus-operator-kube-state-metrics kubectl delete ClusterRole psp-ack-prometheus-operator-kube-state-metrics kubectl delete ClusterRole psp-ack-prometheus-operator-prometheus-node-exporter kubectl delete ClusterRole ack-prometheus-operator-operator kubectl delete ClusterRole ack-prometheus-operator-operator-psp kubectl delete ClusterRole ack-prometheus-operator-prometheus kubectl delete ClusterRole ack-prometheus-operator-prometheus-psp -
Exclua os ClusterRoleBindings.
kubectl delete ClusterRoleBinding ack-prometheus-operator-grafana-clusterrolebinding kubectl delete ClusterRoleBinding ack-prometheus-operator-kube-state-metrics kubectl delete ClusterRoleBinding psp-ack-prometheus-operator-kube-state-metrics kubectl delete ClusterRoleBinding psp-ack-prometheus-operator-prometheus-node-exporter kubectl delete ClusterRoleBinding ack-prometheus-operator-operator kubectl delete ClusterRoleBinding ack-prometheus-operator-operator-psp kubectl delete ClusterRoleBinding ack-prometheus-operator-prometheus kubectl delete ClusterRoleBinding ack-prometheus-operator-prometheus-psp
-
-
Exclua os CRDs.
kubectl delete crd alertmanagerconfigs.monitoring.coreos.com kubectl delete crd alertmanagers.monitoring.coreos.com kubectl delete crd podmonitors.monitoring.coreos.com kubectl delete crd probes.monitoring.coreos.com kubectl delete crd prometheuses.monitoring.coreos.com kubectl delete crd prometheusrules.monitoring.coreos.com kubectl delete crd servicemonitors.monitoring.coreos.com kubectl delete crd thanosrulers.monitoring.coreos.com