Конфигурирование 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