首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置jmx-prometheus-exporter docker容器以读取jmx本地应用程序的指标

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

Stack Overflow用户
提问于 2019-04-02 19:22:30
回答 3查看 4.3K关注 0票数 2

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

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

这是我的docker合成文件

版本:'3‘

服务:

代码语言:javascript
复制
  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

这是普罗米修斯的配置文件

代码语言:javascript
复制
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)读取指标的。

代码语言:javascript
复制
# 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)中读取,但我不知道如何配置它( exporter java代理解决方案可以工作,但我想要一些停靠的东西)。

EN

回答 3

Stack Overflow用户

发布于 2020-08-27 22:02:52

您必须为jmx导出器添加配置文件,并映射配置文件以覆盖jmx导出器中存在的文件。

例如:撰写文件

代码语言:javascript
复制
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是您必须提到配置的文件。映射后,您定义的配置文件将覆盖默认的镜像文件。

例如:配置文件

代码语言:javascript
复制
startDelaySeconds: 0
lowercaseOutputName: false
lowercaseOutputLabelNames: false
ssl: false
jmxUrl: service:jmx:rmi:///jndi/rmi://[jmxhost:port]/jmxrmi

jmxhost:port -您必须将其替换为jmx主机和jmx端口的实际名称。还可以根据您的需求将其他配置添加到config.yml中。

票数 1
EN

Stack Overflow用户

发布于 2019-06-22 06:32:15

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

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

然后将下面这一行添加到java应用程序中:

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2021-02-21 00:52:42

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

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

代码语言:javascript
复制
hostPort: 127.0.0.1:8080

在jmx导出器的config.yaml中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55473562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档