Lorsque vous définissez un objectif de niveau de service (SLO) au niveau de l'application dans Alibaba Cloud Service Mesh (ASM), un ensemble de règles Prometheus est généré automatiquement. Cette rubrique explique comment importer ces règles dans votre instance Prometheus afin d'appliquer vos SLO.
Prérequis
Vous avez défini un objectif de niveau de service (SLO) au niveau de l'application.
La surveillance Prometheus est installée dans votre cluster Container Service for Kubernetes (ACK). Pour plus d'informations, consultez les rubriques Surveillance Prometheus open source et Intégrer une instance Prometheus autonome pour la surveillance du maillage.
Étape 1 : Importer les règles dans Prometheus
Cette rubrique part du principe que vous avez déployé Prometheus à l'aide de l'opérateur Prometheus. Dans ce mode, les configurations Prometheus sont gérées via des ressources personnalisées. Pour configurer les règles d'enregistrement et d'alerte, créez un objet PrometheusRule avec les libellés app: ack-prometheus-operator and release: ack-prometheus-operator.
La nécessité d'ajouter ces libellés dépend des paramètres
ruleSelectorde votre ressource personnalisée Prometheus. Si le sélecteurruleSelectorest vide, vous n'avez pas besoin d'ajouter les libellés. Adaptez la configuration à votre environnement.Si vous utilisez une autre méthode pour déployer Prometheus, appliquez les règles générées en utilisant la méthode correspondante. Pour plus d'informations, consultez la documentation officielle de Prometheus.
-
Récupérez le sélecteur
ruleSelectordepuis la console ACK.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 .
Sous l'onglet CRDs, cliquez sur PrometheusRule.
Sous l'onglet Resource Objects, sélectionnez monitoring dans la liste déroulante Namespace. Sur la ligne correspondant à ack-prometheus-operator-prometheus, cliquez sur Edit YAML dans la colonne Actions.
-
Récupérez le champ
ruleSelector.L'exemple suivant illustre une configuration
ruleSelectortypique. Pour que l'opérateur Prometheus sélectionne votre ressourcePrometheusRule, celle-ci doit comporter les libellés définis dansmatchLabels.ruleSelector: matchLabels: app: ack-prometheus-operator release: ack-prometheus-operator
-
Déployez la ressource PrometheusRule.
-
Créez un fichier nommé prometheusrule.yaml contenant le code suivant.
Dans le fichier YAML, le champ
labelsdoit contenir les libellés obtenus à l'étape précédente. Le champspeccontient les règles Prometheus générées.apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: labels: app: ack-prometheus-operator release: ack-prometheus-operator name: asm-rules namespace: monitoring spec: # Replace this with the content of your generated rule file. -
Exécutez la commande suivante dans votre cluster ACK pour appliquer la ressource PrometheusRule.
kubectl apply -f prometheusrule.yaml
-
-
Vérifiez que les règles sont appliquées.
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 .
-
Sur la page ConfigMaps, sélectionnez monitoring dans la liste déroulante Namespace. Sur la ligne correspondant à la configuration Prometheus, cliquez sur Edit YAML dans la colonne Actions.
Le contrôleur
PrometheusRuleconvertit automatiquement la ressource en règles et les ajoute à une ConfigMap que Prometheus peut lire. L'exemple suivant montre le contenu de la ConfigMap, oùmonitoring-asm-rules-fcd9bea9-22b3-462b-8786-424f74f098ec.yamlest la clé du fichier de règles ASM :up{job= alertmanager main,namespace= monitoring } ) ) >= 0.5 for: 5m labels: severity: critical monitoring-asm-rules-fcd9bea9-22b3-462b-8786-424f74f098ec.yaml: | groups: - name: sloth-slo-sli-recordings-httpbin-asm-slo rules:
Étape 2 : Vérifier la surveillance des SLO
Consulter les métriques et les alertes dans Prometheus
-
Connectez-vous à votre cluster ACK à l'aide de kubectl et exécutez la commande suivante pour transférer le service Prometheus vers un port local.
kubectl --namespace monitoring port-forward svc/ack-prometheus-operator-prometheus 9090 Cliquez sur https://localhost:9090 pour accéder à la console Prometheus.
-
Dans l'interface utilisateur de Prometheus, saisissez
asm_slo_infodans le navigateur d'expressions et cliquez sur Execute pour afficher votre configuration SLO.La requête renvoie le résultat
asm_slo_info{asm_slo="asm-slo",slo_id="httpbin-asm-slo",slo_mode="cli-gen-prom",slo_objective="99.9",slo_service="httpbin",slo_spec="prometheus/v1",slo_version="dev"}, ce qui indique que vos règles d'enregistrement Prometheus sont correctement configurées. -
En haut de la page, cliquez sur Alerts pour afficher les règles d'alerte.
La présence des deux règles suivantes indique que vos règles d'alerte Prometheus sont correctement configurées. Deux règles d'alerte nommées asm-alert s'affichent, toutes deux indiquant 0 active (aucune alerte active).
Scénario 1 : Simuler un trafic normal
-
Exécutez le script suivant pour simuler un trafic avec un taux de réussite de 99,5 %.
Remplacez
{ingress-gateway-ip}par l'adresse IP réelle de votre passerelle d'entrée. Pour obtenir l'adresse IP de la passerelle d'entrée, consultez la rubrique Afficher les informations de la passerelle d'entrée.#!/bin/bash for i in `seq 200` do if (( $i == 100 )) then curl -I http://{ingress-gateway-ip}/status/500; else curl -I http://{ingress-gateway-ip}/; fi echo "OK" sleep 0.01; done; -
Revenez à l'interface utilisateur de Prometheus, saisissez
slo:period_error_budget_remaining:ratiodans le navigateur d'expressions, puis cliquez sur Execute. Observez les variations de votre budget d'erreur restant.Après l'exécution de la requête, le graphique montre que le ratio du budget d'erreur restant chute brusquement d'environ 1,0 à environ 0,93, ce qui indique que le budget d'erreur est consommé rapidement.
Le tableau suivant décrit les principales métriques SLO. Pour plus d'informations, consultez la rubrique Présentation des objectifs de niveau de service (SLO).
Métrique
Description
slo:period_error_budget_remaining:ratio
Le budget d'erreur restant pour la période SLO de 30 jours.
slo:sli_error:ratio_rate30d
Le taux d'erreur moyen sur la période SLO de 30 jours.
slo:period_burn_rate:ratio
Le taux de consommation sur la période SLO de 30 jours.
slo:current_burn_rate:ratio
Le taux de consommation actuel.
Scénario 2 : Simuler un trafic erroné
Déclenchez manuellement des pannes pour tester les règles d'alerte.
-
Exécutez le script suivant pour simuler un trafic avec un taux de réussite de 50 %, ce qui correspond à un taux de consommation de 50.
Remplacez
{ingress-gateway-ip}par l'adresse IP réelle de votre passerelle d'entrée.#!/bin/bash for i in `seq 200` do curl -I http://{ingress-gateway-ip}/ curl -I http://{ingress-gateway-ip}/status/500; echo "OK" sleep 0.01; done; -
Revenez à la page Alerts de la console Prometheus pour voir les alertes déclenchées.
Sur la page Alerts, sous le chemin du fichier de règles
monitoring-asm-rules.yaml, dans le groupe de règlessloth-slo-alerts-httpbin-asm-slo2, deux règles d'alerte asm-alert sont à l'état actif (1 active) :Première règle :
sloth_severity=page,sloth_window=30m, les libellés incluentalertlabel="bbb",pagelabels="ddd",sloth_id="httpbin-asm-slo2".Deuxième règle :
sloth_severity=ticket,sloth_window=2h, les libellés incluentticketlabel="eee".
Afficher les alertes dans la console Alertmanager
Dans le framework Prometheus, le composant Alertmanager collecte les alertes générées par le serveur Prometheus et les achemine vers les destinataires en fonction de votre configuration.
-
Exécutez la commande suivante pour transférer le service ack-prometheus-operator-alertmanager vers un port local.
kubectl --namespace monitoring port-forward svc/ack-prometheus-operator-alertmanager 9093 Cliquez sur https://localhost:9093 pour accéder à la console Alertmanager.
-
Sur la page Alertmanager, cliquez sur l'icône de développement
pour afficher les détails des alertes.La liste des alertes Alertmanager affiche deux alertes personnalisées de type asm-alert : l'une avec
slo_severity=page(slo_window=30m) et l'autre avecslo_severity=ticket(slo_window=2h), ce qui indique que les règles d'alerte SLO ASM ont été déclenchées avec succès.