配置 jmx-prometheus-exporter docker 容器以读取 jmx 本地应用程序的指标



我正在尝试使用 grafana 可视化我的 Spring 应用程序(直到现在仍在本地主机上)指标。 为此,首先我使用 HikariCP 配置了一个连接池,并使用 Jmx (MBean) 添加了监控功能。在这一步之前,一切都很好。

然后我开始了Grafana,一个Prometheus和一个jmx-prometheus-exporter docker容器。

这是我的码头工人撰写文件

版本: '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-普罗米修斯出口商和普罗米修斯本身是健康的服务。

访问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 代理解决方案可能有效,但我想要一些 dockerized 的东西)

您必须添加 JMX 导出器的配置文件,您将在其中提及 JMX URL 以使用来自的指标并映射配置文件以覆盖 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 中。

我正在做类似的事情。 您的普罗米修斯配置文件似乎是正确的。

我发现的唯一方法是使用javaagent。你可以从 https://github.com/prometheus/jmx_exporter 下载javaagent jar。

然后将此行添加到您的 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 导出器提供一个配置文件:参考链接

例如,如果您的应用程序在端口 8080 上运行,则提供类似

hostPort: 127.0.0.1:8080

config.yaml为 JMX 出口商。

相关内容

  • 没有找到相关文章

最新更新