JMX Exporter是一款将JMX指标转换为Prometheus可采集格式的工具,能够配置化地抓取并暴露JMX目标的mBeans。该工具主要设计为Java Agent运行,通过HTTP服务器暴露本地JVM的指标;也可作为独立HTTP服务器抓取远程JMX目标,但存在配置复杂、无法暴露进程指标(如内存和CPU使用)等缺点,因此强烈推荐以Java Agent方式运行。
适用于需要监控Java应用JVM状态及应用自定义JMX指标的场景,如:
1. 作为Java Agent运行
bashjava -javaagent:./jmx_prometheus_javaagent-0.12.0.jar=8080:config.yaml -jar yourJar.jar
http://localhost:8080/metrics 访问host:port(如 192.168.1.100:8080:config.yaml)2. 作为Docker容器运行
bashdocker run -v /path/to/config.yml:/etc/jmx_exporter/config.yml:ro scrapinghub/jmx_exporter:latest
执行 mvn package 命令构建项目。
配置文件采用YAML格式,以下是包含所有可能选项的示例:
yaml--- startDelaySeconds: 0 hostPort: 127.0.0.1:1234 username: password: jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1234/jmxrmi ssl: false lowercaseOutputName: false lowercaseOutputLabelNames: false whitelistObjectNames: ["org.apache.cassandra.metrics:*"] blacklistObjectNames: ["org.apache.cassandra.metrics:type=ColumnFamily,*"] rules: - pattern: 'org.apache.cassandra.metrics<type=(\w+), name=(\w+)><>Value: (\d+)' name: cassandra_$1_$2 value: $3 valueFactor: 0.001 labels: {} help: "Cassandra metric $1 $2" type: GAUGE attrNameSnakeCase: false
配置参数说明
| 参数名 | 描述 |
|---|---|
| startDelaySeconds | 启动延迟时间(秒),延迟期间的请求返回空指标集 |
| hostPort | 远程JMX连接的主机和端口,若未指定hostPort和jmxUrl则连接本地JVM |
| username | 远程JMX密码认证的用户名 |
| password | 远程JMX密码认证的密码 |
| jmxUrl | 完整的JMX连接URL,与hostPort不可同时指定 |
| ssl | 是否通过SSL进行JMX连接,配置证书需设置系统属性:-Djavax.net.ssl.keyStore=/home/user/.keystore-Djavax.net.ssl.keyStorePassword=changeit-Djavax.net.ssl.trustStore=/home/user/.truststore-Djavax.net.ssl.trustStorePassword=changeit |
| lowercaseOutputName | 指标名称转为小写,适用于默认格式和name配置,默认false |
| lowercaseOutputLabelNames | 指标标签名转为小写,适用于默认格式和labels配置,默认false |
| whitelistObjectNames | 要查询的ObjectNames列表,默认查询所有mBeans |
| blacklistObjectNames | 不查询的ObjectNames列表,优先级高于whitelistObjectNames,默认无 |
| rules | 按顺序应用的规则列表,匹配第一个规则后停止处理,未匹配的属性不采集;未指定时默认采集所有指标 |
| pattern | 匹配bean属性的正则表达式,非锚定,捕获组可用于其他选项,默认匹配所有 |
| attrNameSnakeCase | 将属性名转为蛇形命名(如anAttrName→an_attr_name),影响pattern匹配和默认格式,默认false |
| name | 指标名称,可使用pattern的捕获组,未指定时使用默认格式;若为空则停止处理该属性 |
| value | 指标值,可使用静态值或pattern的捕获组,未指定时使用mBean的原始值 |
| valueFactor | 数值因子,将value(或原始mBean值)乘以该因子(如毫秒转秒) |
| labels | 标签键值对映射,可使用pattern的捕获组,需设置name,空键/值将被忽略,未指定时无标签 |
| help | 指标帮助文本,可使用pattern的捕获组,需设置name,默认使用mBean属性描述和全名 |
| type | 指标类型,可选GAUGE、COUNTER或UNTYPED,需设置name,默认UNTYPED |
指标名和标签名将被 sanitize 处理:除
[a-zA-Z0-9:_]外的字符替换为下划线,相邻下划线会被合并;标签值和帮助文本无限制。
最小配置
{}(空配置)将连接本地JVM并以默认格式采集所有指标。注意:即使指标未导出,scraper仍会处理所有mBeans。
模式输入格式
pattern匹配的输入格式为:
domain<beanpropertyName1=beanPropertyValue1, beanpropertyName2=beanPropertyValue2, ...><key1, key2, ...>attrName: value
| 部分 | 描述 |
|---|---|
| domain | Bean名称,JMX对象名中冒号前的部分 |
| beanProperyName/Value | Bean属性,JMX对象名中冒号后的键值对 |
| keyN | 遇到复合或表格数据时,属性名会添加到此列表 |
| attrName | 属性名,表格数据时为列名;若设置attrNameSnakeCase则转为蛇形命名 |
| value | 属性值 |
除attrNameSnakeCase的转换外,这些值不会被转义或修改。默认帮助文本包含此字符串(不含value)。
默认格式
默认格式会将beans转换为合理的指标命名,格式为:
domain_beanPropertyValue1_key1_key2_...keyN_attrName{beanpropertyName2="beanPropertyValue2", ...}: value
未设置的部分会被忽略。
执行 mvn test 命令运行测试。
可通过独立模式启动JMX scraper调试调用情况:
bashgit clone https://github.com/prometheus/jmx_exporter.git cd jmx_exporter mvn package java -cp collector/target/collector*.jar io.prometheus.jmx.JmxScraper service:jmx:rmi:your_url
如需更详细日志(包括每个JMX调用的耗时),创建logging.properties文件:
handlers=java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level=ALL io.prometheus.jmx.level=ALL io.prometheus.jmx.shaded.io.prometheus.jmx.level=ALL
并在Java启动命令中添加:
bash-Djava.util.logging.config.file=/path/to/logging.properties
构建过程中会生成Debian二进制包,可用于将可执行文件安装到/usr/bin/jmx_exporter,配置文件位于/etc/jmx_exporter/jmx_exporter.yaml。
Java Agent的示例配置可参考:https://github.com/prometheus/jmx_exporter/tree/master/example_configs
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务