Envoyer des mesures Prometheus à l’espace de travail Log Analytics avec Container Insights

Cet article explique comment envoyer des métriques Prometheus de votre cluster Kubernetes surveillé par Container Insights à un espace de travail Log Analytics. Avant d’effectuer cette configuration, vous devez d’abord vous assurer que vous effectuez le scraping des métriques Prometheus de votre cluster à l’aide du service géré Azure Monitor pour Prometheus, qui est la méthode recommandée pour le monitoring vos clusters. Utilisez la configuration décrite dans cet article uniquement si vous souhaitez également envoyer ces mêmes données à un espace de travail Log Analytics où vous pouvez les analyser à l’aide de requêtes de journal et d’alertes de recherche dans les journaux.

Cette configuration nécessite de configurer le module complémentaire de monitoring pour l’agent Azure Monitor, qui est le même que celui utilisé par Container Insights pour envoyer des données à un espace de travail Log Analytics. Cela nécessite d’exposer le point de terminaison de métriques Prometheus via vos exportateurs ou pods, puis de configurer le module complémentaire de monitoring pour l’agent Azure Monitor utilisé par Container Insights, comme illustré dans le diagramme suivant.

Diagram of container monitoring architecture sending Prometheus metrics to Azure Monitor Logs.

Paramètres de scraping Prometheus (pour les métriques stockées en tant que journaux)

Le scraping actif des métriques de Prometheus s’effectue depuis l’une des deux perspectives ci-dessous, puis les métriques sont envoyées à l’espace de travail Log Analytics configuré :

  • Cluster-wide : défini dans la section ConfigMap [Prometheus data_collection_settings.cluster].
  • Node-wide : défini dans la section ConfigMap [Prometheus data_collection_settings.node].
Point de terminaison Étendue Exemple
Annotation de pod À l’ensemble du cluster prometheus.io/scrape: "true"
prometheus.io/path: "/mymetrics"
prometheus.io/port: "8000"
prometheus.io/scheme: "http"
Service Kubernetes À l’ensemble du cluster http://my-service-dns.my-namespace:9100/metrics
http://metrics-server.kube-system.svc.cluster.local/metrics
URL/point de terminaison Par nœud et/ou ensemble du cluster http://myurl:9101/metrics

Quand une URL est indiquée, Container Insights ne capture que le point de terminaison. Quand le service Kubernetes est spécifié, le nom du service est résolu avec le serveur DNS du cluster pour obtenir l’adresse IP. Ensuite, le service résolu est supprimé.

Étendue Clé Type de données Valeur Description
À l’ensemble du cluster Spécifiez l’une des trois méthodes suivantes pour capturer les points de terminaison pour les mesures.
urls String Tableau séparé par des virgules Point de terminaison HTTP (adresse IP ou chemin d’URL valide spécifié). Par exemple : urls=[$NODE_IP/metrics]. ($NODE_IP est un paramètre Container Insights spécifique et peut être utilisé à la place d’une adresse IP de nœud. Doit être tout en majuscules.)
kubernetes_services String Tableau séparé par des virgules Tableau de services Kubernetes pour la capture des mesures à partir des kube-state-metrics. Les noms de domaine complets doivent être utilisés ici. Exemple : kubernetes_services = ["http://metrics-server.kube-system.svc.cluster.local/metrics",http://my-service-dns.my-namespace.svc.cluster.local:9100/metrics]
monitor_kubernetes_pods Boolean True ou False Lorsque la valeur est définie sur true dans les paramètres du cluster, Container Insights capture les pods Kubernetes sur l’ensemble du cluster pour les annotations Prometheus suivantes :
prometheus.io/scrape:
prometheus.io/scheme:
prometheus.io/path:
prometheus.io/port:
prometheus.io/scrape Boolean True ou False Active le raclage du pod et monitor_kubernetes_pods doit être défini sur true.
prometheus.io/scheme String http La valeur par défaut est la capture de HTTP.
prometheus.io/path String Tableau séparé par des virgules Chemin d’accès de la ressource HTTP à partir duquel récupérer les mesures. Si le chemin d’accès aux mesures n’est pas /metrics, définissez-le avec cette annotation.
prometheus.io/port String 9102 Spécifiez le port à utiliser pour la mise en rebut. Si le port n’est pas défini, la valeur 9102 est utilisée par défaut.
monitor_kubernetes_pods_namespaces String Tableau séparé par des virgules Liste verte d’espaces de noms pour la capture des métriques à partir des pods Kubernetes.
Par exemple : monitor_kubernetes_pods_namespaces = ["default1", "default2", "default3"]
À l’ensemble du nœud urls String Tableau séparé par des virgules Point de terminaison HTTP (adresse IP ou chemin d’URL valide spécifié). Par exemple : urls=[$NODE_IP/metrics]. ($NODE_IP est un paramètre Container Insights spécifique et peut être utilisé à la place d’une adresse IP de nœud. Doit être tout en majuscules.)
À l’ensemble du nœud ou du cluster interval String 60s La valeur par défaut de l’intervalle de collection est d’une minute (60 secondes). Vous pouvez modifier la collection pour [prometheus_data_collection_settings. node] et/ou pour [prometheus_data_collection_settings. cluster] en unités de temps telles que s, m, h.
À l’ensemble du nœud ou du cluster fieldpass
fielddrop
String Tableau séparé par des virgules Vous pouvez spécifier certaines mesures à collecter ou non à partir du point de terminaison en définissant la liste Autoriser (fieldpass) et Interdire (fielddrop). Vous devez d’abord définir la liste verte.

Configurer ConfigMaps pour spécifier la configuration de scraping Prometheus (pour les métriques stockées en tant que journaux)

Effectuez les étapes suivantes pour configurer votre fichier de configuration ConfigMap pour votre cluster. ConfigMaps est une liste globale et il ne peut y avoir qu’un seul élément ConfigMap appliqué à l’agent. Vous ne pouvez pas avoir un autre élément ConfigMaps qui annule les collectes.

  1. Téléchargez le modèle de fichier YAML ConfigMap et enregistrez-le sous le nom container-azm-ms-agentconfig.yaml. Si vous avez déjà déployé un ConfigMap dans votre cluster et que vous souhaitez le mettre à jour avec une configuration plus récente, vous pouvez modifier le fichier ConfigMap que vous utilisiez précédemment.

  2. Modifiez le fichier YAML ConfigMap avec vos personnalisations pour capturer les métriques Prometheus.

    Pour effectuer la collecte des services Kubernetes sur l’ensemble du cluster, configurez le fichier ConfigMap à l’aide de l’exemple suivant.

    prometheus-data-collection-settings: |- ​
    # Custom Prometheus metrics data collection settings
    [prometheus_data_collection_settings.cluster] ​
    interval = "1m"  ## Valid time units are s, m, h.
    fieldpass = ["metric_to_pass1", "metric_to_pass12"] ## specify metrics to pass through ​
    fielddrop = ["metric_to_drop"] ## specify metrics to drop from collecting
    kubernetes_services = ["http://my-service-dns.my-namespace:9102/metrics"]
    
  3. Exécutez la commande kubectl suivante : kubectl apply -f <configmap_yaml_file.yaml>.

    Exemple : kubectl apply -f container-azm-ms-agentconfig.yaml.

Quelques minutes peuvent être nécessaires pour que la modification de configuration soit effective. Tous les pods ama-logs dans le cluster vont redémarrer. Lorsque les redémarrages sont terminés, un message similaire à celui-ci s’affiche avec les résultats : configmap "container-azm-ms-agentconfig" created.

Vérifier la configuration

Pour vérifier que la configuration a été correctement appliquée à un cluster, utilisez la commande suivante pour passer en revue les journaux à partir d’un pod d’agent : kubectl logs ama-logs-fdf58 -n=kube-system.

S’il existe des erreurs de configuration au niveau des pods de l’agent Azure Monitor, la sortie affichera des erreurs similaires à celles-ci :

***************Start Config Processing******************** 
config::unsupported/missing config schema version - 'v21' , using defaults

Les erreurs liées à l’application de modifications de configuration sont également disponibles pour consultation. Les options suivantes sont disponibles pour résoudre des problèmes supplémentaires liés aux modifications de configuration et à la capture des métriques Prometheus :

  • À partir de journaux d’activité d’un pod d’agent à l’aide de la même commande kubectl logs.

  • À partir de données en direct. Les journaux dynamiques affichent des erreurs similaires à l’exemple suivant :

    2019-07-08T18:55:00Z E! [inputs.prometheus]: Error in plugin: error making HTTP request to http://invalidurl:1010/metrics: Get http://invalidurl:1010/metrics: dial tcp: lookup invalidurl on 10.0.0.10:53: no such host
    
  • À partir de la table KubeMonAgentEvents dans votre espace de travail Log Analytics. Les données sont envoyées toutes les heures avec la gravité Avertissement pour les erreurs de capture, et la gravité Erreur pour les erreurs de configuration. S’il n’y a pas d’erreur, l’entrée de la table contient des données indiquant l’information relative à la gravité, qui ne signale aucune erreur. La propriété Balises contient plus d’informations sur le pod et l’ID de conteneur où l’erreur s’est produite, ainsi que sur la première occurrence, la dernière occurrence et le nombre d’occurrences au cours de la dernière heure.

  • Pour Azure Red Hat OpenShift v3.x et v4.x, vérifiez les journaux de l’agent Azure Monitor en regardant dans la table ContainerLog si la collecte des journaux d’openshift-azure-logging est activée.

Des erreurs empêchent l’agent Azure Monitor d’analyser le fichier, ce qui provoque son redémarrage et l’utilisation de la configuration par défaut. Une fois que vous avez corrigé les erreurs dans ConfigMap sur les clusters autres qu’Azure Red Hat OpenShift v3.x, enregistrez le fichier YAML et appliquez le modèle ConfigMaps mis à jour en exécutant la commande kubectl apply -f <configmap_yaml_file.yaml.

Pour Azure Red Hat OpenShift v3.x, modifiez et enregistrez le ConfigMaps mis à jour en exécutant la commande oc edit configmaps container-azm-ms-agentconfig -n openshift-azure-logging.

Interroger les données de métriques Prometheus

Pour afficher les métriques Prometheus récupérées par Azure Monitor ainsi que toutes les erreurs de configuration/capture signalées par l’agent, consultez Interroger les données de métriques Prometheus.

Consulter les métriques Prometheus dans Grafana

Container Insights prend en charge l’affichage des métriques stockées dans votre espace de travail Log Analytics, dans les tableaux de bord Grafana. Nous avons fourni un modèle que vous pouvez télécharger à partir du dépôt de tableau de bord de Grafana. Utilisez le modèle pour commencer et faites-y référence pour vous aider à apprendre comment interroger d'autres données à partir de vos clusters surveillés pour les visualiser dans des tableaux de bord Grafana personnalisés.

Étapes suivantes