J'essaye de visualiser les métriques de mon application Spring (toujours sur localhost jusqu'à présent) avec grafana. Pour ce faire, j'ai d'abord configuré un pool de connexions avec HikariCP et j'ai ajouté des fonctionnalités de surveillance avec Jmx (MBean). Jusqu'à cette étape, tout fonctionne bien.
Ensuite, j'ai lancé Grafana, un conteneur de docker Prometheus et un jmx-prometheus-exporter.
Voici mon fichier de composition de docker
version: '3'
services:
# TYPE java_lang_MemoryPool_UsageThresholdSupported untyped java_lang_MemoryPool_UsageThresholdSupported{name="Metaspace",} 1.0 java_lang_MemoryPool_UsageThresholdSupported{name="PS Old Gen",} 1.0 java_lang_MemoryPool_UsageThresholdSupported{name="PS Eden Space",} 0.0 java_lang_MemoryPool_UsageThresholdSupported{name="Code Cache",} 1.0 java_lang_MemoryPool_UsageThresholdSupported{name="Compressed Class Space",} 1.0 java_lang_MemoryPool_UsageThresholdSupported{name="PS Survivor Space",} 0.0 # HELP java_lang_Threading_ThreadContentionMonitoringEnabled ThreadContentionMonitoringEnabled (java.lang<type=Threading><>ThreadContentionMonitoringEnabled) # TYPE java_lang_Threading_ThreadContentionMonitoringEnabled untyped java_lang_Threading_ThreadContentionMonitoringEnabled 0.0 # HELP java_lang_OperatingSystem_CommittedVirtualMemorySize CommittedVirtualMemorySize (java.lang<type=OperatingSystem><>CommittedVirtualMemorySize)
Et voici le fichier de configuration de prometheus
scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] labels: group: 'prometheus' - job_name: 'app-server' static_configs: - targets: ['localhost:8080'] - job_name: 'jmx-exporter' static_configs: - targets: ['jmx-exporter:5556']
dans le prometheus: "http: // localhost: 9090 / cibles"
Je pouvais voir le jmx-prometheus- exporter et prometheus lui-même comme des services sains.
Lors de la visite de http: // localhost: 5556 /
, je vois certaines valeurs, mais rien ne montre qu'elles sont spécifiques à mon application (Je ne vois pas le nom du pool que j'ai défini ...) et cela semble logique car je ne vois pas où le conteneur jmx est configuré pour lire les métriques de mon application (jmx local)
grafana: image: grafana/grafana:latest ports: - 3000:3000 prometheus: image: prom/prometheus:latest ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml jmx-exporter: image: sscaling/jmx-prometheus-exporter ports: - 5556:5556
Ma question est la suivante: je souhaite exposer les métriques de mon application afin d'être lues dans le conteneur jmx-prometheus-exporter (https://github.com/sscaling/docker-jmx-prometheus-exporter) , et je ne vois pas comment configurer cela, (l'exportateur solution d'agent java n peut fonctionner mais je veux quelque chose d'ancré)
3 Réponses :
Je travaillais sur quelque chose de similaire. Votre fichier de configuration prometheus semble être correct.
Le seul moyen que j'ai trouvé était d'utiliser javaagent. Vous pouvez télécharger le fichier javaagent depuis https://github.com/prometheus/jmx_exporter . P >
Ensuite, ajoutez cette ligne à votre application java:
javaagent:/YOUR_PATH/jmx_prometheus_javaagent-0.3.0.jar=PORT:/ANOTHER_PATH/config-jmx-tomcat.yaml"
Je pense que si vous ne pouvez pas voir vos données, la configuration de votre exportateur jmx n'est pas correcte . Vérifiez ce github pour la syntaxe: https://github.com/pentachore/jmx_exporter_hikaricp
vous devez ajouter le fichier de configuration pour l'exportateur jmx où vous mentionnerez l'url jmx à partir de laquelle consommer les métriques et mappez le fichier de configuration pour remplacer le fichier présent dans l'exportateur jmx
par exemple: compose le fichier p >
startDelaySeconds: 0 lowercaseOutputName: false lowercaseOutputLabelNames: false ssl: false jmxUrl: service:jmx:rmi:///jndi/rmi://[jmxhost:port]/jmxrmi
ici /opt/jmx_exporter/config.yml est le fichier par défaut présent dans l'image et ./config.yml est le fichier où vous devez mentionner la configuration. une fois mappé, le fichier de configuration que vous avez défini remplacera le fichier image par défaut.
par exemple: fichier de configuration
version: '2' services: jmx-exporter: image: sscaling/jmx-prometheus-exporter ports: - "9072:9072" environment: SERVICE_PORT: 9072 volumes: - ./config.yml:/opt/jmx_exporter/config.yml
[jmxhost: port] - vous devez le remplacer ceci avec le nom réel de l'hôte jmx et du port jmx. Il existe une autre configuration qui peut être ajoutée à config.yml en fonction de vos besoins.
Vous devez fournir un fichier de configuration pour l'exportateur jmx: lien de référence
Par exemple, si votre application s'exécute sur le port 8080, fournissez une configuration comme
hostPort: 127.0.0.1:8080
dans config.yaml
pour l'exportateur jmx.