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 .
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
urlchamp, 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 quehttps://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.
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"
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_writeest disponible sur le port42699sous/prometheus/v1/receive. Par conséquent, l' URL s que vous devez configurer dans la configuration de l' Prometheus sont les suivanteshttp://<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_writesolution « 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 optionsbasic_authetbearer_token(y comprisbearer_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 ».
Corrélation d'infrastructure
Pour la corrélation des infrastructures sur les hôtes d' Linux, consultez le point de terminaison API de l'agent HTTP.
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.foometrics.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:
- Dans la barre latérale de l'interface utilisateur d' Instana, sélectionnez « Infrastructure ».
- 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 ».

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 »
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}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.