把日志变成时间序列
对日志流做范围聚合就得到时间序列:速率函数给出每秒条数,计数函数给出窗口内数量,配合按标签分组还能把结果拆成多条曲线。这让日志平台能像指标系统一样看趋势,而不只是做检索。
范围窗口是关键参数
窗口至少覆盖两个采样点才能算出速率。日志量大时可以适当缩短窗口以提高灵敏度,日志稀疏时应放宽窗口避免抖动;看板里通常交给与步长联动的宏来控制,避免时间范围变化后曲线失真。
基本信息
| 范围聚合 | 对一段窗口内的日志做统计 |
|---|---|
| 速率函数 | 把条数转成每秒变化率 |
| 计数函数 | 统计窗口内的日志条数 |
| 分组 | 按标签把结果拆成多条序列 |
典型使用场景
- 错误速率:统计含错误关键字日志的每秒条数
- 级别分布:按级别标签分组统计各等级日志量
- 突增检测:用速率曲线发现日志量异常抬升
- 看板趋势:把日志统计画成与指标同样风格的趋势图
- 告警表达式:以日志统计结果直接配置通知规则
常用指标查询
常用指标查询
# 每秒错误条数
rate({app="api"} |= "error" [5m])
# 按级别统计每分钟条数
sum by (level) (count_over_time({app="api"} [1m]))
# 每 5 分钟错误总量
sum(count_over_time({app="api"} |= "error" [5m]))常用函数
| 函数 | 作用 | 注意 |
|---|---|---|
| 速率 | 每秒条数 | 窗口需覆盖多个采样点 |
| 计数 | 窗口内条数 | 适合低频日志 |
| 分组求和 | 按标签拆分曲线 | 分组维度要可控 |
| 分位统计 | 配合数值解包使用 | 需先解析出数值字段 |
范围窗口至少覆盖两个采样点才能算出速率:窗口过小时曲线会剧烈抖动,甚至出现时有时无的结果。
对全量日志做无过滤计数,本质上只是日志量统计:消耗资源却说明不了具体问题,应先加过滤条件再统计。
与指标侧的分工
- 指标回答整体趋势与告警,长期成本更低
- 日志统计用于回答指标里没有的细节,如特定错误消息的量
- 同一口径两边都要有时,应在文档里约定取值方式
- 日志量突增而指标平稳,通常意味着日志格式或采集发生了变化