Monitors 支持 Loki 的 LogQL 查询语法,能够对日志数据进行聚合分析并触发告警。
核心概念
Loki 的查询语言 LogQL 分为两类:
编写 LogQL 时,查询输入框会根据数据源自动补全标签名和标签值,帮助您快速定位日志流。
阈值判定模式
此模式适用于需要对日志聚合值进行多级阈值判定(如 Info/Warning/Critical)的场景。
配置方式
- 查询语句 (LogQL):编写返回数值向量的 LogQL(查询模式选择”做统计”)
示例:统计最近 5 分钟内,mysql 任务中包含 error 关键字的日志条数:
- 阈值条件:
- Critical:
$A > 50(5 分钟内错误日志超过 50 条)
- Warning:
$A > 10(5 分钟内错误日志超过 10 条)
工作原理
引擎执行 LogQL 查询,获取带有标签的时间序列数据(Vector)。引擎遍历每个序列,提取数值与配置的阈值表达式进行比对。
恢复逻辑
恢复方式见告警恢复。恢复查询是独立的 LogQL。
数据存在模式
此模式适用于习惯在 LogQL 中直接写过滤条件,或者只关心”是否有异常数据”的场景。推荐使用此模式做日志异常检测告警。
配置方式
- 查询语句 (LogQL):编写包含比较操作符的 LogQL,仅返回满足条件的数据
示例:直接筛选出错误率超过 5% 的服务:
- 判定规则:只要 LogQL 查询返回了数据,即触发告警
数据存在模式的计算逻辑在 Loki 服务端完成,减少数据传输;但无法区分告警级别,只能触发单一级别的告警。
恢复逻辑
恢复方式见告警恢复。
数据缺失模式
此模式用于监控日志上报链路是否中断,或者预期应该持续产生的日志是否停止了。
配置方式
- 查询语句 (LogQL):编写预期应该一直有数据的查询
示例:统计所有主机的日志上报速率:
- 判定规则:如果某个 Series(由标签唯一标识,如
instance="host-1")在之前的周期中存在,但在当前及连续 N 个周期中查不到数据,则触发”数据缺失”告警
恢复逻辑
恢复方式见告警恢复。
典型应用
- 监控 Promtail/Fluentd 等采集 Agent 是否停止工作
- 监控关键业务日志(如订单创建日志)是否异常中断
使用查原文模式作为主查询
当您希望“查到符合条件的日志就告警”时,可以选择查原文模式,并使用数据存在判定。假设查询返回 job、service、__time__、__log__ 等字段:
- 标签字段:选择
job、service 等稳定维度,用于标识告警对象。
- 值字段:数据存在模式下可以留空。如果使用阈值判定,请选择能转换为数字的字段。
- 附加信息:
__time__、__log__ 和其他未选中的非值字段会自动随告警携带。
不要把 __time__、__log__、Trace ID 等频繁变化的字段配置为标签。否则每条日志都可能形成一个新的告警对象。
详细的默认行为、阈值引用方式和多查询对齐要求,请参见查询结果字段映射。
通过关联查询获取日志原文
告警时可以通过关联查询获取日志原文。但通常不建议获取太多,只获取 1 条作为日志样例放置到告警消息中。
关联查询的结果可以渲染在”备注描述”中,示例: