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

巴辉特 2025-04-14 15:53:47

本文是手把手教程,所以会比较冗长,请自行跳过已经熟悉的部分。本文的大纲如下:

  • 夜莺监控项目简介
  • 快速搭建夜莺监控
  • 接入 ElasticSearch 数据源
  • 配置告警规则

夜莺监控项目简介

夜莺监控是一个开源的监控告警系统,类似 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 命令,即可启动所有组件。不过我个人更喜欢二进制的方式部署,可以对各个组件有更精细的控制和了解。

二进制方式

普通场景使用,夜莺其实只有一个二进制,就是压缩包里的 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日志查询

能查到数据,后面就可以配置告警规则了。

配置告警规则

从菜单里找到告警规则,然后选择「Default Busi Group」业务组,这个业务组是系统安装完成之后自动创建的,你可以自行创建自己的业务组,告警规则未来会很多,需要分门别类管理,也需要统一权限管理,所以告警规则要归属到某个业务组下。选中「Default Busi Group」之后,右侧点击「新增」按钮即可创建告警规则。

夜莺告警规则

给告警规则随意取个名字,然后选择数据源类型,这里是 ElasticSearch 数据源类型,实际我只有一个 ElasticSearch 类型的数据源,这里我可以选择刚才创建的 ElasticSearch 数据源,也可以选择「全部数据源」,如果选择「全部数据源」,表示这个规则生效到所有 ElasticSearch 类型的数据源。

全部ElasticSearch数据源

然后配置查询条件:

配置查询条件

无非就是指定你要查询的索引、查询的条件、查询的时间范围等,对于查到的数据,默认采用 count 计数,一般如果结果大于 0 就告警。你也可以调整数据提取函数,比如 Access log 的话,可以提取延迟字段,计算 P99 延迟等。

几个关键配置解释如下:

  • 查询统计:编写查询过滤条件,夜莺就会根据这些配置生成查询语句,然后去 ES 查询,查到之后再根据告警条件判定是否触发阈值
    • 索引:就是指定 ES 索引,可以写通配符,比如 logstash-*
    • 过滤条件:就是 ES 的 query string 查询语法,注意不是 KQL 语法。一些查询样例见 文档 📌
    • 日期字段:夜莺根据日期字段来做时间范围查询,比如 @timestamp
    • 时间间隔:就是告警规则查询的时间范围,比如查询最近 5m 的日志
    • 数值提取:对查询结果进行数值提取,比如使用 count 统计一下查到了几行日志,作为查询结果最终的数值和后面的告警条件做阈值判定。除了 count 之外,还可以使用 sum、avg、max、min 等统计函数,统计函数自然是对某个字段做统计,所以选择统计函数的时候要同时给出要统计的字段名
  • 告警条件:对查询统计结果进行阈值判定,如果满足条件就触发告警

其他的配置项是通用配置项,和 Prometheus 的告警规则配置类似,这里就不一一介绍了。

告警最终是要发出来的,比如通过钉钉、飞书、邮件等,这是由通知规则指定的。告警规则配置页面继续往下滑动可以看到通知规则的配置项,这里我直接绑定之前创建的通知规则即可。之前的通知规则是如何创建的,可以参考上一篇文章:夜莺监控手把手配置 Prometheus 告警

另外,夜莺的告警规则配置的时候,各个表单有很多小问号,那都是说明文档,可以自行查看说明,了解各个配置项的作用。今天先介绍到这里,希望对大家有帮助。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat