夜莺监控支持 ES 日志告警了

夜莺监控从 v8.beta3 开始支持 Elasticsearch 日志告警,可通过索引、过滤条件、日期字段、时间范围和数值提取配置日志阈值告警。

作者 Nightingale

核心要点

  • 夜莺 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 的连接地址、认证信息、版本、关联的告警引擎等信息。

创建ES数据源

关联的告警引擎默认是 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 日志告警配置流程

可以按下面顺序验证:

  1. 下载并启动夜莺 v8.0.0-beta.3。
  2. 在“数据源”里新增 ElasticSearch 数据源。
  3. 填写连接地址、认证信息、版本和关联告警引擎。
  4. 进入告警规则页面,选择业务组并新增规则。
  5. 规则类型选择 Log。
  6. 选择数据源类型和数据源筛选范围。
  7. 配置索引、过滤条件、日期字段和时间间隔。
  8. 配置数值提取方式,例如 count。
  9. 配置告警条件并保存规则。

这个流程适合把“错误日志数量超过阈值”“特定关键字日志出现次数异常”等日志场景纳入夜莺统一告警体系。

其他改动

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。

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云