夜莺监控手把手配置 ElasticSearch 日志告警

手把手演示如何用夜莺接入 ElasticSearch 并配置日志告警,覆盖夜莺部署、ES 数据源接入、日志检索验证、查询统计、阈值条件和通知规则绑定。

作者 巴辉特

本文是一篇手把手教程,演示如何在夜莺监控中接入 ElasticSearch,并基于日志查询结果配置告警规则。你可以按顺序操作,也可以直接跳到自己需要的章节。

本文要解决什么问题

  • 快速启动一套可用于演示的夜莺监控。
  • 在夜莺中新增 ElasticSearch 数据源。
  • 用日志检索功能验证 ES 数据源是否接入成功。
  • 基于 ES query string、索引、日期字段和时间范围配置日志告警。
  • 把日志告警绑定到通知规则,让告警可以通过钉钉、飞书、邮件等渠道发出。

夜莺监控项目简介

夜莺监控是一个开源监控告警系统。它和 Grafana 一样可以接入多种数据源,但侧重点不同:Grafana 更偏可视化,夜莺更偏统一告警管理。

当前(2025.4.9)版本是 v8 的 beta10,支持 Prometheus、VictoriaMetrics、Thanos、M3DB、ElasticSearch、Loki、TDEngine 等数据源。产品逻辑示意图如下:

夜莺产品逻辑示意图

如果你有多套 Prometheus、VictoriaMetrics,想统一管理告警规则和通知规则,可以尝试夜莺。如果你既有指标时序库,又有 ElasticSearch、Loki 等日志库,也希望在一个平台里管理告警,夜莺也适合这种场景。

夜莺的 GitHub 地址是:https://github.com/ccfos/nightingale。当前 star 是 10.8k,社区活跃度还不错。repo group 是 ccfos,表示中国计算机学会开源发展委员会。夜莺最初由滴滴团队开发并开源,后来捐赠给基金会,大概率会长期维护,不像一些 KPI 项目一样,开发者离职或调岗后就无人维护。

快速搭建夜莺监控

夜莺的发布包可以从 GitHub releases 页面下载:https://github.com/ccfos/nightingale/releases。解压缩后,既可以用 Docker Compose 方式运行,也可以用二进制方式运行。

Docker Compose 方式

解压缩之后,进入 docker/compose-bridge 目录,执行:

docker-compose up -d

这个命令会启动演示环境所需组件。Docker Compose 适合快速试用。

二进制方式

普通场景下,夜莺只有一个核心二进制,就是压缩包里的 n9e。生产环境运行依赖 MySQL 和 Redis;如果只是为了快速尝试,可以直接使用内置的 SQLite 数据库和内存数据库。

本文使用最简单的方式,直接运行:

./n9e

为了快速演示,这里直接把进程运行在前台。生产环境建议使用 systemd 托管。本文也没有修改夜莺配置文件 etc/config.toml,默认会使用 SQLite 数据库和内存数据库。

端口和登录方式

不管是 Docker Compose 方式还是二进制方式,夜莺默认端口都是 17000,默认用户名和密码是 rootroot.2020

夜莺登录

接入 ElasticSearch 数据源

夜莺接入ElasticSearch数据源

从菜单中找到数据源,点击新增,然后选择 ElasticSearch 数据源。需要填写 ElasticSearch 的连接地址、认证信息、版本等。

如果你的 ElasticSearch 版本是 8.x 以上,在夜莺里选择 7.0+ 即可。

配置ElasticSearch数据源

这里有一个容易忽略的配置:关联告警引擎。默认是 default。如果你们使用边缘机房部署架构,有多个告警引擎,可以选择其他告警引擎。一般为了避免跨机房查询,最好选择数据源所在机房的告警引擎。

配置好数据源后,到日志检索菜单,选择刚才创建的数据源,输入要查询的索引,索引支持通配符,然后点击查询。

ElasticSearch日志查询

只要能查到数据,就说明 ElasticSearch 数据源接入成功。能查到数据,后面才适合继续配置告警规则。

配置 ElasticSearch 日志告警规则

从菜单中找到告警规则,然后选择「Default Busi Group」业务组。这个业务组是系统安装完成后自动创建的,你也可以创建自己的业务组。

告警规则未来会很多,需要分门别类管理,也需要统一权限管理,所以告警规则要归属到某个业务组下。选中「Default Busi Group」之后,点击右侧「新增」按钮创建告警规则。

夜莺告警规则

给告警规则取一个名字,然后选择数据源类型。本文使用 ElasticSearch 数据源类型。

如果系统里只有一个 ElasticSearch 数据源,可以直接选择这个数据源;也可以选择「全部数据源」。选择「全部数据源」表示这条规则会生效到所有 ElasticSearch 类型的数据源。

全部ElasticSearch数据源

然后配置查询条件:

配置查询条件

日志告警的核心是:先从 ES 查询一批日志,再把查询结果提取成一个数值,最后用告警条件判断这个数值是否触发阈值。

查询统计配置说明

查询统计部分用于生成 ES 查询,并把查询结果转换成一个可判断的数值。

配置项 含义 示例
索引 指定要查询的 ES 索引 logstash-*
过滤条件 ES query string 查询语法,不是 KQL 语法 参考夜莺文档中的 ES 告警规则样例
日期字段 夜莺根据该字段做时间范围查询 @timestamp
时间间隔 告警规则每次查询的时间范围 最近 5m 的日志
数值提取 把查询结果提取成一个数值 countsumavgmaxmin

过滤条件使用的是 ES 的 query string 查询语法,不是 Kibana KQL 语法。一些查询样例可以参考 夜莺文档

默认情况下,夜莺会使用 count 统计命中的日志行数。很多日志告警的逻辑都是“最近 5 分钟某类错误日志数量大于 0 就告警”。如果是 Access log,也可以提取延迟字段,计算 P99 延迟等。

除了 count,也可以使用 sumavgmaxmin 等统计函数。选择这些统计函数时,需要同时给出要统计的字段名。

告警条件和通知规则

告警条件用于对查询统计结果做阈值判定。如果满足条件,就触发告警。

其他配置项是通用告警规则配置,和 Prometheus 的告警规则配置类似,本文不逐项展开。页面里很多字段旁边都有小问号,鼠标放上去可以看到说明,建议配置时顺手看一下。

告警最终要发出来,比如通过钉钉、飞书、邮件等渠道。这部分由通知规则指定。告警规则配置页面继续往下滑,可以看到通知规则配置项,直接绑定之前创建的通知规则即可。

通知规则如何创建,可以参考上一篇文章:夜莺监控手把手配置 Prometheus 告警

配置检查清单

配置 ES 日志告警后,建议按下面顺序检查:

  1. 夜莺是否能正常登录,端口是否是 17000
  2. ElasticSearch 数据源连接地址、认证信息和版本是否配置正确。
  3. 日志检索菜单中是否能查到目标索引的数据。
  4. 告警规则是否选择了正确的数据源类型和数据源范围。
  5. 查询条件是否使用 ES query string,而不是 KQL。
  6. 日期字段是否和 ES 索引中的时间字段一致。
  7. 数值提取函数是否符合告警目标,例如错误日志数量用 count
  8. 告警条件是否能根据提取结果触发。
  9. 通知规则是否已经绑定,通知渠道是否能收到消息。

常见问题

Q1:为什么日志检索能查到,但告警不触发? A:检查告警规则中的索引、过滤条件、日期字段和时间间隔是否与日志检索时一致。还要检查数值提取和告警条件是否匹配,例如 count > 0

Q2:夜莺里的 ES 查询语法是不是 KQL? A:不是。这里使用的是 ES query string 查询语法。如果从 Kibana 复制 KQL,需要改写成 ES query string。

Q3:为什么要把告警规则放到业务组里? A:业务组用于分类管理和权限管理。告警规则数量多了以后,业务组可以帮助团队按业务、系统或组织边界管理规则。

总结

用夜莺配置 ElasticSearch 日志告警,关键路径是:启动夜莺、接入 ES 数据源、用日志检索验证数据、创建 ES 类型告警规则、配置查询统计和告警条件、绑定通知规则。只要先确认“能查到日志”,再确认“查询结果能提取成数值”,日志告警的配置就会清晰很多。

延伸路径

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

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

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