核心要点
- 夜莺 v8.0.0-beta.3 开始支持 Elasticsearch 日志告警,这是社区一直期待的能力。
- v8 默认配置使用 sqlite 和 miniredis,测试环境不再强依赖 MySQL、Redis,解压发布包后可直接运行二进制体验。
- 配置 ES 日志告警需要先添加 Elasticsearch 数据源,再创建 Log 类型告警规则。
- 告警规则的关键配置包括索引、过滤条件、日期字段、时间间隔、数值提取和告警条件。
- beta.3 还打散了每个告警规则对应 goroutine 的启动时机,避免大量规则同时启动造成瞬时查询压力。
夜莺项目(https://github.com/ccfos/nightingale)发布了 v8.0.0-beta.3 版本。这个版本主要支持了 ES 日志告警,下面给大家介绍如何下载、配置数据源和创建日志告警规则。
新版本下载
到如下地址下载发布包:
由于夜莺 v8 版本默认配置使用 sqlite 和 miniredis,不再强依赖 MySQL、Redis,所以解压缩发布包到临时目录后,直接运行二进制即可启动测试。当然,生产环境还是要使用 MySQL、Redis。
配置 Elasticsearch 数据源
首先添加一个 ElasticSearch 数据源。进入“数据源”菜单,点击“新增”,选择 ElasticSearch 类别:

在新建 ElasticSearch 数据源页面,填写 ElasticSearch 的连接地址、认证信息、版本、关联的告警引擎等信息。

关联的告警引擎默认是 default。如果你们使用边缘机房部署架构,有多个告警引擎,可以选择其他告警引擎。一般来说,为了避免跨机房查询,最好选择数据源所在机房的告警引擎。
配置 ES 日志告警规则
进入告警规则配置页面,选中某个业务组,点击新增:

选择 Log 类型,截图如下:

几个关键配置解释如下:
| 配置项 | 填写内容 | 说明 |
|---|---|---|
| 数据源类型 | elasticsearch |
表示这是一条 ES 日志告警规则 |
| 数据源筛选 | 一个或多个 ES 数据源 | 大部分公司有多套 ES,可以选择规则生效的数据源范围 |
| 索引 | 例如 logstash-* |
指定 ES 索引,支持通配符 |
| 过滤条件 | ES query string 查询语法 | 注意不是 KQL 语法,查询样例见文档 |
| 日期字段 | 例如 @timestamp |
夜莺根据日期字段做时间范围查询 |
| 时间间隔 | 例如最近 5m | 告警规则每次查询的时间范围 |
| 数值提取 | count、sum、avg、max、min 等 | 将查询结果转换成用于阈值判定的数值 |
| 告警条件 | 阈值判断表达式 | 查询统计结果满足条件时触发告警 |
其中“查询统计”是 ES 日志告警的核心配置。夜莺会根据索引、过滤条件、日期字段、时间间隔和数值提取配置生成查询语句,然后到 ES 查询。查到结果之后,再根据告警条件判断是否触发阈值。
过滤条件使用 ES 的 query string 查询语法,不是 KQL 语法。一些查询样例见 文档 📌。
数值提取用于把日志查询结果转换成一个数值。例如使用 count 统计查到了几行日志,作为最终查询结果,再和后面的告警条件做阈值判定。除了 count,还可以使用 sum、avg、max、min 等统计函数。使用这类统计函数时,需要同时给出要统计的字段名。
其他配置项是通用配置项,和 Prometheus 告警规则配置类似,这里不一一介绍。
ES 日志告警配置流程
可以按下面顺序验证:
- 下载并启动夜莺 v8.0.0-beta.3。
- 在“数据源”里新增 ElasticSearch 数据源。
- 填写连接地址、认证信息、版本和关联告警引擎。
- 进入告警规则页面,选择业务组并新增规则。
- 规则类型选择 Log。
- 选择数据源类型和数据源筛选范围。
- 配置索引、过滤条件、日期字段和时间间隔。
- 配置数值提取方式,例如 count。
- 配置告警条件并保存规则。
这个流程适合把“错误日志数量超过阈值”“特定关键字日志出现次数异常”等日志场景纳入夜莺统一告警体系。
其他改动
beta.3 还对每个告警规则对应 goroutine 的启动时机做了打散操作,避免大量告警规则同时启动导致时序库瞬间查询压力过大。
这个改动虽然不如 ES 日志告警显眼,但对规则数量较多的环境很重要。告警规则同时启动时,如果集中打到后端数据源,可能造成瞬时查询压力;启动时机打散后,查询压力会更平滑。
结语
如果你有什么建议,欢迎在 https://github.com/ccfos/nightingale 上提 issue。如果能来个 star 就更好了,让更多人知道并参与;即便项目现在还有瑕疵,也会在开源社区推动下越来越好。
FAQ
Q1:夜莺 v8.beta3 支持什么类型的日志告警? A:本版本支持 Elasticsearch 日志告警,可以通过索引、过滤条件、日期字段、时间范围、数值提取和告警条件配置日志阈值告警。
Q2:过滤条件使用 KQL 吗? A:不是。文章明确说明过滤条件使用 ES 的 query string 查询语法,不是 KQL 语法。
Q3:v8.beta3 测试环境还需要 MySQL 和 Redis 吗? A:测试环境不强依赖。v8 默认配置使用 sqlite 和 miniredis,解压发布包后可直接运行二进制测试;生产环境仍然建议使用 MySQL、Redis。