Конфигурирование Docker-контейнера jmx-prometheus-exporter для чтения метрик локального приложения jmx

Я пытаюсь визуализировать показатели моего приложения Spring (все еще на локальном хосте до сих пор) с помощью графаны. Для этого сначала я настроил пул соединений с HikariCP и добавил функции мониторинга с помощью Jmx (MBean). До этого шага все работает нормально.

Затем я запустил контейнеры-докеры Grafana, Prometheus и jmx-prometheus-exporter.

Вот мой докер составить файл

версия: "3"

Сервисы:

  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

А вот и файл конфигурации Прометея

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']

в прометее: "http://localhost:9090/targets" Я мог видеть jmx-prometheus-exporter и сам prometheus как полезные услуги.

При посещении http://localhost:5556/ Я вижу некоторые значения, но нет ничего, что показывает, что они специфичны для моего приложения (я не вижу имя пула, которое я установил...), и это выглядит логично, потому что я не вижу, где находится контейнер jmx настроен для чтения метрик из моего приложения (локальный jmx)

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

У меня вопрос, я хочу выставить свои метрики приложения для чтения в контейнере jmx-prometheus-exporter https://github.com/sscaling/docker-jmx-prometheus-exporter, и я не вижу как это настроить, (может быть, решение java agent для экспортера может работать, но я хочу что-то докеризованное)

4 ответа

Вам нужно добавить файл конфигурации для экспортера jmx, где вы будете упоминать URL-адрес jmx для использования метрик и сопоставить файл конфигурации, чтобы переопределить файл, присутствующий внутри экспортера jmx

например: составить файл

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

здесь /opt/jmx_exporter/config.yml - это файл по умолчанию, присутствующий внутри изображения, а./config.yml - это файл, в котором вы должны указать конфигурацию. после сопоставления заданный вами файл конфигурации переопределит файл изображения по умолчанию.

например: файл конфигурации

startDelaySeconds: 0
lowercaseOutputName: false
lowercaseOutputLabelNames: false
ssl: false
jmxUrl: service:jmx:rmi:///jndi/rmi://[jmxhost:port]/jmxrmi

[jmxhost:port] - вы должны заменить это фактическим именем хоста jmx и порта jmx. Есть и другие конфигурации, которые можно добавить в config.yml в зависимости от ваших требований.

Я работал над чем-то похожим. Ваш файл конфигурации Prometheus кажется правильным.

Единственный способ, который я нашел, - это использовать javaagent. Вы можете скачать javaagent jar с https://github.com/prometheus/jmx_exporter.

Затем добавьте эту строку в ваше Java-приложение:

javaagent:/YOUR_PATH/jmx_prometheus_javaagent-0.3.0.jar=PORT:/ANOTHER_PATH/config-jmx-tomcat.yaml"

Я думаю, что если вы не видите свои данные, то конфигурация для вашего jmx-экспортера не установлена ​​правильно. Проверьте этот github на синтаксис: https://github.com/pentachore/jmx_exporter_hikaricp

Вам необходимо предоставить файл конфигурации для экспортера jmx, ссылка на ссылку: https://github.com/prometheus/jmx_exporter

Например, если ваше приложение работает на порту 8080, укажите такую ​​конфигурацию, как,

hostPort: 127.0.0.1:8080 в config.yaml для экспортера jmx.

Я не уверен, что вы уже исправили свою проблему.

Я использую этот jmx exporter tempalte вместе с java-приложением dotcms, и он работает как шарм после экспорта jmx из конца dotcms.

Репо: https://github.com/sscaling/docker-jmx-prometheus-exporter

Другие вопросы по тегам