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

时间:2019-04-02 11:22:30

标签: docker-compose jmx grafana prometheus jmx-exporter

我正在尝试使用grafana可视化我的Spring应用程序(到目前为止仍在localhost上)指标。 为此,我首先使用HikariCP配置了一个连接池,然后使用Jmx(MBean)添加了监视功能。在此步骤之前,一切正常。

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

这是我的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-prometheus-exporter和普罗米修斯本身视为健康服务。

在访问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代理解决方案可能可以工作,但我需要将某些东西docker化)

4 个答案:

答案 0 :(得分:0)

我正在做类似的事情。 您的prometheus配置文件似乎正确。

我发现的唯一方法是使用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

答案 1 :(得分:0)

我不确定您是否已解决问题。

我正在将这个jmx导出器tempalte与dotcms java应用程序一起使用,并且从dotcms端导出jmx之后,它就像一个魅力。

回购:https://github.com/sscaling/docker-jmx-prometheus-exporter

答案 2 :(得分:0)

您必须添加jmx导出器的配置文件,在其中您将提到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。

答案 3 :(得分:0)

您需要为 jmx 导出器提供一个配置文件:refer link

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

hostPort: 127.0.0.1:8080

config.yaml 中用于 jmx 导出器。