Récupération de sources Prometheus supplémentaires et importation de ces métriques
L'agent CloudWatch avec surveillance Prometheus a besoin de deux configurations pour récupérer les métriques Prometheus. L'une concerne les configurations standard Prometheus, comme décrit dans <scrape_config>
Pour les clusters Amazon EKS, les configurations sont définies dans prometheus-eks.yaml (pour le type de lancement EC2) ouprometheus-eks-fargate.yaml (pour le type de lancement Fargate) sous la forme de deux cartes de configuration :
-
La section
name: prometheus-configcontient les paramètres pour la récupération Prometheus. -
La section
name: prometheus-cwagentconfigcontient la configuration de l'agent CloudWatch. Vous pouvez utiliser cette section pour configurer la manière dont les métriques Prometheus sont collectées par CloudWatch. Par exemple, vous spécifiez les métriques à importer dans CloudWatch et définissez leurs dimensions.
Pour les clusters Kubernetes s'exécutant sur des instances Amazon EC2, les configurations sont définies dans le fichier YAML prometheus-k8s.yaml sous la forme de deux cartes de configuration :
-
La section
name: prometheus-configcontient les paramètres pour la récupération Prometheus. -
La section
name: prometheus-cwagentconfigcontient la configuration de l'agent CloudWatch.
Pour récupérer des sources de métriques Prometheus supplémentaires et les importer dans CloudWatch, vous devez modifier à la fois la configuration de récupération Prometheus et la configuration de l'agent CloudWatch, puis redéployer l'agent avec la configuration mise à jour.
Exigences de groupe de sécurité VPC
Les règles d'entrée des groupes de sécurité pour les applications Prometheus doivent ouvrir les ports Prometheus à l'agent CloudWatch pour que les métriques Prometheus soient récupérées par l'adresse IP privée.
Les règles de sortie du groupe de sécurité de l'agent CloudWatch doivent lui permettre de se connecter au port des applications Prometheus par IP privée.
Configuration de récupération Prometheus
L'agent CloudWatch prend en charge les configurations de récupération Prometheus standard comme décrit dans <scrape_config>
global: scrape_interval: 1m scrape_timeout: 10s
-
scrape_interval– Définit la fréquence à laquelle récupérer les cibles.
-
scrape_timeout– Définit le temps d'attente avant l'expiration d'une requête de récupération.
Vous pouvez également définir différentes valeurs pour ces paramètres au niveau de la tâche, afin de remplacer les configurations globales.
Tâches de récupération Prometheus
Les fichiers YAML de l'agent CloudWatch contiennent déjà des tâches de récupération par défaut configurées. Par exemple, dans prometheus-eks.yaml, les tâches de récupération par défaut sont configurées dans les lignes job_name de la section scrape_configs. Dans ce fichier, la section kubernetes-pod-jmx par défaut suivante recoupe les métriques de JMX Exporter.
- job_name: 'kubernetes-pod-jmx' sample_limit: 10000 metrics_path: /metrics kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__address__] action: keep regex: '.*:9404$' - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - action: replace source_labels: - __meta_kubernetes_namespace target_label: Namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: pod_name - action: replace source_labels: - __meta_kubernetes_pod_container_name target_label: container_name - action: replace source_labels: - __meta_kubernetes_pod_controller_name target_label: pod_controller_name - action: replace source_labels: - __meta_kubernetes_pod_controller_kind target_label: pod_controller_kind - action: replace source_labels: - __meta_kubernetes_pod_phase target_label: pod_phase
Chacune de ces cibles par défaut est récupérée et les métriques sont envoyées à CloudWatch dans des évènements de journaux à l'aide du format de métrique intégré. Pour plus d'informations, consultez . Intégration de métriques dans les journaux.
Les évènements de journaux des clusters Amazon EKS et Kubernetes sont stockés dans le groupe de journaux /aws/ecs/containerinsights/cluster_name/prometheus dans CloudWatch Logs. Les évènements de journaux des clusters Amazon ECS sont stockés dans le groupe de journaux /aws/ecs/containerinsights/cluster_name/prometheus.
Chaque tâche de récupération est contenue dans un flux de journaux différent au sein de ce groupe de journaux. Par exemple, la tâche de récupération Prometheus kubernetes-pod-appmesh-envoy est définie pour App Mesh. Toutes les métrique Prometheus App Mesh des clusters Amazon EKS et Kubernetes sont ainsi envoyées au flux de journaux appelé /aws/containerinsights/cluster_name>prometheus/kubernetes-pod-appmesh-envoy/.
Pour ajouter une nouvelle cible de récupération, vous ajoutez une nouvelle section job_name à la section scrape_configs du fichier YAML et redémarrez l'agent. Pour un exemple de ce processus, consultez Didacticiel pour l'ajout d'une nouvelle cible de récupération Prometheus : métrique du serveur d'API Prometheus.
Configuration de l'agent CloudWatch pour Prometheus
Le fichier de configuration d'agent CloudWatch comporte une section prometheus sous metrics_collected pour la configuration de récupération Prometheus. Elle inclut les options de configuration suivantes :
-
cluster_name– Spécifie le nom du cluster à ajouter en tant qu'étiquette dans l'évènement du journal. Ce champ est facultatif. Si vous l'omettez, l'agent peut détecter le nom du cluster Amazon EKS ou Kubernetes.
-
log_group_name– Spécifie le nom du groupe de journaux pour les métriques Prometheus récupérées. Ce champ est facultatif. Si vous l'omettez, CloudWatch utilise /aws/ecs/containerinsights/
cluster_name/prometheus pour les journaux des clusters Amazon EKS et Kubernetes. -
prometheus_config_path– Spécifie le chemin d'accès du fichier de configuration de récupération Prometheus. Si la valeur de ce champ commence par
env:, le contenu du fichier de configuration de récupération Prometheus sera récupéré à partir de la variable d'environnement du conteneur. Ne modifiez pas ce champ. -
ecs_service_discovery– Il s'agit de la section qui spécifie la configuration de la découverte de service Amazon ECS Prometheus. Pour plus d'informations, consultez . Guide détaillé de la découverte automatique sur les clusters Amazon ECS.
La section
ecs_service_discoverypeut contenir les champs suivants :-
sd_frequencyest la fréquence de découverte des exportateurs Prometheus. Spécifiez un nombre et un suffixe d'unité. Par exemple,1mpour une fois par minute ou30spour une fois toutes les 30 secondes. Les suffixes d'unités valides sontns,us,ms,s,meth.Ce champ est facultatif. La valeur par défaut est de 60 secondes (1 minute).
-
sd_target_clusterest le nom du cluster Amazon ECS cible pour la découverte automatique. Ce champ est facultatif. La valeur par défaut est le nom du cluster Amazon ECS sur lequel l'agent CloudWatch est installé. -
sd_cluster_regionest la région du cluster Amazon ECS cible. Ce champ est facultatif. La valeur par défaut est la région du cluster Amazon ECS sur lequel l'agent CloudWatch est installé. -
sd_result_fileest le chemin d'accès du fichier YAML pour les résultats de la cible Prometheus. La configuration de récupération Prometheus fera référence à ce fichier. -
docker_labelest une section facultative que vous pouvez utiliser pour spécifier la configuration de la découverte de service basée sur des étiquettes de docker. Si vous omettez cette section, la découverte basée sur les étiquettes docker n'est pas utilisée. Cette section peut contenir les champs suivants :-
sd_port_labelest le nom de l'étiquette docker du conteneur qui spécifie le port du conteneur pour les métriques Prometheus. La valeur par défaut estECS_PROMETHEUS_EXPORTER_PORT. Si le conteneur n'a pas cette étiquette docker, l'agent CloudWatch l'ignore. -
sd_metrics_path_labelest le nom de l'étiquette docker du conteneur qui spécifie le chemin d'accès aux métriques Prometheus. La valeur par défaut estECS_PROMETHEUS_METRICS_PATH. Si le conteneur n'a pas cette étiquette docker, l'agent utilise le chemin par défaut/metrics. -
sd_job_name_labelest le nom de l'étiquette docker du conteneur qui spécifie le nom de la tâche de récupération Prometheus. La valeur par défaut estjob. Si le conteneur n'a pas cette étiquette docker, l'agent CloudWatch utilise le nom de la tâche dans la configuration de récupération Prometheus.
-
-
task_definition_listest une section facultative que vous pouvez utiliser pour spécifier la configuration de la découverte de service basée sur les définitions de tâches. Si vous omettez cette section, la découverte basée sur les définitions de tâches n'est pas utilisée. Cette section peut contenir les champs suivants :-
sd_task_definition_arn_patternest le modèle à utiliser pour spécifier les définitions de tâches Amazon ECS à découvrir. Il s'agit d'une expression régulière. -
sd_metrics_portsrépertorie le containerPort pour les métriques Prometheus. Séparez les containerPorts par des points-virgules. -
sd_container_name_patternspécifie les noms des conteneurs de tâches Amazon ECS. Il s'agit d'une expression régulière. -
sd_metrics_pathspécifie le chemin de métrique Prometheus. Si vous ne spécifiez pas ce paramètre, l'agent utilise le chemin par défaut/metrics -
sd_job_namespécifie le nom de la tâche de récupération Prometheus. Si vous omettez ce champ, l'agent CloudWatch utilise le nom de tâche dans la configuration de récupération Prometheus.
-
-
-
metric_declaration– ce sont des sections qui spécifient le tableau de journaux avec le format de métrique intégré à générer. Il existe des sections
metric_declarationpour chaque source Prometheus que l'agent CloudWatch importe par défaut. Chacune de ces sections comprend les champs suivants :-
label_matcherest une expression régulière qui vérifie la valeur des étiquettes répertoriées danssource_labels. Les métriques qui correspondent sont activées afin d'être incluses dans le format de métrique intégrée envoyé à CloudWatch.Si plusieurs étiquettes sont spécifiées dans
source_labels, nous vous recommandons de ne pas utiliser les caractères^ou$dans l'expression régulière pourlabel_matcher. -
source_labelsspécifie la valeur des étiquettes qui sont vérifiées par la lignelabel_matcher. -
label_separatorspécifie le séparateur à utiliser dans la lignelabel_matchersi plusieurssource_labelssont spécifiées. La valeur par défaut est;. Vous pouvez voir cette valeur par défaut utilisée dans la lignelabel_matcherdans l'exemple suivant. -
metric_selectorsest une expression régulière qui spécifie les métriques à collecter et à envoyer à CloudWatch. -
dimensionsest la liste des étiquettes à utiliser comme dimensions CloudWatch pour chaque métrique sélectionnée.
-
Consultez l'exemple metric_declaration suivant.
"metric_declaration": [ { "source_labels":[ "Service", "Namespace"], "label_matcher":"(.*node-exporter.*|.*kube-dns.*);kube-system", "dimensions":[ ["Service", "Namespace"] ], "metric_selectors":[ "^coredns_dns_request_type_count_total$" ] } ]
Cet exemple montre comment configurer une section de format de métrique intégrée à envoyer en tant qu'événement de journaux si les conditions suivantes sont remplies :
-
La valeur de
Servicecontientnode-exporteroukube-dns. -
La valeur de
Namespaceestkube-system. -
La métrique Prometheus
coredns_dns_request_type_count_totalcontient les deux étiquettesNamespaceetService.
L'événement de journal envoyé inclut la section en surbrillance suivante :
{ "CloudWatchMetrics":[ { "Metrics":[ { "Name":"coredns_dns_request_type_count_total" } ], "Dimensions":[ [ "Namespace", "Service" ] ], "Namespace":"ContainerInsights/Prometheus" } ], "Namespace":"kube-system", "Service":"kube-dns", "coredns_dns_request_type_count_total":2562, "eks_amazonaws_com_component":"kube-dns", "instance":"192.168.61.254:9153", "job":"kubernetes-service-endpoints", ... }
Didacticiel pour l'ajout d'une nouvelle cible de récupération Prometheus : métrique du serveur d'API Prometheus
Le serveur d'API Kubernetes expose les métriques Prometheus sur les points de terminaison par défaut. L'exemple officiel de la configuration de récupération du serveur d'API Kubernetes est disponible sur Github
Le didacticiel suivant montre comment effectuer les étapes suivantes pour commencer à importer des métriques du serveur d'API Kubernetes dans CloudWatch :
-
Ajout de la configuration de récupération Prometheus pour le serveur d'API Kubernetes au fichier YAML de l'agent CloudWatch.
-
Configuration des définitions des métriques au format de métrique intégré dans le fichier YAML de l'agent CloudWatch.
-
(En option) Création d'un tableau de bord CloudWatch pour les métriques du serveur d'API Kubernetes.
Note
Le serveur d'API Kubernetes expose des métriques de jauge, de compteur, d'histogramme et de synthèse. Dans cette version de prise en charge des métriques Prometheus, CloudWatch importe uniquement celles avec des types de jauge, de compteur et de résumé.
Pour commencer à collecter les métriques Prometheus du serveur d'API Kubernetes dans CloudWatch
-
Téléchargez la dernière version du fichier
prometheus-eks.yaml,prometheus-eks-fargate.yamlouprometheus-k8s.yamlen saisissant l'une des commandes suivantes.Pour un cluster Amazon EKS avec le type de lancement EC2, saisissez la commande suivante :
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yamlPour un cluster Amazon EKS avec le type de lancement Fargate, saisissez la commande suivante :
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yamlPour un cluster Kubernetes s'exécutant sur une instance Amazon EC2, saisissez la commande suivante :
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml -
Ouvrez le fichier avec un éditeur de texte, recherchez la section
prometheus-configet ajoutez la section suivante à l'intérieur de cette section. Ensuite, enregistrez les modifications :# Scrape config for API servers - job_name: 'kubernetes-apiservers' kubernetes_sd_configs: - role: endpoints namespaces: names: - default scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] action: keep regex: kubernetes;https - action: replace source_labels: - __meta_kubernetes_namespace target_label: Namespace - action: replace source_labels: - __meta_kubernetes_service_name target_label: Service -
Pendant que le fichier YAML est toujours ouvert dans l'éditeur de texte, recherchez la section
cwagentconfig.json. Ajoutez la sous-section suivante et enregistrez les modifications. Cette section place les métriques du serveur d'API dans la liste d'autorisations de l'agent CloudWatch. Trois types de métriques du serveur d'API sont ajoutés à la liste d'autorisation :-
nombre d'objets etcd
-
Métriques du contrôleur d'enregistrement du serveur d'API
-
Métriques de demande du serveur API
{"source_labels": ["job", "resource"], "label_matcher": "^kubernetes-apiservers;(services|daemonsets.apps|deployments.apps|configmaps|endpoints|secrets|serviceaccounts|replicasets.apps)", "dimensions": [["ClusterName","Service","resource"]], "metric_selectors": [ "^etcd_object_counts$" ] }, {"source_labels": ["job", "name"], "label_matcher": "^kubernetes-apiservers;APIServiceRegistrationController$", "dimensions": [["ClusterName","Service","name"]], "metric_selectors": [ "^workqueue_depth$", "^workqueue_adds_total$", "^workqueue_retries_total$" ] }, {"source_labels": ["job","code"], "label_matcher": "^kubernetes-apiservers;2[0-9]{2}$", "dimensions": [["ClusterName","Service","code"]], "metric_selectors": [ "^apiserver_request_total$" ] }, {"source_labels": ["job"], "label_matcher": "^kubernetes-apiservers", "dimensions": [["ClusterName","Service"]], "metric_selectors": [ "^apiserver_request_total$" ] }, -
-
Si vous avez déjà déployé l'agent CloudWatch avec prise en charge de Prometheus dans le cluster, vous devez le supprimer en saisissant la commande suivante :
kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch -
Déployez l'agent CloudWatch avec votre configuration mise à jour en saisissant l'une des commandes suivantes : Pour un cluster Amazon EKS avec le type de lancement EC2, saisissez :
kubectl apply -f prometheus-eks.yamlPour un cluster Amazon EKS avec le type de lancement Fargate, saisissez la commande suivante. Remplacez
MyCluster(MonCluster) etregion(région) avec des valeurs correspondant à votre déploiement.cat prometheus-eks-fargate.yaml \ | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \ | kubectl apply -f -Pour un cluster Kubernetes, saisissez la commande suivante : Remplacez
MyCluster(MonCluster) etregion(région) avec des valeurs correspondant à votre déploiement.cat prometheus-k8s.yaml \ | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \ | kubectl apply -f -
Ensuite, vous devriez voir un nouveau flux de journaux nommé kubernetes-apiservers dans le groupe de journaux /aws/containerinsights/cluster_name/prometheus. Ce flux de journal doit inclure les événements de journaux avec une définition intégrée du format de métrique comme suit :
{ "CloudWatchMetrics":[ { "Metrics":[ { "Name":"apiserver_request_total" } ], "Dimensions":[ [ "ClusterName", "Service" ] ], "Namespace":"ContainerInsights/Prometheus" } ], "ClusterName":"my-cluster-name", "Namespace":"default", "Service":"kubernetes", "Timestamp":"1592267020339", "Version":"0", "apiserver_request_count":0, "apiserver_request_total":0, "code":"0", "component":"apiserver", "contentType":"application/json", "instance":"192.0.2.0:443", "job":"kubernetes-apiservers", "prom_metric_type":"counter", "resource":"pods", "scope":"namespace", "verb":"WATCH", "version":"v1" }
Vous pouvez afficher vos métriques dans la console CloudWatch dans l'espace de nom ContainerInsights/Prometheus. En option, vous pouvez également créer un tableau de bord CloudWatch pour vos métriques de serveur d'API Kubernetes Prometheus.
(En option) Création d'un tableau de bord pour les métriques du serveur d'API Kubernetes.
Pour afficher les métriques du serveur d'API Kubernetes dans votre tableau de bord, vous devez d'abord avoir effectué les étapes décrites dans les sections précédentes pour commencer à collecter ces métriques dans CloudWatch.
Pour créer un tableau de bord pour les métriques du serveur d'API Kubernetes
Ouvrez la console CloudWatch à l’adresse https://console.aws.amazon.com/cloudwatch/
. -
Assurez-vous que vous avez sélectionné la bonne région AWS.
-
Dans le panneau de navigation, choisissez Dashboards (Tableaux de bord).
-
Choisissez Créer un tableau de bord. Entrez un nom pour le nouveau tableau de bord, puis choisissez Créer un tableau de bord.
-
Dans Ajouter à ce tableau de bord, choisissez Annuler.
-
Choisissez Actions, View/Edit Attributes (Afficher/Modifier la source).
-
Téléchargez le fichier JSON suivant : Source de tableau de bord d'API Kubernetes
. -
Ouvrez le fichier JSON que vous avez téléchargé avec un éditeur de texte et apportez les modifications suivantes :
-
Remplacez toutes les chaînes
{{YOUR_CLUSTER_NAME}}par le nom exact de votre cluster. Assurez-vous de ne pas ajouter d'espaces avant ou après le texte. -
Remplacez toutes les chaînes
{{YOUR_AWS_REGION}}par le nom de la région dans laquelle les métriques sont collectées. Par exempleus-west-2. Assurez-vous de ne pas ajouter d'espaces avant ou après le texte.
-
-
Copiez l'ensemble du blob JSON et collez-le dans la zone de texte de la console CloudWatch, en remplaçant ce qui se trouve déjà dans la zone.
-
Choisissez Mettre à jour, Enregistrer le tableau de bord.