Skip to content

Commit 2502d6a

Browse files
committed
update loki and victorialogs
1 parent f503c3c commit 2502d6a

2 files changed

Lines changed: 80 additions & 54 deletions

File tree

flashduty/zh/3. Monitors/2. 告警规则配置/3.loki.md

Lines changed: 49 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,8 @@ url: "https://docs.flashcat.cloud/zh/flashduty/monitors/loki-alert-rules"
1010
## 核心概念
1111

1212
Loki 的查询语言 LogQL 分为两类:
13-
14-
1. **日志查询**:返回日志行内容(Stream)。
15-
2. **指标查询**:对日志进行计数或聚合,返回数值(Vector)。
16-
17-
**Monitors 告警引擎主要使用"指标查询"**。请务必使用 `count_over_time``rate``sum` 等函数将日志转换为数值序列,以便进行阈值判定。
13+
1. **日志查询 (Log Queries)**:返回日志行内容(Stream)。
14+
2. **指标查询 (Metric Queries)**:对日志进行计数或聚合,比如使用 `count_over_time` 函数返回数值(Vector)。
1815

1916
---
2017

@@ -24,85 +21,84 @@ Loki 的查询语言 LogQL 分为两类:
2421

2522
### 配置方式
2623

27-
- **查询语句**:编写返回数值向量的 LogQL。
28-
- 示例:统计最近 5 分钟内,`mysql` 任务中包含 `error` 关键字的日志条数。
29-
```logql
30-
count_over_time({job="mysql"} |= "error" [5m])
31-
```
32-
- **阈值条件**:
33-
- **Critical**`$A > 50`(5 分钟内错误日志超过 50 条
34-
- **Warning**`$A > 10`(5 分钟内错误日志超过 10 条
24+
* **查询语句 (LogQL)**:编写返回数值向量的 LogQL(查询模式选择“做统计”)
25+
* *示例*:统计最近 5 分钟内,`mysql` 任务中包含 `error` 关键字的日志条数。
26+
```logql
27+
count_over_time({job="mysql"} |= "error" [5m])
28+
```
29+
* **阈值条件**:
30+
* **Critical**: `$A > 50` (5分钟内错误日志超过 50 条)
31+
* **Warning**: `$A > 10` (5分钟内错误日志超过 10 条)
3532
3633
### 工作原理
37-
3834
引擎执行 LogQL 查询,获取带有标签的时间序列数据(Vector)。引擎遍历每个序列,提取数值与配置的阈值表达式进行比对。
3935
4036
### 恢复逻辑
41-
42-
- **自动恢复**:当查询结果数值回落到阈值以下时,自动恢复。
43-
- **特定恢复条件**:可配置如 `$A < 5`,避免在阈值附近震荡。
44-
- **恢复查询**:
45-
- 支持配置独立的 LogQL 用于恢复判定。
46-
- 支持 `${label_name}` 变量替换。
47-
- 示例:告警查错误日志,恢复查特定恢复日志 `count_over_time({job="mysql"} |= "recovered" [5m])`。
37+
* **自动恢复**:当查询结果数值回落到阈值以下时,自动恢复。
38+
* **特定恢复条件**:可配置如 `$A < 5`,避免在阈值附近震荡。
39+
* **恢复查询 (Recovery Query)**:
40+
* 支持配置独立的 LogQL 用于恢复判定,只要查到数据即恢复。
41+
* 支持 `${label_name}` 变量替换。
42+
* *示例*:告警查错误日志,恢复查特定恢复日志 `count_over_time({job="mysql"} |= "recovered" [5m])`。
4843
4944
---
5045
5146
## 2. 数据存在模式 (Data Exists)
5247
53-
此模式适用于习惯在 LogQL 中直接写过滤条件,或者只关心"是否有异常数据"的场景。
48+
此模式适用于习惯在 LogQL 中直接写过滤条件,或者只关心是否有异常数据的场景。推荐使用此模式做日志异常检测告警
5449
5550
### 配置方式
5651
57-
- **查询语句**:编写包含比较操作符的 LogQL,仅返回满足条件的数据。
58-
- 示例:直接筛选出错误率超过 5% 的服务。
59-
```logql
60-
rate({job="ingress"} |= "500" [1m]) / rate({job="ingress"} [1m]) * 100 > 5
61-
```
62-
- **判定规则**:只要 LogQL 查询返回了数据,即触发告警。
52+
* **查询语句 (LogQL)**:编写包含比较操作符的 LogQL,仅返回满足条件的数据。
53+
* *示例*:直接筛选出错误率超过 5% 的服务。
54+
```logql
55+
count_over_time({job="ingress"} |= "error-code-500" [5m]) / count_over_time({job="ingress"} [5m]) * 100 > 5
56+
```
57+
* **判定规则**:只要 LogQL 查询返回了数据,即触发告警。
6358
6459
### 优缺点分析
65-
66-
- **优点**:计算逻辑下推至 Loki 服务端,减少数据传输。
67-
- **缺点**:无法区分告警级别,只能触发单一级别的告警。
60+
* **优点**:计算逻辑下推至 Loki 服务端,减少数据传输。
61+
* **缺点**:无法区分告警级别,只能触发单一级别的告警。
6862
6963
### 恢复逻辑
70-
71-
- **数据消失即恢复**:当 LogQL 查询结果为空(即不再满足 `> 5` 的条件)时,判定恢复。
72-
- **恢复查询**:支持配置额外的查询语句用于辅助判断恢复状态。
64+
* **数据消失即恢复**:当 LogQL 查询结果为空(即不再满足 `> 5` 的条件)时,判定恢复。
65+
* **恢复查询**:支持配置额外的查询语句用于辅助判断恢复状态。
7366
7467
---
7568
76-
## 3. 数据缺失模式
69+
## 3. 数据缺失模式 (No Data)
7770
7871
此模式用于监控日志上报链路是否中断,或者预期应该持续产生的日志是否停止了。
7972
8073
### 配置方式
8174
82-
- **查询语句**:编写预期应该一直有数据的查询。
83-
- 示例:统计所有主机的日志上报速率。
84-
```logql
85-
rate({job="node-logs"} [1m])
86-
```
87-
- **判定规则**:如果某个 Series(由标签唯一标识,如 `instance="host-1"`)在之前的周期中存在,但在当前及连续 N 个周期中查不到数据,则触发"数据缺失"告警。
75+
* **查询语句 (LogQL)**:编写预期应该一直有数据的查询。
76+
* *示例*:统计所有主机的日志上报速率。
77+
```logql
78+
rate({job="node-logs"} [1m])
79+
```
80+
* **判定规则**:如果某个 Series(由标签唯一标识,如 `instance="host-1"`)在之前的周期中存在,但在当前及连续 N 个周期中查不到数据,则触发数据缺失告警。
8881
8982
### 典型应用
90-
91-
- 监控 Promtail/Fluentd 等采集 Agent 是否停止工作。
92-
- 监控关键业务日志(如订单创建日志)是否异常中断。
83+
* 监控 Promtail/Fluentd 等采集 Agent 是否停止工作。
84+
* 监控关键业务日志(如订单创建日志)是否异常中断。
9385
9486
---
9587
96-
## 4. 最佳实践与注意事项
97-
98-
### 避免查询原始日志
88+
## 4. 获取告警时日志原文
9989
100-
**请勿** 在告警规则中使用仅返回日志流的 LogQL(如 `{job="mysql"} |= "error"`)
90+
告警时可以通过关联查询获取日志原文。但通常不建议获取太多,只获取 1 条作为日志样例放置到告警消息中
10191
102-
- **原因**:告警引擎需要数值来进行计算和判定。原始日志流无法直接用于阈值比较。
103-
- **正确做法**:必须包裹聚合函数,如 `count_over_time(...)`。
92+
![](https://docs-cdn.flashcat.cloud/imges/mon/ca5ea15fcfca066f260e09d0f8d91cf2.png)
10493
105-
### 性能优化
94+
关联查询的结果可以渲染在 “备注描述” 中,示例:
10695
107-
- **时间范围**:LogQL 中的时间范围(如 `[5m]`)应适中。过大的范围会导致查询慢,过小的范围可能导致数据波动大。
108-
- **标签过滤**:尽量在 LogQL 的 Stream Selector 部分(大括号 `{...}` 内)使用精确的标签过滤,减少扫描的数据量。
96+
```
97+
{{- if eq $status "firing" }}
98+
error log count: {{ $value | printf "%.3f" }}
99+
{{- range $x := $relates.R1}}
100+
Loki log time: {{(nanoTime $x.Fields.__time__ 8).Format "2006-01-02T15:04:05Z07:00"}}
101+
Loki Log line: {{$x.Fields.__log__}}
102+
{{- end}}
103+
{{- end}}
104+
```

flashduty/zh/3. Monitors/2. 告警规则配置/9.victorialogs.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
# VictoriaLogs 告警规则配置说明
1+
---
2+
title: "VictoriaLogs 告警规则配置说明"
3+
description: "本文档介绍如何在 Monitors 告警引擎中配置 VictoriaLogs 数据源的告警规则。"
4+
date: "2025-12-30T18:21:50.775+08:00"
5+
url: "https://docs.flashcat.cloud/zh/flashduty/monitors/victorialogs-alert-rules"
6+
---
27

38
本文档介绍如何在 Monitors 告警引擎中配置 VictoriaLogs 数据源的告警规则。Monitors 通过 HTTP 查询 VictoriaLogs,支持查询日志原文、做统计分析,并基于结果进行阈值判定和数据存在/缺失判断。
49

@@ -114,3 +119,28 @@ _time:15m and level:INFO | stats by (level) count(*) total
114119
```
115120

116121
场景:某个服务应该一直都有 INFO 日志输出,如果在最近 15 分钟内没有任何 INFO 日志产生,就触发告警。
122+
123+
## 5. 获取告警时日志原文
124+
125+
告警查询条件通常使用 “做统计” 模式,这种模式没有返回日志原文。Monitors 支持在告警规则中配置“关联查询”,用于在告警触发时额外查询日志原文。
126+
127+
![](https://docs-cdn.flashcat.cloud/imges/mon/b5c1890d90cecf967695a4b0a4b4fba0.png)
128+
129+
“关联查询”的结果可以渲染在 “备注描述” 中,示例:
130+
131+
```
132+
{{- if eq $status "firing" }}
133+
triggered value: {{ $value | printf "%.3f" }}
134+
{{- range $x := $relates.R1}}
135+
{{- range $k, $v := $x.Fields }}
136+
{{- if eq $k "_time" }}
137+
{{ $k }} : {{ timeFormat $v "2006-01-02T15:04:05Z07:00" 8 }}
138+
{{- else }}
139+
{{ $k }} : {{ $v }}
140+
{{- end }}
141+
{{- end }}
142+
{{- end}}
143+
{{- else}}
144+
Recovered
145+
{{- end}}
146+
```

0 commit comments

Comments
 (0)