0
votes

Configuration d'un conteneur Docker jmx-prometheus-exporter pour lire les métriques de l'application locale Jmx

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é)


0 commentaires

3 Réponses :


0
votes

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


0 commentaires

0
votes

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.


0 commentaires

0
votes

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.


0 commentaires