






















在生产项目运行过程中,可能会遭遇各种问题。而一个问题的影响程度与其发现时间密切相关。因此,我梳理并总结了一套生产项目应具备的完整监控标准。
如果监控类型是timer,则需要配置avg,tp50,tp90,tp99,tps,在同一个图中,左边y轴为耗时,右边y轴为次数
假设监控的key是GET__api_v1_order则配置如下
// 监控方法耗时的平均值
avg(irate(POST__api_v1_order_seconds_sum[30s])/irate(POST__api_v1_order_seconds_count[30s]))
// tp50,tp90,tp99
max by (quantile)(POST__api_v1_order_seconds)
// 最大值
max(GET__api_v1_order_seconds_max)
// 调用速率,tps
sum(irate(GET__api_v1_order_seconds_count[30s]))
如果是counter类型的监控则只有tps

平均值和tp50,tp90和tp99配置

最大值和tps配置

将tps的值指定到右边Y轴

或



将重要和关键的监控单独分组

| 函数 | 说明 | 示例 |
|---|---|---|
| sum(key) | 求和 | - |
| min(key) | 最小 | - |
| max(key) | 最大 | - |
| avg(key) | 平均 | - |
| count(key) | 统计 | - |
| bottomk(num,key) | 最小的k个 | 同下 |
| topk(num,key) | 样本值最大的k个元素 | topk(3,key),最大的3个 topk(1,etf_receive_delay_seconds{quantile="0.99"}) 这个监控项中最大的一个 |
| quantile(num,key) | 分位数 num是一个介于0到1之间的值,表示要计算的分位数。 例如,要计算中位数(第50%分位数),分位数的值为0.5。 如果要计算第90%分位数,则分位数的值为0.9。 |
quantile(0.9, my_time_series) 统计tp90 |
| rate(key) irate(key) |
irate和rate都会用于计算某个指标在一定时间间隔内的变化速率。就是tps,推荐使用irate - irate取的是在指定时间范围内的最近两个数据点来算速率; - irate适合快速变化的计数器(counter) - rate取的是在指定时间范围内的所有数据点,算出一组速率,然后取平均值作为结果。 - rate适合缓慢变化的计数器(counter) |
sum(irate(POST__api_v1_order_seconds_count[30s])) 统计请求数的tps,并汇总求和 |
| increase(key) | 获取区间向量中的第一个和最后一个样本并返回其增长量 它会在单调性发生变化时(如由于采样目标重启引起的计数器复位)自动中断。 等同于时间范围内秒数 * rate() |
increase(task_recon_insert_record_seconds_count[1m]) 1分钟内的增长值 |
| ... by(tag,tag)(key) | 分组统计,...可以替换为任意运算函数,比如max by,sum by,avg by | sum by(uri,status)(irate(http_server_requests_seconds_count{job="etf"}[30s])) 按照uri和status两种tag分别求和统计http接口的请求tps |
| {name=~"jvm_classes_.*"} | 通过正则表达式查询不同的key jvm_classes_.*表示将所有jvm_classes_开头的key查询出来 |
- |
| clamp_max(your_metric, 1000) | 所有大于1000的值会被替换为1000 | - |
| 监控key | 说明 |
|---|---|
| http_server_requests_seconds_count | http接口调用次数 |
| http_server_requests_seconds_sum | http接口调用总耗时 |
| http_server_requests_seconds_max | http接口调用最大耗时 |
| jvm_threads_states_threads | jvm线程数监控,区分不同状态 |
| jvm_memory_used_bytes | jvm内存使用监控,区分不同的堆区域 |
| jvm_gc_pause_seconds_count | gc暂停次数 |
| jvm_gc_pause_seconds_sum | gc暂停总时间 |
| jvm_gc_pause_seconds_max | gc暂停最大时间 |
| jvm_gc_live_data_size_bytes | gc存活数据大小 |
| process_files_open_files | 进程打开文件数 |
| system_load_average_1m | 1分钟负载 |
| system_cpu_usage | 系统cpu使用 |
| kafka_consumer_records_consumed_total_records_total | kafka消费数量,包含机器实例和主题的tag |
| hikaricp_* | hikaricp相关监控,包含很多监控项 |
| tomcat_* | tomcat相关监控 |
| log4j2_* | 日志相关监控 |
| kafka_* | kafka相关监控,数量很多 |
项目需要提供http接口供普罗米修斯拉取监控数据,需要提供http接口给运维配置到普罗米修斯上
spring boot项目一般引入actuator包,然后配置以下配置提供http接口

spring boot项目如何使用actuator,grafana,普罗米修斯,请参考网上教程
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。