我正在尝试将 jvm 指标集成到我的 akka 应用程序中。我使用了prometheus jmx导出器。我没有使用整个应用程序并将其作为 java 代理运行,而是仅使用导出器并集成到我现有的 prometheus 注册表中
import io.prometheus.jmx.JmxCollector
val jmxCollector: JmxCollector = new JmxCollector(getClass.getResourceAsStream("jmx-config.yaml"))
jmxCollector.register(prometheusRegistry)
我能够看到指标,但与将导出器作为 java 代理运行的其他应用程序相比,以前缀 jvm 开头的指标很少丢失。就像缺少的线程指标
# HELP jvm_threads_state Current count of threads by state
# TYPE jvm_threads_state gauge
jvm_threads_state{state="TERMINATED",} 0.0
jvm_threads_state{state="RUNNABLE",} 10.0
jvm_threads_state{state="TIMED_WAITING",} 11.0
jvm_threads_state{state="WAITING",} 37.0
jvm_threads_state{state="NEW",} 0.0
jvm_threads_state{state="BLOCKED",} 0.0
我的指标配置是最低限度的,在两个应用程序中看起来都是这样的
---
startDelaySeconds: 10
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: false
您能否帮助我了解导致此问题的差异可能是什么。
这是预期的行为
此导出器旨在作为 Java 代理运行,公开 HTTP 服务器并提供本地 JVM 的指标。它也可以作为独立的 HTTP 服务器运行并抓取远程 JMX 目标,但这有各种缺点,例如更难配置和无法公开进程指标(例如内存和 CPU 使用情况)。
“无法公开流程指标”是对
jvm_*
指标的微妙引用,例如
jvm_classes_loaded
/ jvm_classes_loaded_total
jvm_threads_current
jvm_threads_daemon
jvm_memory_bytes_used
jvm_memory_pool_bytes_used
jvm_memory_pool_allocated_bytes_total
jvm_memory_pool_bytes_committed
jvm_memory_pool_bytes_init
jvm_memory_pool_bytes_max
jvm_memory_pool_bytes_used
jvm_memory_pool_collection_committed_bytes
jvm_memory_pool_collection_init_bytes
jvm_memory_pool_collection_max_bytes
jvm_memory_pool_collection_used_bytes
jvm_threads_deadlocked
jvm_threads_deadlocked_monitor
jvm_threads_peak
jvm_threads_started_total
jvm_threads_state
jvm_memory_pool_allocated_bytes_created
使用 httpserver 时,所有这些指标仍然可用,但名称不同,与实际值所在的 JMX MBean 匹配。
例如,javagent 中相当于
jvm_classes_loaded
/ jvm_classes_loaded_total
的是 java_lang_ClassLoading_LoadedClassCount
。
而在httpserver中相当于
jvm_threads_current
的是java_lang_Threading_ThreadCount
。等等...