类型

Counter(计数器)

Counter 类型代表一种样本数据单调递增的指标,即只增不减,除非监控系统发生了重置。例如,你可以使用 counter 类型的指标来表示服务的请求数、已完成的任务数、错误发生的次数等。
Counter 类型数据可以让用户方便的了解事件产生的速率的变化,在 PromQL 内置的相关操作函数可以提供相应的分析,比如以 HTTP 应用请求量来进行说明:

//通过rate()函数获取HTTP请求量的增长率
rate(http_requests_total[5m])
//查询当前系统中,访问量前10的HTTP地址
topk(10, http_requests_total)

不要将 counter 类型应用于样本数据非单调递增的指标

Gauge(仪表盘)

Gauge 类型代表一种样本数据可以任意变化的指标,即可增可减。Gauge 通常用于像温度或者内存使用率这种指标数据,也可以表示能随时增加或减少的“总数”,例如:当前并发请求的数量。
对于 Gauge 类型的监控指标,通过 PromQL 内置函数 delta() 可以获取样本在一段时间内的变化情况。

# 计算 CPU 温度在两小时内的差异
delta(cpu_temp_celsius{host="zeus"}[2h])

# 基于 2 小时的样本数据,来预测主机可用磁盘空间在 4 个小时之后的剩余情况
predict_linear(node_filesystem_free{job="node"}[2h], 4 * 3600) < 0

Histogram(直方图)

Histogram 在一段时间范围内对数据进行采样(通常是请求持续时间或响应大小等),并将其计入可配置的存储桶(bucket)中,后续可通过指定区间筛选样本,也可以统计样本总数,最后一般将数据展示为直方图。

histogram_quantile(0.9, rate(employee_age_bucket_bucket[10m]))

Summary(摘要)

与 Histogram 类型类似,用于表示一段时间内的数据采样结果(通常是请求持续时间或响应大小等),但它直接存储了分位数(通过客户端计算,然后展示出来),而不是通过区间来计算。

各类型下的指标定义

指标命名定义: io.micrometer.prometheus.PrometheusNamingConvention#name

COUNTER 指标

name def name 类型 帮助说明 单位
tomcat_sessions_rejected_sessions_total tomcat.sessions.rejected COUNTER null sessions
tomcat_sessions_created_sessions_total tomcat.sessions.created COUNTER null sessions
jvm_gc_memory_promoted_bytes_total jvm.gc.memory.promoted COUNTER GC之前到GC之后,老年代的大小正向增加的计数 bytes
tomcat_global_error_total tomcat.global.error COUNTER null null
jvm_gc_memory_allocated_bytes_total jvm.gc.memory.allocated COUNTER 在一个GC之后到下一个GC之前增加年轻代内存池的大小 bytes
tomcat_global_sent_bytes_total tomcat.global.sent COUNTER null bytes
tomcat_cache_hit_total tomcat.cache.hit COUNTER null null
tomcat_sessions_expired_sessions_total tomcat.sessions.expired COUNTER null sessions
tomcat_cache_access_total tomcat.cache.access COUNTER null null
jvm_classes_unloaded_classes_total jvm.classes.unloaded COUNTER 自Java虚拟机开始执行以来已卸载的类总数 classes
tomcat_global_received_bytes_total tomcat.global.received COUNTER null bytes
tomcat_servlet_error_total tomcat.servlet.error COUNTER null null

TIMER 指标

name def name 类型 帮助说明 单位
tomcat_global_request_seconds tomcat.global.request TIMER null seconds
tomcat_servlet_request_seconds tomcat.servlet.request TIMER null seconds
jvm_gc_pause_seconds jvm.gc.pause TIMER Time spent in GC pause seconds

GAUGE 指标

name def name 类型 帮助说明 单位
tomcat_threads_current_threads tomcat.threads.current GAUGE null threads
system_cpu_count system.cpu.count GAUGE Java虚拟机可用的处理器数量 null
process_uptime_seconds process.uptime GAUGE Java虚拟机的正常运行时间 seconds
jvm_threads_states_threads jvm.threads.states GAUGE 当前处于NEW状态的线程数 threads
jvm_memory_committed_bytes jvm.memory.committed GAUGE 可供Java虚拟机使用的已提交的内存量 bytes
tomcat_global_request_max_seconds tomcat.global.request.max GAUGE null seconds
tomcat_servlet_request_max_seconds tomcat.servlet.request.max GAUGE null seconds
system_cpu_usage system.cpu.usage GAUGE 最近的cpu利用率 null
jvm_threads_peak_threads jvm.threads.peak GAUGE 自Java虚拟机启动或重置峰值以来的活动线程峰值 threads
jvm_memory_used_bytes jvm.memory.used GAUGE 已用内存量 bytes
jvm_threads_daemon_threads jvm.threads.daemon GAUGE 当前活动的守护程序线程数 threads
tomcat_sessions_alive_max_seconds tomcat.sessions.alive.max GAUGE null seconds
process_cpu_usage process.cpu.usage GAUGE JVM的CPU利用率 null
process_start_time_seconds process.start.time GAUGE 进程的开始时间 seconds
jvm_classes_loaded_classes jvm.classes.loaded GAUGE 当前加载的类数 classes
jvm_memory_max_bytes jvm.memory.max GAUGE 最大内存量 bytes
tomcat_sessions_active_current_sessions tomcat.sessions.active.current GAUGE null sessions
jvm_gc_max_data_size_bytes jvm.gc.max.data.size GAUGE 老年代的最大内存量 bytes
jvm_gc_live_data_size_bytes jvm.gc.live.data.size GAUGE full GC老年代的大小 bytes
jvm_buffer_total_capacity_bytes jvm.buffer.total.capacity GAUGE 缓冲区总容量 bytes
jvm_threads_live_threads jvm.threads.live GAUGE 当前活动线程数,包括守护程序线程和非守护程序线程 threads
jvm_buffer_memory_used_bytes jvm.buffer.memory.used GAUGE 已使用缓冲池大小 bytes
tomcat_threads_busy_threads tomcat.threads.busy GAUGE null threads
tomcat_threads_config_max_threads tomcat.threads.config.max GAUGE null threads
jvm_buffer_count_buffers jvm.buffer.count GAUGE 缓冲区数量 buffers
tomcat_sessions_active_max_sessions tomcat.sessions.active.max GAUGE null sessions

度量值来源

name 来源
process.files.open OperatingSystemMXBean.getOpenFileDescriptorCount
process.files.max OperatingSystemMXBean.getMaxFileDescriptorCount
system.cpu.count Runtime::availableProcessors
system.load.average.1m OperatingSystemMXBean::getSystemLoadAverage
process.start.time RuntimeMXBean::getStartTime
process.uptime RuntimeMXBean::getUptime
jvm.classes.loaded ClassLoadingMXBean::getLoadedClassCount
jvm.classes.unloaded ClassLoadingMXBean::getUnloadedClassCount
jvm.gc.max.data.size GarbageCollectionNotificationInfo...
jvm.buffer.memory.used BufferPoolMXBean::getMemoryUsed
jvm.buffer.total.capacity BufferPoolMXBean::getTotalCapacity
jvm.memory.used MemoryPoolMXBean.getUsage().getUsed()
jvm.memory.committed MemoryPoolMXBean.getUsage().getCommitted()
jvm.memory.max MemoryPoolMXBean.getUsage().getMax()
jvm.buffer.count BufferPoolMXBean::getCount
jvm.threads.live ThreadMXBean::getThreadCount
jvm.threads.peak ThreadMXBean::getPeakThreadCount
tomcat.threads.busy MBeanServer.currentThreadsBusy
tomcat.threads.current MBeanServer.currentThreadCount
tomcat.threads.config.max MBeanServer.maxThreads
tomcat.cache.access MBeanServer.accessCount
tomcat.cache.hit MBeanServer.hitCount
tomcat.servlet.error MBeanServer.errorCount
tomcat.servlet.request MBeanServer.requestCount
tomcat.servlet.request.max MBeanServer.maxTime
tomcat.global.sent MBeanServer.bytesSent
tomcat.global.sent MBeanServer.bytesSent
tomcat.global.received MBeanServer.bytesReceived
tomcat.global.error MBeanServer.errorCount
tomcat.global.request MBeanServer.requestCount
tomcat.global.request.max MBeanServer.maxTime

常用监控指标

#1. 服务的tomcat每小时报错量
sort_desc(sum(delta(tomcat_global_error_total[1h])) by(application))