夜莺

夜莺(Nightingale)是一个 All-in-One 的云原生监控工具,集合了 Prometheus 和 Grafana 的优点,你可以在 UI 上管理和配置告警策略,也可以对分布在多个 Region 的指标、日志、链路追踪数据进行统一的可视化和分析。夜莺融入了顶级互联网公司可观测性最佳实践,沉淀了众多社区专家经验,开箱即用。

夜莺成为中国计算机学会(CCF)托管的第一个开源项目

夜莺(Nightingale)由滴滴孵化,并于 2020 年 3 月开源,目前已经迭代发布了 100 多个版本,有 100 多位 Contributor,在 GitHub 上 star 超过 7.9K,fork 超过 1200 次,终端用户上万家。2022 年 5 月 11 日,中国计算机学会在中科院计算所报告厅举行了夜莺开源项目捐赠仪式,夜莺成为学会开源发展委员会成立后接受捐赠的首个开源项目。
点击查看 >

一、夜莺监控

夜莺监控(Nightingale)是一款开箱即用、默认中文、界面美观的开源监控系统,100% 国产更懂你的苦。你还在为搭建/配置/调优「Prometheus + AlertManager + Grafana」的监控平台而烦恼吗?开箱即用的夜莺监控轻松解决你的问题。

GitHub:https://github.com/ccfos/nightingale

夜莺监控是一款先进的开源云原生监控分析系统,采用 All-In-One 的设计,集数据采集、可视化、监控告警、数据分析、权限管理于一体,拥有企业级的监控分析和告警能力。夜莺集合了 Prometheus 和 Grafana 的优点,你可以在 UI 上管理和配置告警策略,也可以对分布在多个 Region 的指标、日志、链路追踪数据进行统一的可视化和分析

夜莺监控在运维圈里很有名,它“出身名门”最初是由滴滴孵化并开源,在此期间沉淀了一线互联网公司可观测性的最佳实践,有大厂的实践背书可靠性和实用性上毋庸置疑,是中国计算机学会(CCF)接受捐赠并托管的第一个开源项目,由运维圈的“老炮”秦晓辉等人设计、开发和维护。截止当前,夜莺监控已在 GitHub 上获得了超过 8000 颗星,1200+ 次 Fork,发展势头迅猛、开源社区活跃,并且已经服务了上千家,分布在各行各业的企业。

接下来,我们一起上手这款开箱即用的开源监控利器吧!

二、安装启动

最简单的部署方式是使用 docker-compose,可实现一键启动,执行下面的命令即可:

git clone https://github.com/ccfos/nightingale.git
cd nightingale/docker
docker-compose up -d
# 成功后会有以下输出
# Creating mysql      ... done
# Creating redis      ... done
# Creating prometheus ... done
# Creating ibex       ... done
# Creating agentd     ... done
# Creating n9e        ... done
# Creating telegraf   ... done

启动之后浏览器直接访问:127.0.0.1:17000,输入账号 root 密码:root.2020,登陆后就能看到管理界面啦!

不过,我还是更推荐大家使用二进制方式部署,因为这种方式不依赖 Docker、更稳定、升级也方便,可用于生产环境(官方推荐),部署起来也不麻烦,也就多几行命令的事,下面是 linux x86 环境的示例和注解:

# 创建个 n9e 的目录,后面把 n9e 相关的文件解压到这里
mkdir -p /opt/n9e && cd /opt/n9e

# 下载 n9e 发布包,amd64 是 x84 的包,下载站点也提供 arm64 的包,如果需要其他平台的包则要自行编译了
tarball=n9e-v6.1.0-linux-amd64.tar.gz
urlpath=https://download.flashcat.cloud/${tarball}
wget -q $urlpath || exit 1

# 解压缩发布包
tar zxvf ${tarball}

# 解压缩之后,可以看到 n9e.sql 是建表语句,导入数据库
mysql -uroot -p1234 < n9e.sql

# 启动 n9e,先使用 nohup 简单测试,如果需要 systemd 托管,请自行准备 service 文件
nohup ./n9e &> n9e.log &

# 检查 n9e.log 是否有异常日志,检查端口是否在监听,正常应该监听在 17000
ss -tlnp|grep 17000

至此,安装部分就结束了,接下来就是上手体验了。

三、快速上手

3.1 配置数据源

夜莺不生产日志,只是日志的“监工”。所以安装完就要先配置日志数据,用法类似 Grafana 可直接接入数据源。菜单位置:「系统配置」-「数据源」,目前支持的数据源有:prometheus、victoriametrics、thanos、m3、elasticsearch、loki 等数据源。

数据源接入之后,就可以查看这些数据,做可视化分析、告警之类的操作了,比如完成数据源接入之后,就可以十分方便地通过可视化的方式查看日志了。

夜莺默认提供了一些可视化大盘(菜单位置:「仪表盘」-「内置仪表盘」)和内置告警规则(菜单位置:「告警管理」-「内置规则」),导入自己的业务组(这是个管理概念,不同的告警规则和仪表盘可以使用不同的业务组分门别类管理 + 控制权限)就能使用啦。

3.2 好看的仪表盘

夜莺的仪表盘展示效果美观、性能出众、功能丰富,虽然还没有 Grafana 的全面,但基本可以作为 Grafana 的国产化平替了。夜莺的仪表盘支持暗黑主题,效果如下:

前端 GitHub 地址:https://github.com/n9e/fe

3.3 采集器

如果之前没有做过监控数据收集,可以使用夜莺团队提供的采集器 categraf,这同样是一款开源的 telemetry 数据采集器,它内置了 OS、SNMP、IPMI、MySQL、Redis、MongoDB、Oracle、Kafka、ElasticSearch、cAdvisor 等多种采集插件。

GitHub:https://github.com/flashcatcloud/categraf

当然,也可以使用其他采集器,比如 telegraf、grafana-agent 等,但是 categraf 的对接最为丝滑。夜莺支持多种数据接入协议,比如 prometheus remote write、OpenTSDB、Datadog 等,接收到数据之后做统一转换,然后转发给后端时序库,具体转发给哪些时序库可以在夜莺的配置文件中配置。

3.4 告警管理

灵活的告警是优秀监控系统的标配,夜莺在这方面十分全面。它可以用一套规则生效到多个数据源,支持级别抑制、生效时间、告警屏蔽、告警订阅、告警自愈等规则。

  • 级别抑制:高级别抑制低级别告警,比如磁盘利用率超过 95% 产生 P1 告警,超过 85% 产生 P2 告警,如果某一时刻磁盘利用率跑到 100%,就只会触发 P1 告警,P2 被抑制,避免告警打扰;
  • 生效时间:可配置告警规则判定的生效时间,支持配置不同的多个日期和时段;
  • 告警屏蔽:减少已知告警的干扰,比如某个机器要维护,可以提前屏蔽相关告警;
  • 告警订阅:告警消息分组通知;
  • 告警自愈:告警可触发预先设定好的脚本,自动解决故障;

菜单「告警管理」-「规则配置」的界面和示例如下:

四、深入了解

监控并不仅仅是可视化+告警那么简单,里面有很多道道,下面让我们“往下”走一点,深入了解下夜莺监控的架构和解决的痛点。

4.1 架构介绍

夜莺作为一款 Go 写的监控系统,不仅部署方便,而且整体设计上非常开放和灵活,可以和开源生态上其他软件组合使用,适用于已有监控系统升级或从零搭建监控平台等场景。

  • 采集器:可对接 telegraf、categraf、grafana-agent、datadog-agent、以及各类 exporter;
  • 存储:可对接 prometheus、thanos、m3、victoriametrics 等。

架构图如下:

从依赖上看,夜莺就只依赖 MySQL 和 Redis,这俩存储对于技术人员来说,都是非常熟悉的。重点是它部署时只需一个二进制文件 + 配置文件,没有其他依赖,将开箱即用的精神贯彻到底!

4.2 项目结构

下面简单介绍一下夜莺的项目结构,即核心功能模块介绍,方便想要深入了解夜莺的同学快速进入源码。

➜ # 夜莺的目录结构介绍
.
├── ...
├── alert         告警引擎相关逻辑,对 Prometheus、Loki、TDEngine 等数据源做异常数据判断并产生告警事件。
├── center        Web 后端的逻辑。
├── cli           命令行工具,用于 v5 版本升级 v6 版本时的数据迁移。
├── cmd           入口包,所有的二进制的 main 函数入口都在这里。
├── conf          配置文件在内存里映射的数据结构。
├── docker        容器相关的文件,包括 Dockerfile 和 docker-compose 等,数据库的建表 SQL 也在这里。
├── etc           配置文件,重点关注 config.toml,如果使用了边缘机房的部署方案,还需要关注 edge.toml。
├── integrations  集成目录,包含比如 MySQL、Redis、Elasticsearch 等各个监控目标的内置仪表盘、告警规则等。
├── models        数据库操作相关的代码。
├── pkg           通用 lib 库。
├── prom          Prometheus 相关的代码,包括 remote write 写数据以及查询接口的封装。
├── tdengine      查询 TDEngine(时序数据库)相关的代码。
├── storage       MySQL 和 Redis 的初始化连接相关的代码。
└── pushgw        Pushgateway 相关的代码,用于接收 remote write 数据、opentsdb 格式的数据、datadog 格式的数据、open-falcon 格式的数据,然后统一做格式转换写入后端存储。

4.3 多机房场景

你是否遇到过需要监控多机房的场景?

目前,大多数公司都有很多机房,它们分布在不同的区域,这让监控变得不再简单。因为如果机房之间网络链路很好,那么只需要部署一套监控系统就搞定了。但如果机房之间的网络不太好,无法做到监控数据实时、可靠的上传,但是告警规则又想在一个中心管理。

这个时候就需要高级部署方案,夜莺就提供了现成的边缘机房部署方案,可以方便的解决上面的问题。架构图如下:

通过夜莺提供的高级部署方案,即在网络不好(边缘)机房部署(下沉)时序数据和告警引擎(n9e-edge),保证数据的不丢失和告警规则的同步,轻松实现统一的监控中心,多机房监控只需管理一套告警规则和可视化。

真·企业级监控和告警一体化解决方案!

五、最后

开源的监控系统,目前用的比较广泛的是 Zabbix 和 Prometheus,但它们或多或少都有一些不擅长的场景。

Zabbix 擅长设备监控,对各类操作系统、网络设备有较好的兼容适配,但是不擅长微服务和云原生环境的监控。

  • 不擅长动态变化对象的监控:Zabbix 是资产管理式,在云原生环境下,资产是动态变化的,比如 Pod、Service、Deployment 等。
  • 不擅长微服务的监控:在微服务和云原生环境下,监控指标爆炸性增长,而且指标有不同的维度描述,Zabbix 使用关系型数据库存储时序数据,不擅长处理这种大规模的多维度的指标数据。

Prometheus 擅长微服务和云原生环境的监控,基本已经成为 Kubernetes 的标配,在云原生环境下非常流行,但它也有缺点。

  • 设计上偏工具化,使用配置文件来管理规则,缺少权限化管理的 WebUI。
  • 使用 Prometheus 的公司通常会不止一套,比如每个 Kubernetes 一套 Prometheus,多个 Prometheus 可能有很多相同的规则,管理起来比较重复。
  • 其他一些小点:告警引擎是单点,告警事件没有持久化;告警规则缺乏一些更为灵活的配置,比如生效时间;存储是单点,当然,现在已经有 VictoriaMetrics、Thanos 等方案了

夜莺作为一款开源的云原生监控系统,在云原生方面有着先天性上的优势,而且使用国外的开源监控项目,最担心的就是没有技术支持,夜莺作为“100% 国产”开源项目,在技术支持上分为社区支持和商业支持(响应更加及时)两种。夜莺的企业用户已有上千家,比如移动、联通、电信、米哈游、莉莉丝、方正证券、国泰君安、海底捞、海康、搜狐、新浪等,分布在各行各业。

还是那句话,开源不易如果觉得项目不错的话,就给个 Star 支持一下,试用反馈遇到的问题也是对开源的一种支持!

GitHub:https://github.com/ccfos/nightingale

官网:https://flashcat.cloud/

最后,没有能搞定一切的银弹,或许这也是技术一直在更新迭代的动力之一吧!所以不要停下学习的脚步👣

开箱即用

支持 Docker、Helm Chart、云服务等多种部署方式;集数据采集、监控告警、可视化为一体;内置多种监控仪表盘、快捷视图、告警规则模板,导入即可快速使用;大幅降低云原生监控系统的建设成本、学习成本、使用成本

云原生

以交钥匙的方式快速构建企业级的云原生监控体系,支持 Categraf、Telegraf、Grafana-agent 等多种采集器,支持 Prometheus、VictoriaMetrics、M3DB、ElasticSearch 等多种数据库,兼容支持导入 Grafana 仪表盘,与云原生生态无缝集成

高性能高可用

得益于夜莺的多数据源管理引擎,和夜莺引擎侧优秀的架构设计,借助于高性能时序库,可以满足数亿时间线的采集、存储、告警分析场景,节省大量成本;夜莺监控组件均可水平扩展,无单点,已在上千家企业部署落地,经受了严苛的生产实践检验

灵活扩展

夜莺监控,可部署在 1 核 1G 的云主机,可在上百台机器集群化部署,可运行在 K8s 中;也可将时序库、告警引擎等组件下沉到各机房、各 Region,兼顾边缘部署和中心化统一管理,解决数据割裂,缺乏统一视图的难题

产品架构

专业版

从 Open-Falcon 到 Nightingale、Categraf,快猫星云技术团队在监控领域已经深耕十年之久,支持和服务了数千家企业,是开源监控的行业引领者。我们看到很多公司从开源监控受益,也看到很多公司因为缺乏行业最佳实践,在可观测性体系建设中走了不少弯路,包括如何选型工具和构建平台,如何对可观测性数据进行治理,如何利用好可观测性数据,打通各个维度数据之间的串联关系,快速定位和止损故障。

快猫星云创始团队,均来自于阿里、百度、滴滴,快猫星云以开源夜莺为内核打造的统一可观测平台,是国内顶级互联网公司可观测性实践和服务稳定性保障方法论的产品化落地,我们致力于帮助企业快速构建统一的可观测性体系以及构建数据驱动的稳定性治理框架。下面是企业版与开源版的对比说明,您可以联系我们进一步了解【Flashcat专业版】【Flashcat企业版】的更多信息。
数据源管理
Prometheus
ElasticSearch
Jaeger
OpenSearch
ClickHouse
阿里云 SLS
腾讯云 CLS
Zabbix
InfluxDB
MySQL/Oracle/PostgreSQL/SQLServer
SkyWalking
Zipkin
数据采集器
指标(Metrics)采集
日志(Logging)采集
Tracing 数据收集
物理机/虚拟机数据采集
容器/K8s数据采集
交换机/网络设备数据采集
常用中间件/数据库数据采集
Windows 数据采集
数据采集规则集中管理和下发
仪表盘
内置仪表盘模版
导入Grafana模版
指标仪表盘
日志仪表盘
多数据源支持
告警管理
指标(Metrics)阈值告警
主机(Host)失联告警/时间偏移告警
告警规则管理:屏蔽、订阅、记录规则
活跃告警/历史告警管理
内置众多告警策略模版
日志(Logging)告警
智能告警
内置电话/短信通道(阿里云/腾讯云)
告警聚合降噪
告警升级
告警自愈
告警自愈脚本管理,自愈脚本和告警规则关联管理
分布式链路追踪
Jaeger 数据源
SkyWalking 数据源
Zipkin 数据源
Elastic APM 数据源
阿里云 SLS trace 数据源
Pinpoint 数据源
基础设施
主机分组、标签管理
主机基础元信息(metadata)展示和管理
内置多种基础设施的数据采集规则模版
主机扩展元信息(metadata)展示和管理
Categraf 采集规则集中管理和下发
人员组织
用户管理
团队管理
组织管理
角色管理
权限管理
系统配置
数据源自定义配置
通知媒介、通知渠道、通知模版自定义配置
单点登录自定义配置(OAuth、LDAP、OIDC、CAS等)
操作审计
支持关键操作和敏感操作的审计记录
技术支持
技术支持获取途径
技术支持响应级别
专家解决方案
开源版
GitHub Issue
一周
专业版
专项支持群、视频会议
7×12
7×12 专家技术支持
开源版
Flashcat
Flashduty