【问题标题】:Prometheus monitoring for Apache Ignite via JMX通过 JMX 对 Apache Ignite 进行 Prometheus 监控
【发布时间】:2020-07-22 11:56:15
【问题描述】:

我正在尝试使用 Prometheus 的 JMX 导出器监控 Apache Ignite,但我只看到默认 JVM 指标加上“线程池”Bean 的指标。 JMX 导出器作为代理运行:

/usr/bin/java -XX:+AggressiveOpts -javaagent:/etc/prometheus/jmx_prometheus_javaagent-0.13.0.jar=8080:/etc/prometheus/prometheus_config.yml -Xms1g -Xmx1g -server -XX:MaxMetaspaceSize=256m -Dfile.encoding=UTF-8 -Dcom.sun.management.jmxremote.rmi.port=49112 -Djava.rmi.server.hostname=127.0.0.1 -DIGNITE_QUIET=true -DIGNITE_SUCCESS_FILE=/usr/share/apache-ignite/work/ignite_success_ed3b2798-4d48-4188-94ac-1728fa8628dc -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=49112 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -DIGNITE_HOME=/usr/share/apache-ignite -DIGNITE_PROG_NAME=/usr/share/apache-ignite/bin/ignite.sh -cp /usr/share/apache-ignite/libs/*:/usr/share/apache-ignite/libs/ignite-indexing/*:/usr/share/apache-ignite/libs/ignite-spring/*:/usr/share/apache-ignite/libs/licenses/* org.apache.ignite.startup.cmdline.CommandLineStartup /etc/apache-ignite/default-config.xml

Ignite 配置已启用指标:

<property name="metricExporterSpi">
    <list>
        <bean class="org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi"/>
    </list>
</property>

我可以从连接到 49112 端口的 jconsole 中看到很多 ignite 指标。

尝试了不同的 jmx-exporter 选项,没有任何帮助。

---
hostPort: 127.0.0.1:49112
lowercaseOutputLabelNames: true
lowercaseOutputName: true
---
lowercaseOutputLabelNames: true
lowercaseOutputName: true
rules:
- pattern: "^org.apache<clsLdr=(.+), name=sys"
  name: ignite_sys_stats
  help: Ignite cluster amount of heap memory in bytes
  labels:
    attr: $3
  type: GAUGE

甚至空配置,这应该意味着“按原样收集所有内容”,仍然只看到标准 JVM +“线程池”。 你能建议这里有什么问题吗?

【问题讨论】:

  • 由于 JConsole 可以使用导出器的所有指标,听起来问题出在 JMX Prometheus 导出器端。可能是 Prometheus 导出器无法解析 Ignite 导出器 SPI 的消息。你用这个出口商吗? github.com/prometheus/jmx_exporter
  • 当我运行 io.prometheus.jmx.JmxScraper 时,我似乎遇到了github.com/prometheus/jmx_exporter/issues/483 Exception in thread "main" java.lang.ClassCastException: javax.management.openmbean.TabularDataSupport cannot be cast to javax.management.Attribute at io.prometheus.jmx.JmxScraper.scrapeBean(JmxScraper.java:160) at io.prometheus.jmx.JmxScraper.doScrape(JmxScraper.java:117) at io.prometheus.jmx.JmxScraper.main(JmxScraper.java:329)
  • 或者,您可以尝试使用 Prometheus OpenCensus 导出。 Ignite 可以以该格式导出指标:apacheignite.readme.io/docs/new-metrics#opencensus

标签: java prometheus jmx ignite


【解决方案1】:
  1. 创建一个空的 prometheus_config.yml 文件。确保正确读取文件。 在此处跟踪:https://github.com/prometheus/jmx_exporter/blob/ce04b7dca8615d724d8f447fa25c44ae1c29238b/collector/src/main/java/io/prometheus/jmx/JmxCollector.java#L75 以确保您使用的是正确的文件。

  2. 移除 metricExporterSpi 属性

  3. 连接到指定的端口,在您的情况下为 8080,以查看所有结果。

您的模式匹配规则不允许 Apache Ignite 结果正确显示。

您可以在此处使用调试/跟踪指令:https://github.com/prometheus/jmx_exporter 看看发生了什么。

模式规则处理在这里:https://github.com/prometheus/jmx_exporter/blob/ce04b7dca8615d724d8f447fa25c44ae1c29238b/collector/src/main/java/io/prometheus/jmx/JmxCollector.java#L357

【讨论】:

  • 我现在为 JmxScrapper.javs 添加了捕获 ClassCastException java -cp collector/target/collector*.jar io.prometheus.jmx.JmxScraper service:jmx:rmi:///jndi/rmi:// 127.0.0.1:49112/jmxrmi 返回超过 800 个项目,但是当我运行 javaagent - 它只给我 64 个项目
  • javaAgent 很可能只返回 JVM 属性。这可能是 javaagent 中的错误。
  • 是的,jmx 没有捕获 ClassCastException。我添加了 catch,现在我看到了指标(由于“无法将 TabularDataSupport 转换为 javax.management.Attribute”而跳过了一些指标,但现在它只是忽略了这些指标而不是失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多