prometheus整合JMX_exporter

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。如果主机端口为,则不应指定。
sslJMX连接是否应该通过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

分析描述
domainBean名称。这是JMX对象名中冒号之前的部分。
beanPropertyName/ValueBean属性。这些是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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值