JMX_exporter简介
JMX到普罗米修斯导出器:一个收集器,它可以配置收集和暴露JMX目标的mBeans。
该导出器旨在作为Java代理运行,公开HTTP服务器并提供本地JVM的指标。它也可以作为独立的HTTP服务器运行,并抓取远程JMX目标,但这有各种缺点,例如更难配置和无法公开进程指标(例如,内存和CPU使用)。
强烈建议将导出器作为Java代理运行**。**
运行Java代理
JMX_Prometheus_Java agent-0.19.0.jar
要作为Java代理运行,请下载其中一个jar并运行:
java -javaagent:./jmx_prometheus_javaagent-0.19.0.jar=12345:config.yaml -jar yourJar.jar
指标现在可从以下网址获得http://ip:12345/metrics。要将java代理绑定到特定的IP,请将端口号更改为host:port.
最低限度config.yaml看起来像这样:
rules:
- pattern: ".*"
开机自启动
sudo vim /etc/systemd/system/jmxapp.service
[Unit]
Description=Jmx App
After=network-online.target prometheus.service
[Service]
ExecStart=/usr/bin/java -javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.19.0.jar=12345:/opt/jmx_exporter/config.yaml -jar /opt/jmx_exporter/prometheus_test-0.0.1-SNAPSHOT.jar -Djava.util.logging.config.file=/opt/jmx_exporter/logging.properties
WorkingDirectory=/opt/jmx_exporter
User=root
Restart=root
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable jmxapp.service
sudo systemctl start jmxapp.service
sudo systemctl status jmxapp.service
配置
配置在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
includeObjectNames: ["org.apache.cassandra.metrics:*"]
excludeObjectNames: ["org.apache.cassandra.metrics:type=ColumnFamily,*"]
autoExcludeObjectNameAttributes: true
excludeObjectNameAttributes:
"java.lang:type=OperatingSystem":
- "ObjectName"
"java.lang:type=Runtime":
- "ClassPath"
- "SystemProperties"
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"
cache: false
type: GAUGE
attrNameSnakeCase: false
标签 | 描述 |
---|---|
startDelaySeconds | 服务请求前开始延迟。延迟期内的任何请求都将导致空的指标集。 |
hostPort | 通过远程JMX连接到的主机和端口。如果既没有指定这个也没有指定jmxUrl,将与本地JVM对话。 |
username | 用于远程JMX密码验证的用户名。 |
password | 用于远程JMX密码验证的密码。 |
jmxUrl | 要连接的完整JMX URL。如果主机端口为,则不应指定。 |
ssl | JMX连接是否应该通过SSL完成。要配置证书,您必须设置以下系统属性: -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。 |
includeObjectNames | 一列;一栏对象名称来查询。默认为所有mBeans。 |
excludeObjectNames | 一列;一栏对象名称不要质疑。优先于includeObjectNames 。默认为无。 |
autoExcludeObjectNameAttributes | 是否自动排除对象名称无法转换为标准度量类型的属性。默认为true . |
excludeObjectNameAttributes | 的地图对象名称带有要排除的属性名称列表。ObjectNames必须采用规范形式。对象名称和属性名称都作为字符串匹配(没有正则表达式。)可选。 |
rules | 按顺序应用的规则列表,处理在第一个匹配的规则处停止。不匹配的属性不会被收集。如果未指定,则默认以默认格式收集所有内容。 |
pattern | 与每个bean属性匹配的正则表达式模式。该模式未被锚定。捕获组可以在其他选项中使用。默认匹配一切。 |
attrNameSnakeCase | 将属性名称转换为蛇形。这可以从模式和默认格式匹配的名称中看出。例如,anAttrName到an_attr_name。默认为false。 |
name | 要设置的度量名称。从捕获组pattern 可以使用。如果未指定,将使用默认格式。如果计算结果为空,则停止处理该属性,不输出任何内容。 |
value | 度量值。静态值和捕获组pattern 可以使用。如果未指定,将使用抓取的mBean值。 |
valueFactor | 可选号码value (或者是抓取的mBean值,如果value 未指定)乘以,主要用于将mBean值从毫秒转换为秒。 |
labels | 标签名称到标签值对的映射。从以下位置捕获组pattern 可以用在每一个。name 必须设置为使用此。空名称和值将被忽略。如果未指定且未使用默认格式,则不设置标签 |
help | 度量的帮助文本。从以下位置捕获组pattern 可以使用。name 必须设置为使用此。默认为属性的mBean属性描述、域和名称。 |
cache | 是否缓存bean名称表达式以规则计算(匹配和不匹配)。不建议对bean值进行规则匹配,因为只有第一次抓取的值会被缓存和重用。当收集大量mbeans时,这可以提高性能。默认为false . |
type | 度量的类型可以是GAUGE , COUNTER 或者UNTYPED . name 必须设置为使用此。默认为UNTYPED . |
Metric名称和label名称已被清理。以外的所有字符[a-zA-Z0-9:_]被替换为下划线,相邻的下划线被折叠。对标签值或帮助文本没有限制。
最低配置是{},它将连接到本地JVM并以默认格式收集所有信息。注意,scraper总是处理所有mBeans,即使它们没有被导出。
javaagents的示例配置可以在以下位置找到
https://github.com/Prometheus/JMX_exporter/tree/master/example_configs
注意
两者whitelistObjectNames和blacklistObjectNames为了向后兼容,仍受支持,但应被视为不推荐使用。
Pattern输入
Pattern输入格式是
domain<beanpropertyName1=beanPropertyValue1, beanpropertyName2=beanPropertyValue2, …><key1, key2, …>attrName: value
分析 | 描述 |
---|---|
domain | Bean名称。这是JMX对象名中冒号之前的部分。 |
beanPropertyName/Value | Bean属性。这些是JMX对象名中冒号后面的键/值。 |
keyN | 如果遇到复合数据或表格数据,属性的名称将添加到该列表中。 |
attrName | 属性的名称。对于表格数据,这将是列的名称。如果设置了attrNameSnakeCase,这将被转换为SnakeCase。 |
value | 属性的值。 |
不会对这些值进行转义或其他更改,除非attrNameSnakeCase已设置。默认帮助包括此字符串,但值除外。
默认格式
默认格式将以一种在大多数情况下应该产生合理metrics的方式来转换beans。如下:
domain_beanPropertyValue1_key1_key2_…keyN_attrName{beanpropertyName2=“beanPropertyValue2”, …}: value
如果给定的部分没有设置,它将被排除。
HTTP身份验证(可选)
HTTP基本身份验证支持使用以下配置算法:
- 明文-明文密码
- SHA-1 - SHA-1(:)
- SHA-256 - SHA-256(:)
- SHA-512 - SHA-512(:)
- PBKDF2WithHmacSHA1
- PBKDF2WithHmacSHA256
- PBKDF2WithHmacSHA512
明文示例:
httpServer:
authentication:
basic:
username: Prometheus
password: secret
SHA-256使用加盐密码SHA-256的例子(:)的
密码为secret
httpServer:
authentication:
basic:
username: Prometheus
passwordHash: 2bf7ed4906ac065bde39f7508d6102a6cdd7153a929ea883ff6cd04442772c99
algorithm: SHA-256
salt: U9i%=N+m]#i9yvUV:bA/3n4X9JdPXf=n
密码为的PBKDF2WithHmacSHA256示例secret
httpServer:
authentication:
basic:
username: Prometheus
passwordHash: A1:0E:4E:62:F7:1E:0B:59:0A:32:EA:CC:7C:65:37:1F:6D:A6:F1:F1:ED:3F:73:ED:C9:65:19:37:21:5B:6D:4E:9D:C6:61:DF:B5:BF:BB:16:B8:9A:50:14:57:CE:3D:14:67:73:A3:71:1B:87:3B:C4:B1:0E:DC:2D:0B:10:65:D6:F5:B6:DA:07:DD:EE:DA:AC:9C:60:CD:B4:59:0C:C9:CB:A7:3D:7E:30:3E:43:83:E9:E4:13:34:A1:F1:87:5C:24:46:8E:13:90:A6:66:E1:A6:F3:0B:5A:E7:14:8A:98:6A:81:2B:B6:F8:EF:95:D4:82:7E:FB:5E:2D:D3:24:FE:96
algorithm: PBKDF2WithHmacSHA256
salt: U9i%=N+m]#i9yvUV:bA/3n4X9JdPXf=n
- 迭代次数=600000(pbk df 2 with macsha 256的默认值)
- 密钥长度=128位(默认值)
笔记
- pbk df 2 with macsha 1默认迭代=1300000
- pbk df 2 with macsha 256默认迭代=600000
- pbk df 2 with macsha 256默认迭代=210000
- 默认密钥长度=128(比特)
Password Hash
- sha1sum, sha256sum,以及sha512sum可用于生成passwordHash
- openssl可用于生成基于PBKDF2WithHmac的算法passwordHash
HTTPS支持(可选)
可以通过两种可能的方法,使用JKS或PKCS12格式密钥库来配置HTTPS支持:
- 出口商YAML配置
- 系统属性
记录
- 密钥库类型取决于Java版本
- 导出器YAML配置覆盖系统属性
配置(使用出口商YAML)
1.将配置添加到导出器YAML文件中
httpServer:
ssl:
keyStore:
filename: localhost.jks
password: changeit
certificate:
alias: localhost
2.创建密钥库并添加您的证书
配置(使用系统属性)
1.将配置添加到导出器YAML文件中
httpServer:
ssl:
certificate:
alias: localhost
2.将您的证书添加到应用程序的Java密钥库中
出口商YAML文件alias应该与您要用于HTTPS服务器的证书的证书别名相匹配。
3.定义Java密钥库的应用程序系统属性
-Djavax.net.ssl.keyStore= -Djavax.net.ssl.keyStorePassword=
HTTP线程池配置(可选)
可以通过导出器YAML文件配置导出器线程池。
默认情况下,最多使用10个线程。
httpServer:
threads:
minimum: 1
maximum: 10
keepAliveTime: 120 # seconds
- minimum-最小线程数
- maximum-最大线程数
- keepAliveTime-线程保持活动状态的时间(秒)
记录
- 如果工作队列已满,请求将被阻塞,直到工作队列中有空间可用于请求。
集成测试套件
JMX导出器使用AntuBLUE测试引擎和Testcontainers来运行不同Java版本的集成测试。
您需要安装Docker来运行集成测试套件。
构建并运行集成测试套件:
./mvnw clean verify
排除故障
您可以在独立模式下启动JMX,以便调试所谓的
git clone https://github.com/prometheus/jmx_exporter.git
cd jmx_exporter
./mvnw 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调用中:
-Djava.util.logging.config.file=/opt/jmx_exporter/logging.properties