O Prometheus é uma ferramenta de monitoramento open source para aplicações cloud nativas. Este tópico descreve como implantar o Prometheus em um cluster ACK.
Contexto
Este tópico aborda como monitorar componentes do sistema e entidades de recursos em um cluster Kubernetes. Os alvos de monitoramento se dividem em duas categorias:
Monitoramento de recursos: acompanha o uso de recursos de nós, clusters e Pods.
Monitoramento de aplicações: acompanha métricas internas da aplicação, como contagens de usuários em tempo real. Exponha portas para habilitar 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ós e eventos do kernel. Especifique-os nos arquivos de configuração para habilitar o monitoramento.
Entidades de recursos dinâmicos: objetos de carga de trabalho 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 console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em 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.
O componente é instalado no namespace monitoring por padrão, com 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 recursos integrados.
Parâmetros opcionais:
Alert configuration: oferece suporte a alertas via 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 console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em 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 está implantado. Na coluna Actions do service 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 defina 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 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 menu, clique em Alerts para visualizar as regras de alerta atuais.
Na página Alerts, é possível verificar as estatísticas de status dos alertas: Inactive (89), Pending (3) e Firing (4). Os alertas disparados no momento incluem TargetDown (2 ativos) e Watchdog (1 ativo).
Etapa 3: Visualizar dados agregados no Grafana
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em 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 defina 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 console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Clique em Create, localize o 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 a seguir.
Se o ack-prometheus-operator já estiver instalado, clique em seu nome na lista de charts Helm e, em seguida, clique em Parameters para atualizar a configuração.
Configurar alertas via 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ção dereceivere insira o nome do alerta DingTalk definido emreceivers. O nome padrão éwebhook.
Configurar alertas por e-mail
Na seção destacada, insira os dados 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 }}
Monte um ConfigMap personalizado no Prometheus
Use um ConfigMap chamado special-config para montar um arquivo de configuração e especificá-lo como o parâmetro --config.file na inicialização do Pod.
-
Crie um ConfigMap.
-
Monte o ConfigMap.
Na página Parameters, adicione o trecho a seguir 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
Monte um arquivo de painel no Grafana
Para montar um ConfigMap de painel em um Pod do Grafana, utilize o campo extraConfigmapMounts no assistente Parameters.
extraConfigmapMounts: []
# - name: certs-configmap
# mountPath: /etc/grafana/ssl/
# configMap: certs-configmap
# readOnly: true
Certifique-se de que:
O painel existe como ConfigMap no cluster e seus rótulos seguem o formato dos demais ConfigMaps.
-
O campo
extraConfigmapMountsna configuração do Grafana inclui 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.
Ative a persistência de painéis
Exporte painéis como arquivos JSON para backup. Consulte Exportação do Grafana.
Faça logon no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em no nome do cluster desejado. No painel de navegação à esquerda, clique em .
-
Localize ack-prometheus-operator e clique em Update. No campo
grafana, configure a opçãopersistenceconforme o exemplo 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 Helm chart. Remova manualmente o Helm release, 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 na comunidade ( #1523 ). Exclua-o manualmente conforme descrito a seguir.
Chart v12.0.0
Console
Faça logon no console do ACK. No painel de navegação à esquerda, clique em Clusters.
-
Na página Clusters, clique em no nome do cluster desejado e execute as operações a seguir pelo painel de navegação à esquerda.
Desinstale o Helm release: acesse . Na lista de Helm releases, localize a entrada ack-prometheus-operator, clique em Delete na coluna Actions e conclua a exclusão. Limpe os registros do release.
Exclua o namespace: clique em Namespaces and Quotas. Na lista de namespaces, localize e selecione monitoring, depois exclua-o.
-
Exclua os CustomResourceDefinitions (CRDs): acesse e clique em na aba CRDs. Exclua todos os recursos CRD do grupo de API
monitoring.coreos.com:AlertmanagerConfig
Alertmanager
PodMonitor
Probe
Prometheus
PrometheusRule
ServiceMonitor
ThanosRuler
Exclua o service do kubelet: acesse Network > Services. Localize e exclua ack-prometheus-operator-kubelet no namespace kube-system.
Kubectl
-
Desinstale o Helm release
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 logon no console do ACK. No painel de navegação à esquerda, clique em Clusters.
-
Na página Clusters, clique em no nome do cluster desejado e execute as operações a seguir pelo painel de navegação à esquerda.
Desinstale o Helm release: acesse . Na lista de Helm releases, localize a entrada ack-prometheus-operator, clique em Delete na coluna Actions e conclua a exclusão. Limpe os registros do release.
Exclua o namespace: clique em Namespaces and Quotas. Na lista de namespaces, localize e selecione monitoring, depois exclua-o.
-
Exclua os CustomResourceDefinitions (CRDs): acesse e clique em na aba CRDs. Exclua todos os recursos CRD do grupo de API
monitoring.coreos.com:AlertmanagerConfig
Alertmanager
PodMonitor
Probe
PrometheusAgent
Prometheus
PrometheusRule
ScrapeConfig
ServiceMonitor
ThanosRuler
Exclua o service do kubelet: acesse Network > Services. Localize e exclua ack-prometheus-operator-kubelet no namespace kube-system.
Kubectl
-
Desinstale o Helm release
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
Configure o silenciamento de alertas
Regras de silenciamento suprimem notificações de alertas correspondentes até que o período de silenciamento 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, depois acesse o Alertmanager em
<EIP>:9093.Certifique-se de que o grupo de segurança permite 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
Alertas não recebidos após a configuração do DingTalk
Obtenha a URL de webhook do seu chatbot DingTalk. Consulte Event Monitoring.
Localize o campo dingtalk, defina enabled como true e insira a URL de webhook do DingTalk no campo Token. Consulte Configure DingTalk alerts em Alert configuration.
Erro ao implantar o prometheus-operator
A seguinte mensagem de erro é exibida:
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 removidos. Exclua os CRDs e reimplante 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 se você informar a senha de login em vez do código de autorização no campo smtp_auth_password. O endereço do servidor SMTP deve incluir o número da 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 os comentários e monte-o como um ConfigMap. O prometheus-operator suporta montagem de ConfigMap apenas para Pods do prometheus e do 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 que deseja ativar, configure-o e clique em OK.
Escolher entre TSDB e discos Alibaba Cloud
O TSDB está disponível em menos regiões do que os discos 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.
A reinstalação falha após excluir o 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