jmx - 属性和项目的 Prometheus jmx 导出器模式匹配

标签 jmx prometheus mbeans jmx-exporter mbeanexporter

我正在尝试使用 jmx_exporter java 代理( https://github.com/prometheus/jmx_exporter )进行模式匹配和命名普罗米修斯指标。

关于如何在处理 CompositeType 时对 MBean 属性和这些属性中的项目进行模式匹配的文档并不多。 .

例如,我到了以这种方式进行模式的地步:

rules:
  - pattern: "java.lang<type=Memory><>HeapMemoryUsage"
    name: jmx_jvm_memory_HeapMemoryUsed

但是如果你在 VisualVM 中查看 HeapMemoryUsed属性。您也可以在 Attribute Description 中看到在 openType下列:
javax.management.openmbean.CompositeType(
    name=java.lang.management.MemoryUsage,
    items=(
            (itemName=committed,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),
            (itemName=init,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),
            (itemName=max,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),
            (itemName=used,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long))
        )
    )

我希望能够根据这些项目命名指标。例如,我想要一个指标,例如:
  • jmx_jvm_memory_HeapMemoryUsed_used
  • jmx_jvm_memory_HeapMemoryUsed_max

  • 等等...

    谢谢!

    最佳答案

    你是对的,关于这个主题的文档很少。但是,如果您查看源代码,您会发现具有复合数据类型的 bean 被展开为每个属性和值组合的度量 ( JMXScraper.java:207-224 )。

    在您的情况下,您可以使用以下 rules 获得所需的结果元素:

    rules:
      # ... other rules
      - pattern: 'java.lang<type=Memory><(HeapMemoryUsage>(\w+): (.*)'
        name: jmx_jvm_memory_HeapMemoryUsed_$1
        help: "JVM heap memory $1"
        value: $2
        type: GAUGE
    

    如果您在启用 JMXExporter 代理的情况下启动服务器并查询指标端点,您将看到类似于以下输出的内容
    $ curl -s ${server-url}:${jmx-exporter-port}/metrics | grep jmx_jvm
    # HELP jmx_jvm_memory_HeapMemoryUsed_committed JVM heap memory committed
    # TYPE jmx_jvm_memory_HeapMemoryUsed_committed gauge
    jmx_jvm_memory_HeapMemoryUsed_committed 7.7856768E8
    # HELP jmx_jvm_memory_HeapMemoryUsed_max JVM heap memory max
    # TYPE jmx_jvm_memory_HeapMemoryUsed_max gauge
    jmx_jvm_memory_HeapMemoryUsed_max 1.908932608E9
    # HELP jmx_jvm_memory_HeapMemoryUsed_init JVM heap memory init
    # TYPE jmx_jvm_memory_HeapMemoryUsed_init gauge
    jmx_jvm_memory_HeapMemoryUsed_init 2.64241152E8
    # HELP jmx_jvm_memory_HeapMemoryUsed_used JVM heap memory used
    # TYPE jmx_jvm_memory_HeapMemoryUsed_used gauge
    jmx_jvm_memory_HeapMemoryUsed_used 4.7050592E8
    

    备注 :正如 Brian 在他的回答中已经说过的那样,对于标准 JMX bean(例如 java.lang 域中的那些),没有必要这样做,因为 JMXExporter 已经以标准化的方式处理它们。

    关于jmx - 属性和项目的 Prometheus jmx 导出器模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58938333/

    相关文章:

    Tomcat 监控 MBean 注册

    jvm - Jboss Mbean 在 jmx-console 中可见,但在 JConsole 中不可见

    java - 如何为 Strimzi-Kafka 桥启用 JMX 指标

    java - 有没有办法使用 JMX 代码来捕获网络异常?

    java - 强制 Spring 的 MBeanExporter 使用特定的 MBeanServer

    java - 通过 getMemoryMXBean() 和 jvisualvm 获得的内存使用量之间存在差异吗?

    go - 如何在数据库更改时重新评估 promhttp.Handler?

    Prometheus 查询每小时发出的警报总和

    grafana - 如何舍入十进制值 Grafana

    java - 如何在 JBoss 6.1 EAP 的 Java EE 中以编程方式获取绑定(bind)服务器地址和端口?