Prometheus

La collecte de données de métriques avec Prometheus devient de plus en plus populaire. Avec l' Instana, il est facile de collecter des indicateurs d' Prometheus s et de les mettre en corrélation à l'aide du graphe de connaissances complet. Les métriques métier personnalisées en sont un exemple typique.

Une fois l'agent hôte Instana installé, le capteur Instana Prometheus est automatiquement installé, mais vous devez le configurer comme indiqué dans la section « Configuration ». Vous pouvez ensuite consulter les indicateurs liés à Prometheus dans l'interface utilisateur d' Instana.

Instana fournit un canal d'alerte Prometheus Alertmanager Webhook permettant d'envoyer des requêtes HTTP POST au format de charge utile décrit dans la configuration du récepteur Prometheus Alertmanager Webhook, comme indiqué dans la configuration du récepteur Prometheus Alertmanager Webhook.

Pour envoyer des notifications d'alerte depuis Instana vers Prometheus en temps réel, créez un canal d'alerte « Prometheus Alertmanager Webhook » dans l'interface utilisateur de Instana. Les requêtes HTTP POST seront alors redirigées vers Prometheus.

Introduction

Le capteur Instana Prometheus n'a pas besoin d'un serveur Prometheus. Il capture les métriques directement sur les noeuds finaux exposés par les systèmes surveillés.

Pour chaque agent hôte d' Instana, indiquez les points de terminaison d' Prometheus que vous souhaitez interroger et les métriques à collecter auprès de ceux-ci à l'aide d'expressions régulières. Pour plus d'informations, voir la section Configuration .

Remarque : si vos métriques sont exposées par une bibliothèque Java (telle que Micrometer, Prometheus Java client ou jmx_exporter ), vous n'avez pas besoin de les exposer via HTTP, car le plug-in Instana Java peut collecter directement les métriques de ces bibliothèques :
  • La rubrique Micrometer explique comment collecter des métriques d' Micrometer.

  • La rubrique Prometheus -java-client explique comment collecter des métriques à partir de la bibliothèque Prometheus Java client ou du registre de métriques Prometheus de Micrometer.

  • La rubrique « Jmx » explique comment collecter des métriques personnalisées à partir de beans d' JMX.

Configuration

Configuration pour les environnements d' Kubernetes

Vous devez définir des sources de métriques dans le fichier de configuration de l'agent hôte configuration.yaml sous la forme d'une liste de noeuds finaux. Lorsque l'agent hôte d' Instana s s'exécute dans un environnement Kubernetes ( Kubernetes ), il détecte et recueille automatiquement les adresses IP et les ports des conteneurs des pods en cours d'exécution. Dans un environnement « Kubernetes », cette configuration doit être transmise à l'agent via la agent.configuration_yaml valeur. Si vous installez l'agent à l'aide de l'opérateur, ajoutez ensuite la configuration dans le fichier de ressource personnalisée YAMLinstana-agent.customresource.yaml , situé dans le répertoire spec.agent.configuration_yaml. Si vous installez l'agent à l'aide du tableau « Helm », transmettez la configuration via l'indicateur --set agent.configuration_yaml=<config>. Vous pouvez également définir la configuration dans le fichier values.yaml et la transmettre à la commande helm install en utilisant le drapeau -f.

Voir l'exemple de configuration suivant :

com.instana.plugin.prometheus:
  poll_rate: 15                              # Global polling interval in seconds (optional, default is 1 second)
  username: ''                               # Global (all) endpoints username/password configuration (optional)
  password: ''
  podConnectTimeout: 750                     # discovery TCP connect timeout in ms used during discovery request (optional, default is 750ms)
  podReadTimeout: 2500                       # discovery TCP read timeout in ms used during discovery request (optional, default is 2500ms)
  customMetricSources:
  - url: '/prometheus/endpoint/1'            # metrics endpoint, the IP and port are auto-discovered
    metricNameIncludeRegex: '^.'             # regular expression to filter metrics
    username: ''                             # endpoint specific username/password configuration
    password: ''
  - url: '/prometheus/endpoint/2'
    metricNameIncludeRegex: '^.'
  - url: '/metrics'                          # metrics endpoint, the IP and port are auto-discovered
    metricNameIncludeRegex: '^.'             # regular expression to filter metrics
    labels:                                  # labels are used to limit discovery with pods that match. labels are treated as a boolean AND
      planet: "mars"
      app: "rover"
 

Si vous souhaitez extraire des ressources Kubernetes contenant des annotations Prometheus, telles que prometheus.io/scrape, prometheus.io/port et prometheus.io/path, vous n'êtes pas obligé d'utiliser la customMetricsSources section pour cette ressource particulière si vous définissez le prometheusAnnotations champ sur strict dans la configuration Prometheus. Par exemple :

com.instana.plugin.prometheus:
  podConnectTimeout: 750                     # discovery TCP connect timeout in ms used during discovery request (optional, default is 750ms)
  podReadTimeout: 2500                       # discovery TCP read timeout in ms used during discovery request (optional, default is 2500ms)
  prometheusAnnotations: strict              # use prometheus annotations as defined, no metric source is required
 

Remarques :

  • Pour les environnements d' Kubernetes, n'ajoutez pas les informations relatives à l'hôte et au port dans le url champ, et indiquez uniquement l'URL du point de terminaison des métriques URL, par exemple /prometheus/endpoint/metrics. Le capteur « Prometheus » ne surveille pas les points de terminaison spécifiés sous forme d'URL complètes, telles que https://prod-myapp.server.com/prometheus/metrics.

  • Si vous n'utilisez pas d'annotations Prometheus, les définitions de port de conteneur ( containerPort ) de la spécification de déploiement du pod Kubernetes sont utilisées pour déterminer le port du point de terminaison des métriques.

  • En utilisant une expression régulière dans la zone metricNameIncludeRegex , vous pouvez définir les métriques à capturer pour un noeud final de métrique spécifique.

  • Le détecteur Prometheus dispose d'une prise en charge de l'authentification de base qui peut être définie au niveau global (tous les noeuds finaux) ou par un noeud final.

Remarque : lorsque vous utilisez l'intégration d' Prometheus, ne collectez que les métriques nécessaires à la surveillance et au dépannage. Configurez soigneusement les cibles de collecte, la sélection des métriques et les intervalles de collecte afin de maîtriser le volume de données et d'éviter les doublons avec les métriques collectées par d'autres capteurs d' Instana. L'ingestion sélective permet de concilier les exigences en matière de traçabilité et l'utilisation efficace des ressources. Pour plus d'informations sur l'ajustement de la collecte de données et la gestion du volume d'ingestion dans les environnements d' Prometheus, consultez la section « Optimiser l'ingestion de données » sur Instana.

Configuration statique pour les environnements non- Kubernetes

La configuration statique est utilisée pour les environnements nonKubernetes . Si vous souhaitez capturer des métriques Prometheus à partir de noeuds finaux locaux ou distants dans un environnement nonKubernetes , configurez la section customMetricSources dans le fichier <agent_install_dir>/etc/instana/configuration.yaml comme suit:

com.instana.plugin.prometheus:
  # Global polling interval in seconds (optional)
  poll_rate: 15                              # Default is 1 second
  username: ''                               # Global (all) endpoints username/password configuration (optional)
  password: ''
  customMetricSources:
  - url: 'http://localhost:8080/metrics'
    username: ''                             # endpoint specific username/password configuration
    password: ''
    metricNameIncludeRegex: '^sample_app_request'
  - url: 'http://223.58.1.10:9100/prometheus'
    metricNameIncludeRegex: '^sample_app_request'
    labels:                                  # labels are used to limit discovery with pods that match. labels are treated as a boolean AND
      planet: "mars"
      app: "rover"

 
Remarque : si le paramètre metricNameIncludeRegex n'est pas défini, le capteur « Prometheus » collecte tous les types de métriques jusqu'à la limite définie de 600 métriques par type.

Écriture à distance

À partir de la version 0.10.10 de l'agent hôte d' Instana ( 1.1.587 ), l'agent hôte prend en charge le remote_write point de terminaison « endpoint », ce qui signifie qu'il est capable de collecter des métriques et que celles-ci s'affichent soit sous la forme d'une entité « Prometheus », soit dans le cadre des métriques personnalisées du processus.

Pour activer le noeud final remote_write , configurez le fichier <agent_install_dir>/etc/instana/configuration.yaml comme suit:

com.instana.plugin.prometheus:
  remote_write:
    enabled: true
 

Remarques :

  • Configurez l'émetteur (le composant qui envoie les métriques) comme indiqué dans la documentation relative à Prometheus remote_write.

  • Le nœud final remote_write est disponible sur le port 42699 sous /prometheus/v1/receive. Par conséquent, l' URL s que vous devez configurer dans la configuration de l' Prometheus sont les suivantes http://<agent_ip>:42699/prometheus/v1/receive :

  • Pour que Instana puisse analyser correctement les métriques, l'expéditeur doit envoyer les métadonnées. L'expéditeur est sélectionné par défaut dans « Prometheus »; veillez donc à ne pas désactiver cette option.

  • Le service d'agent « Instana », disponible en option sur Kubernetes via le tableau de bord « Instana » ( Helm ), s'avère très utile lorsqu'il est associé à la remote_write solution « API ». Grâce au service de l'agent Instana, les données sont transmises à l'agent Instana qui s'exécute sur le même nœud Kubernetes, ce qui permet à l'agent Instana de remplir correctement les données de corrélation de l'infrastructure.

  • Actuellement, l'authentification n'est pas prise en charge pour le noeud final remote_write . Par conséquent, ne configurez pas les options basic_auth et bearer_token (y compris bearer_token_file) de Prometheus dans l'expéditeur.

Chiffrement TLS de remote_write

Vous pouvez activer le chiffrement « TLS » sur l'agent hôte. Toutes les données envoyées au point remote_write de terminaison sont alors chiffrées à l'aide d' TLS.

Pour plus d'informations sur la configuration du chiffrement « TLS », consultez la section « Activation du chiffrement « TLS ».

Compteurs des deltas

Vous pouvez mesurer l'augmentation d'un compteur en le comparant à la valeur précédente. Cependant, increase l'agrégation de l'interface utilisateur d' Prometheus, qui est adaptée à ce type de mesure, peut donner des résultats erronés, car elle ne prend pas en compte les augmentations survenant immédiatement après la remise à zéro d'un compteur au sein d'un même compartiment. Pour plus d'informations à ce sujet Counter, consultez la documentation d' Prometheus.

Delta counters résoudre ce problème en mesurant avec précision l'augmentation de valeur, tout en tolérant les réinitialisations du compteur. Pour chaque indicateur, un indicateur différentiel correspondant est généré. Par exemple, une contre-métrique foo issue du point de terminaison « Prometheus » génère les deux métriques suivantes :

  • metrics.counters.foo
  • metrics.delta_counters.foo

La génération de ces indicateurs peut être configurée dans le fichier de configuration configuration.yaml :

com.instana.plugin.prometheus:
---
sendCounterMetrics: true
sendDeltaCounterMetrics: true
 

Les deux Counters options Delta counters sont activées par défaut. Delta countersSi vous n'en avez pas besoin, vous pouvez désactiver Counters cette fonction en configurant le paramètre suivant :

sendCounterMetrics: false

Affichage des mesures

Pour afficher les métriques, procédez comme suit:

  1. Dans la barre latérale de l'interface utilisateur d' Instana, sélectionnez « Infrastructure ».
  2. Cliquez sur un hôte surveillé spécifique.

Vous pouvez ensuite voir un tableau de bord hôte avec toutes les métriques collectées et les processus surveillés.

Les métriques Prometheus apparaissent sous la forme ''d'applications Prometheus'' associées à l'hôte ou au processus à partir duquel elles sont collectées (en cas d'utilisation du nœud final remote_write). Vous pouvez interroger les métriques personnalisées d' Prometheus s à l'aide de Dynamic Focus, Event and Alerts et du plug-in « Grafana » avec entity.type:prometheus.

Le détecteur Prometheus collecte tous les types de métriques de coeur, jusqu'à 600 métriques par type:

  • Compteurs
  • Jauges
  • Histogrammes
  • Récapitulatifs
  • Sans type

Génération d'alertes

Création d'un canal d'alerte Alertmanager Webhook sur Prometheus

Pour créer un canal d'alerte « Prometheus Alertmanager Webhook », cliquez sur Paramètres > Paramètres généraux > Événements et alertes > Canaux d'alerte > Ajouter un canal d'alerte dans l'interface utilisateur d' Instana, puis cliquez sur « Prometheus Alertmanager Webhook ».

Capture d'écran : Prometheus Alertmanager Webhook

Instana envoie des alertes via ce canal d'alerte sous forme de requêtes HTTP POST au récepteur Alertmanager Prometheus Webhook configuré, par exemple Alert Snitch ou SNMP Notifier.

SNMP Notifier

Le projet « SNMP Notifier » transmet les alertes d' Prometheus, sous forme de traps SNMP, à tout récepteur SNMP configuré.

Instana ne fournit pas d'image pour le notificateur SNMP dans le registre d'images Instana. Pour plus d'informations, suivez les instructions fournies dans SNMP Notifier. Pour un exemple d'installation d'un notificateur « SNMP », consultez la section « Exécuter le notificateur « SNMP » » à l'adresse Kubernetes.

Configuration du canal d'alerte

Vous devez configurer le canal d'alerte Prometheus Alertmanager Webhook que vous avez créé, et définir le champ Prometheus Alertmanager Webhook Receiver URL sur http://{SNMP-Notifier-Host}:9464/alerts. Si le notificateur SNMP est installé dans le même cluster que le backend Instana dans un espace de noms nommé snmp-notifier, l'Alertmanager Prometheus, le Webhook et le Receiver URL se présentent comme suit http://snmp-notifier-alertmanager-snmp-notifier.snmp-notifier.svc:9464/alerts:

Exemple : Exécutez le notificateur « SNMP » dans « Kubernetes »

  1. Créez un espace de noms pour le notificateur SNMP et un secret pour le registre public Docker à l'aide des identifiants de votre hub Docker :

    kubectl create namespace snmp-notifier
    
    kubectl -n snmp-notifier create secret docker-registry image-pull-secret \
     --docker-server=docker.io \
     --docker-username=${YOUR_USERNAME} \
     --docker-password=${YOUR_PASSWORD}
     
  2. Installez le notificateur d' SNMP s en utilisant l'adresse IP d'un serveur qui reçoit les alertes sous forme de traps SNMP :

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    
    helm install snmp-notifier prometheus-community/alertmanager-snmp-notifier \
       -n snmp-notifier \
       --set 'imagePullSecrets={image-pull-secret}' \
       --set 'snmpNotifier.snmpDestinations={IP_ADDRESS_OF_SNMP_TRAP_RECEIVER_SERVER:162}'
     

Pour plus d'informations sur la configuration du notificateur « SNMP », consultez la page SNMP Notifier. Pour plus d'informations sur tous les paramètres de graphique pris en charge et leurs valeurs par défaut, consultez la page values.yaml.

Traitement des incidents

Retard important de la métrique remote_write

Type de problème de surveillance : prometheus_remote_write_high_delay

Les métriques Prometheus qui sont ingérées à partir du nœud final remote_write sont reçues avec un retard important. Ce problème entraîne des alertes potentiellement retardées et rend plus difficile la corrélation des métriques provenant d'autres sources.

Optimisez la configuration de Prometheus remote_write . Plus précisément, ajoutez le paramètre batch_send_deadline comme suit, ce qui limite le délai à 1 seconde:

remote_write:
  - url: "http://xxx.xxx.xxx.xxx:42699/prometheus/v1/receive"
    queue_config:
      batch_send_deadline: 1s
 

Pour plus d'options de configuration, voir le manuel Prometheus.

Prometheus erreur d'analyse métrique

Type de problème de surveillance : prometheus_metric_parse_error

Prometheus les métriques récupérées à partir d'un point de terminaison contiennent des informations qui ne sont pas conformes à la spécification des métriques Prometheus. Ce problème peut potentiellement empêcher le traitement de certaines métriques Prometheus du point de terminaison. Utilisez les informations sur le problème de surveillance pour déterminer la cause du problème et corriger le point de terminaison prometheus.