Prometheus est un outil de surveillance open source dédié aux applications cloud-native. Cette rubrique explique comment déployer Prometheus sur un cluster ACK.
Contexte
Cette rubrique aborde la surveillance des composants système et des entités de ressources au sein d'un cluster Kubernetes. Les cibles de surveillance se répartissent en deux catégories :
Surveillance des ressources : suit l'utilisation des ressources par les nœuds, les clusters et les Pods.
Surveillance des applications : suit les métriques internes des applications, telles que le nombre d'utilisateurs en temps réel. Exposez des ports pour activer la surveillance et les alertes au niveau de l'application.
Les cibles de surveillance incluent :
Composants système : composants Kubernetes intégrés tels que l'API Server, cloud-controller-manager et etcd. Configurez la surveillance directement dans leurs fichiers de configuration respectifs.
Entités de ressources statiques : ressources telles que l'état des nœuds et les événements du noyau. Spécifiez-les dans les fichiers de configuration pour activer leur surveillance.
Entités de ressources dynamiques : objets de charge de travail Kubernetes tels que les Deployments, DaemonSets et Pods. Déployez Prometheus pour les surveiller.
Applications personnalisées : exposez des ports et utilisez Prometheus pour collecter des métriques personnalisées depuis vos applications.
Étape 1 : Déployer Prometheus open source
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, accédez à .
-
Sur la page Helm, cliquez sur Deploy. Dans la section Chart, recherchez et sélectionnez **ack-prometheus-operator**, conservez les paramètres par défaut, puis cliquez sur Next.
Le composant s'installe par défaut dans le namespace monitoring, avec un nom correspondant au composant.
Personnalisez le nom de l'application et le namespace selon vos besoins.
-
Sur la page Parameters, sélectionnez la version 12.0.0 du Chart, définissez les paramètres requis, puis cliquez sur OK.
La version 12.0.0 prend en charge la configuration des alertes via des fonctionnalités intégrées.
Paramètres facultatifs :
Configuration des alertes : prend en charge les alertes DingTalk et par e-mail.
Monter un ConfigMap personnalisé sur Prometheus : permet d'appliquer des configurations personnalisées.
Monter un fichier de tableau de bord sur Grafana : ajoute des tableaux de bord personnalisés.
Après l'installation, vérifiez l'état du composant dans la liste des charts Helm sur la page Helm .
Étape 2 : Consulter les tâches de collecte Prometheus
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, accédez à .
Sur la page Services, sélectionnez le namespace monitoring où ack-prometheus-operator est déployé. Dans la colonne Actions pour ack-prometheus-operator-prometheus, cliquez sur Update.
-
Dans la boîte de dialogue, définissez le type sur LoadBalancer. Sélectionnez Create Resource, définissez la Access Method sur Public Access, et définissez la Billing Method sur Pay-as-you-go (Pay-by-CU). Cliquez sur OK.
Consultez la Présentation de la facturation CLB .
Après la mise à jour, copiez l'adresse IP externe. Ouvrez l'interface utilisateur Prometheus à l'adresse
<external_IP_address>:9090, par exemple47.XX.XX.12:9090.-
Dans l'interface utilisateur Prometheus, accédez à pour afficher toutes les tâches de collecte de données.
Si toutes les tâches affichent l'état UP, la collecte de données fonctionne correctement.
-
Dans la barre de menu, cliquez sur Alerts pour afficher les règles d'alerte actuelles.
Sur la page Alerts, vous pouvez consulter les statistiques d'état des alertes : Inactive (89), Pending (3) et Firing (4). Les alertes actuellement déclenchées incluent TargetDown (2 actives) et Watchdog (1 active).
Étape 3 : Consulter les données agrégées dans Grafana
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, accédez à .
Sur la page Services, sélectionnez le namespace où **ack-prometheus-operator** est déployé (monitoring par défaut). Cliquez sur Update dans la colonne Actions pour le service nommé ack-prometheus-operator-grafana.
-
Dans la boîte de dialogue, définissez le type sur LoadBalancer. Sélectionnez Create Resource, définissez la Access Method sur Public Access, et définissez la Billing Method sur Pay-as-you-go (Pay-by-CU). Cliquez sur OK.
Consultez la Présentation de la facturation CLB .
-
Après la mise à jour, copiez l'adresse IP externe. Ouvrez le tableau de bord Grafana à l'adresse
<external_IP_address>(port par défaut : 80), par exemple47.XX.XX.12.
Configuration des alertes
Le composant ack-prometheus-operator prend en charge les alertes DingTalk et par e-mail.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, accédez à .
-
Cliquez sur Create, trouvez ack-prometheus-operator, puis passez à l'étape Next. Sur la page Parameters, sélectionnez la version du Chart et configurez les paramètres comme décrit ci-dessous.
Si ack-prometheus-operator est déjà installé, cliquez sur son nom dans la liste des charts Helm, puis cliquez sur Parameters pour mettre à jour la configuration.
Configurer les alertes DingTalk
Dans le fichier de configuration, localisez le champ
dingtalket définissezenabledsurtrue.-
Dans le champ
token, saisissez l'URL du webhook DingTalk.Consultez la rubrique Utiliser les chatbots DingTalk pour la surveillance et les alertes Kubernetes pour obtenir l'URL du webhook.
-
Dans le champ
alertmanagerconfig, localisez la configurationreceiveret saisissez le nom de l'alerte DingTalk défini dansreceivers. Le nom par défaut estwebhook.
Configurer les alertes par e-mail
Dans la section mise en surbrillance, saisissez les détails de l'e-mail.
Dans le champ
alertmanagerconfig, recherchezreceiveret entrez le nom de l'alerte e-mail défini dansreceivers. Le nom par défaut estmail.
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
Modèle de destinataire d'alerte
Personnalisez les modèles d'alerte dans la section templateFiles de la configuration 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 }}
Monter un ConfigMap personnalisé sur Prometheus
Utilisez un ConfigMap nommé special-config pour monter un fichier de configuration et spécifiez-le comme paramètre --config.file au démarrage du Pod.
-
Créez un ConfigMap.
-
Montez le ConfigMap.
Sur la page Parameters, ajoutez ce qui suit au champ
configmapspour monter le ConfigMap sur/etc/prometheus/configmaps/dans le Pod 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]Exemple de configuration
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"
Configuration de Grafana
Monter un fichier de tableau de bord sur Grafana
Pour monter un ConfigMap de tableau de bord sur un Pod Grafana, utilisez le champ extraConfigmapMounts dans l'assistant Parameters.
extraConfigmapMounts: []
# - name: certs-configmap
# mountPath: /etc/grafana/ssl/
# configMap: certs-configmap
# readOnly: true
Assurez-vous que :
Le tableau de bord existe en tant que ConfigMap dans le cluster et ses libellés correspondent au format des autres ConfigMaps.
-
Le champ
extraConfigmapMountsde la configuration Grafana inclut le ConfigMap du tableau de bord et les informations de montage.mountPath: Définissez sur/tmp/dashboards/.ConfigMap: Le nom de votre ConfigMap personnalisé.name: Le nom du fichier JSON du tableau de bord.
Activer la persistance des tableaux de bord
Exportez les tableaux de bord sous forme de fichiers JSON pour la sauvegarde. Consultez Grafana Export.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
-
Recherchez ack-prometheus-operator et cliquez sur Update. Dans le champ
grafana, configurez l'optionpersistencecomme indiqué ci-dessous.## 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:
Opérations connexes
Désinstaller Prometheus open source
Pour éviter les ressources résiduelles, suivez la procédure correspondant à la version de votre chart Helm. Nettoyez manuellement la release Helm, le namespace, les CRD et le service kubelet.
Le service kubelet n'est pas automatiquement supprimé lors de la désinstallation — il s'agit d'un problème connu de la communauté ( #1523 ). Supprimez-le manuellement comme décrit ci-dessous.
Chart v12.0.0
Console
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
-
Sur la page Clusters, cliquez sur le nom de votre cluster et effectuez les opérations suivantes depuis le volet de navigation de gauche.
Désinstallez la release Helm : Choisissez . Dans la liste des releases Helm, recherchez l'entrée ack-prometheus-operator, cliquez sur Delete dans la colonne Actions et terminez la suppression. Effacez les enregistrements de release.
Supprimez le namespace : Cliquez sur Namespaces and Quotas. Dans la liste des namespaces, recherchez et sélectionnez monitoring, puis supprimez-le.
-
Supprimez les CustomResourceDefinitions (CRD) : Accédez à et cliquez sur l'onglet CRDs. Supprimez toutes les ressources CRD sous le groupe d'API
monitoring.coreos.com:AlertmanagerConfig
Alertmanager
PodMonitor
Probe
Prometheus
PrometheusRule
ServiceMonitor
ThanosRuler
Supprimez le service kubelet : Choisissez Network > Services. Recherchez et supprimez ack-prometheus-operator-kubelet dans le namespace kube-system.
Kubectl
-
Désinstallez la release Helm
helm uninstall ack-prometheus-operator -n monitoring -
Supprimez le namespace
kubectl delete namespace monitoring -
Supprimez les CRD
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 -
Supprimez le service kubelet
kubectl delete service ack-prometheus-operator-kubelet -n kube-system
Chart v65.1.1
Console
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
-
Sur la page Clusters, cliquez sur le nom de votre cluster et effectuez les opérations suivantes depuis le volet de navigation de gauche.
Désinstallez la release Helm : Choisissez . Dans la liste des releases Helm, recherchez l'entrée ack-prometheus-operator, cliquez sur Delete dans la colonne Actions et terminez la suppression. Effacez les enregistrements de release.
Supprimez le namespace : Cliquez sur Namespaces and Quotas. Dans la liste des namespaces, recherchez et sélectionnez monitoring, puis supprimez-le.
-
Supprimez les CustomResourceDefinitions (CRD) : Accédez à et cliquez sur l'onglet CRDs. Supprimez toutes les ressources CRD sous le groupe d'API
monitoring.coreos.com:AlertmanagerConfig
Alertmanager
PodMonitor
Probe
PrometheusAgent
Prometheus
PrometheusRule
ScrapeConfig
ServiceMonitor
ThanosRuler
Supprimez le service kubelet : Choisissez Network > Services. Recherchez et supprimez ack-prometheus-operator-kubelet dans le namespace kube-system.
Kubectl
-
Désinstallez la release Helm
helm uninstall ack-prometheus-operator -n monitoring -
Supprimez le namespace
kubectl delete namespace monitoring -
Supprimez les CRD
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 -
Supprimez le service kubelet
kubectl delete service ack-prometheus-operator-kubelet -n kube-system
Configurer la mise en sourdine des alertes
Les règles de mise en sourdine suppriment les notifications d'alerte correspondantes jusqu'à l'expiration de la période de silence ou la suppression de la règle.
-
Exposez Alertmanager sur le port local 9093 :
kubectl --address 0.0.0.0 port-forward svc/alertmanager-operated 9093 -n monitoring -
Associez une adresse IP élastique (EIP) à votre instance ECS, puis accédez à Alertmanager via
<EIP>:9093.Assurez-vous que le groupe de sécurité autorise le trafic depuis votre adresse IP locale sur le port 9093. Consultez Ajouter une règle de groupe de sécurité .
Cliquez sur Silence pour configurer la mise en sourdine des alertes.
FAQ
Aucune alerte reçue après la configuration de DingTalk
Obtenez l'URL du webhook pour votre robot de discussion DingTalk. Consultez Surveillance des événements.
Localisez le champ dingtalk, définissez enabled sur true et saisissez l'URL du webhook DingTalk dans le champ Token. Reportez-vous à la section Configure DingTalk alerts dans Configuration des alertes.
Erreur lors du déploiement de prometheus-operator
Le message d'erreur suivant s'affiche :
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
Cette erreur survient car les CRD d'un déploiement précédent n'ont pas été nettoyés. Supprimez les CRD et redéployez le composant :
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
Les alertes par e-mail ne fonctionnent pas
Les alertes par e-mail peuvent échouer si vous saisissez votre mot de passe de connexion pour smtp_auth_password au lieu du code d'autorisation. L'adresse du serveur SMTP doit inclure un numéro de port.
Une erreur se produit lorsque vous cliquez sur YAML Update : The current cluster is temporarily unavailable. Please try again later.
Ce problème survient lorsque le fichier de configuration Tiller est trop volumineux, rendant le cluster inaccessible. Réduisez la taille du fichier en supprimant les commentaires et montez-le en tant que ConfigMap. prometheus-operator prend en charge le montage ConfigMap uniquement pour les Pods prometheus et alertmanager. Consultez Monter un ConfigMap personnalisé sur Prometheus.
Activer des fonctionnalités après le déploiement
Activez les fonctionnalités après avoir déployé prometheus-operator. Sur la page des détails du cluster, choisissez . Localisez ack-prometheus-operator et cliquez sur Update dans la colonne Actions. Identifiez la fonctionnalité à activer, configurez-la et cliquez sur OK.
Choisir entre TSDB et les disques Alibaba Cloud
TSDB est disponible dans moins de régions que les disques Alibaba Cloud. Politique de rétention des données :
## How long to retain metrics
##
retention: 10d
Problèmes d'affichage du tableau de bord Grafana
Sur la page des détails du cluster, choisissez . Localisez ack-prometheus-operator et cliquez sur Update dans la colonne Actions. Vérifiez que clusterVersion correspond à la version de votre cluster. Pour les clusters antérieurs à la v1.16, saisissez 1.14.8-aliyun.1. Pour la v1.16 ou ultérieure, saisissez 1.16.6-aliyun.1.
La réinstallation échoue après la suppression du namespace
La suppression du seul namespace peut laisser des configurations résiduelles. Nettoyez les ressources suivantes :
-
Supprimez les permissions RBAC.
-
Supprimez les 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 -
Supprimez les 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
-
-
Supprimez les CRD.
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