Skip to content

Commit 0b389a9

Browse files
committed
add doc: logs-alerting
1 parent 33843de commit 0b389a9

4 files changed

Lines changed: 57 additions & 0 deletions

File tree

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
title: "日志告警"
3+
description: "夜莺监控(Nightingale)支持日志告警,可以针对 ElasticSearch、Loki、ClickHouse 中的日志数据配置告警规则,周期性查询数据源,当数据源中的数据满足告警阈值时,触发告警。"
4+
date: 2025-06-01T16:11:07+08:00
5+
lastmod: 2025-06-01T16:11:07+08:00
6+
draft: false
7+
images: []
8+
menu:
9+
docs:
10+
parent: "usage"
11+
weight: 1300
12+
toc: true
13+
---
14+
15+
夜莺监控(Nightingale)支持日志告警,可以针对 ElasticSearch、Loki、ClickHouse 等数据源中的日志数据配置告警规则,周期性查询数据源,当数据源中的数据满足告警阈值时,触发告警。日志告警和指标告警的区别主要是查询条件的写法不同。其他各个字段都是通用的,请一定先阅读[指标告警](/zh/docs/usage/metric-alerting/)的内容,这里不再赘述。
16+
17+
## ElasticSearch 告警原理
18+
19+
ElasticSearch 支持不同的查询语法,比如 DSL、KQL、Lucene、EQL、SQL 等,夜莺作为一个告警引擎,本质就是让用户配置查询语句,然后周期性查询数据源,对查到的数据做阈值判断,满足阈值条件就触发告警。
20+
21+
最先支持的查询语法是 Lucene,即 query_string 方式,查到数据之后做一个基本的统计,比如做一个计数,统计一下查到的日志行数,或者针对日志中的某个字段做统计,计算其平均、最大值、分位值等。然后把统计结果和用户配置的阈值进行对比,满足阈值条件就触发告警。
22+
23+
## ElasticSearch 告警配置
24+
25+
首先是配置数据源,即当前告警规则要生效到哪些 ElasticSearch 数据源上,这个和指标告警本质是一样的逻辑。
26+
27+
<img src="/img/usage/logs-alerting/01.png" alt="选择 ElasticSearch 数据源"/>
28+
29+
> 🟢 数据源的类型那里,只有配置了对应类型的数据源,这里才会展示。即:如果你只配置了 Prometheus 类型的数据源,创建告警规则的时候,是看不到 ElasticSearch、TDEngine、ClickHouse 等其他类型的。
30+
31+
然后配置查询统计条件:
32+
33+
<img src="/img/usage/logs-alerting/02.png" alt="ElasticSearch 告警规则 - 配置查询统计条件"/>
34+
35+
首先要选择索引,支持通配符,我上面配置的是 `fc*`,然后最关键的是过滤条件,我上面配置的是 `message.status:>100`,过滤 `message.status` 字段大于 100 的日志。这个过滤条件是 Lucene 的语法,和 Kibana 的查询语法是不一样的。日志必然有个日期字段,需要通过配置告知夜莺,哪个字段是日期字段,然后配置一个时间间隔,上图配置的是 5 分钟,夜莺就根据日期字段过滤最近 5 分钟的数据。
36+
37+
然后下面是统计分析方法,上例中选择的是 `count`,表示统计日志行数,并且没有任何 Group By 条件。
38+
39+
最后是阈值判断,即把上面 `count` 的结果,和阈值做比对,如果符合条件就产生告警事件。上例中阈值是 `> 0` 就告警,即 `count` 的结果大于 0 就告警。
40+
41+
稍等片刻,我们可以看到产生的告警事件:
42+
43+
<img src="/img/usage/logs-alerting/03.png" alt="ElasticSearch 历史告警事件"/>
44+
45+
## ElasticSearch 过滤条件
46+
47+
过滤条件(即上例中的 `message.status:>100`)还有哪些写法?可以点击过滤条件旁边的那个小问号的图标,会在侧拉板中展示过滤条件的写法样例说明。一些典型的写法如下:
48+
49+
- `status:active` 查询 status 字段包含 active 的记录
50+
- `title:(quick OR brown)` 查询 title 字段包含 quick 或 brown 的记录
51+
- `author:"John Smith"` 查询 author 字段包含完整短语 “John Smith” 的记录
52+
- `count:[1 TO 5]` 数据范围查询,闭区间,即包含 1 和 5
53+
- `date:[2022-01-01 TO 2022-12-31]` 日期范围查询
54+
- `age:>=10` 数值大小过滤,大于等于 10
55+
56+
注意,为了避免犯错,建议字段后面的冒号`:`前后都不要加空格。另外,不同的条件之间可以使用 AND、OR 连接,比如 `status:active AND age:>=10`。更多写法请参考 [ElasticSearch 的官方文档](https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-query-string-query)
57+
69.8 KB
Loading
108 KB
Loading
138 KB
Loading

0 commit comments

Comments
 (0)