Why This Page Exists#
很多 dashboard 文档里会写:
CPU trend
request trend
1h rolling average
rate
spike
baseline这些词如果只看字面,容易误解成“就是涨或者跌”。
实际上它们回答的是不同问题:
| Term | It Answers |
|---|---|
| Current value | 现在这一刻是多少 |
| Trend | 最近一段时间是在变好还是变坏 |
| Rate | 单位时间内变化多快 |
| Rolling average | 去掉短时噪声后的平均水位 |
| Rolling sum | 一段时间内累计发生了多少 |
| Spike | 是否出现了短时突增 |
| Baseline | 正常情况下通常应该在什么范围 |
1. Current Value#
current value 指“当前这一刻”的值。
例如:
CPUUtilization = 68%
PendingTaskCount = 3
TargetResponseTime p95 = 1.2s它适合回答:
现在是不是已经高了
现在是不是已经有错误
现在是不是已经出现 pending task但它不回答:
这是刚刚才高,还是已经高了 1 小时
这是偶发抖动,还是持续恶化实际例子:
一个 ECS service 当前 memory = 72%
只看 current value:
72% 不算特别危险
但如果过去 2 小时它一直从 30% 爬升到 72%,
那就说明 workload 正在持续上涨。2. Trend#
trend 指“最近一段时间里的变化方向和形态”,不只是上升或下降。
它通常包含四层意思:
方向:
上升、下降、持平
速度:
缓慢变化,还是快速恶化
持续性:
只是瞬时 spike,还是持续 30 分钟以上
形态:
平滑上升,还是剧烈抖动实际例子:
同样都是 CPU 75%
场景 A:
过去 1 小时一直在 20% 到 30%
刚刚突然跳到 75%
这更像短时 spike
场景 B:
过去 1 小时从 25% -> 40% -> 55% -> 75%
这更像持续上升 trend
常见含义是请求在增长,或者系统正在接近瓶颈所以 trend 真正回答的是:
系统是在变好、变坏,还是只是瞬时波动3. Rate#
rate 指“单位时间内变化速度”,最常见于 counter。
典型 PromQL:
rate(http_requests_total[5m])
rate(container_cpu_usage_seconds_total[5m])它适合回答:
每秒请求数是多少
每秒错误数是多少
CPU 使用在持续消耗多快实际例子:
http_requests_total 是累计请求总数
如果它从:
1,000,000 -> 1,006,000
在 60 秒内完成,
那 request rate 大约就是:
100 rps为什么不能只看 counter 本身:
counter 只会越来越大
总数变大是正常的
真正有意义的是:
它增长得有多快4. Rolling Average#
rolling average 指“在一个滑动时间窗口里持续计算平均值”。
典型 PromQL:
avg_over_time(aws_ecs_cpu_utilization_average[1h])
avg_over_time(aws_ecs_memory_utilization_average[1h])它适合回答:
过去 1 小时的平均资源水位是多少
系统长期是高负载还是只是偶发抖动实际例子:
某服务 CPU 原始点值:
20%, 25%, 90%, 22%, 18%, 24%
如果只看原始值:
会觉得系统很不稳定
如果看 1h rolling average:
可能只有 28%
这说明:
中间那个 90% 更像单次 spike
长期容量并不紧张rolling average 的意义是“平滑噪声”,更适合看容量趋势,不适合抓瞬时告警。
5. Rolling Sum#
rolling sum 指“在一个滑动时间窗口内累计发生了多少”。
典型 PromQL:
sum_over_time(aws_applicationelb_request_count_sum[1h])
sum_over_time(errors_total[30m])它适合回答:
最近 1 小时总共来了多少请求
最近 30 分钟总共发生了多少错误实际例子:
ALB RequestCount 每 5 分钟上报一次 sum
如果过去 1 小时各点累计后得到 1,200,000,
那它表达的是:
最近 1 小时总请求量约 120 万
这适合看业务体量和容量规划,
而不是看“当前瞬时 rps”。6. Spike#
spike 指短时间内突然升高或突然下降。
常见例子:
CPU 突然从 20% 跳到 95%
ALB 5xx 在 2 分钟内突然增多
SQS oldest message age 突然抬升spike 不一定代表长期问题,但代表“刚刚发生了异常波动”。
实际例子:
某个 batch job 每小时整点启动一次
现象:
CPU 在整点瞬间拉高到 90%
5 分钟后恢复到 25%
这说明:
有 spike
但不一定有持续容量问题7. Baseline#
baseline 指“正常情况下这个指标通常落在哪个范围”。
没有 baseline,就很难判断一个值到底算不算异常。
实际例子:
TargetResponseTime p95 = 300ms
如果这个服务平时就是 250ms 到 350ms,
那 300ms 很正常
如果这个服务平时只有 40ms 到 70ms,
那 300ms 已经是明显异常baseline 常见来源:
过去 7 天 / 30 天的同类时段
工作日白天 vs 夜间
活动日 vs 平常日8. How They Work Together#
值班时不要只看一个词,要把几个视角一起看。
例子:ECS service 发布后用户反馈变慢
current value:
p95 latency 现在是 1.8s
trend:
过去 40 分钟一直在上升
rate:
request rate 没有明显上涨
rolling average:
CPU 1h rolling average 仍然不高
pending task:
从 0 变成 4这组信号更像:
不是流量自然增长导致的系统变慢
而是 deployment / capacity / scheduling 出问题
导致新 task 没有正常接住流量再看一个 ALB 例子:
current value:
target 5xx 当前很高
trend:
只持续了 3 分钟
rate:
request rate 突然翻倍
rolling sum:
最近 1 小时请求总量很高
baseline:
当前流量已经明显高于平时晚高峰这组信号更像:
业务流量突增
后端没有及时扩起来
短时出现 target 5xx9. Practical Reading Order#
值班时可以用这个顺序读图:
- 看 current value 先判断现在有没有红线指标已经出问题。
- 看 trend 判断是在持续恶化,还是刚刚抖了一下。
- 看 rate 判断流量、错误、资源消耗增长速度。
- 看 rolling average / rolling sum 判断这是长期趋势还是瞬时异常。
- 对照 baseline 判断这到底是不是偏离正常范围。
10. Common Mistakes#
误区 1:
CPU 当前高,所以一定要扩容
实际:
可能只是一次短时 spike
误区 2:
counter 很大,所以系统压力很大
实际:
counter 本来就会一直累加,应该看 rate
误区 3:
rolling average 不高,所以系统没问题
实际:
rolling average 会抹平短时事故,不能替代告警视图
误区 4:
指标比昨天高,就是异常
实际:
要先看 baseline,同一业务在不同时间段本来就可能差很多