1.基础介绍
夜莺监控是一款先进的开源云原生监控分析系统,采用 All-In-One 的设计,集数据采集、可视化、监控告警、数据分析、权限管理于一体,拥有企业级的监控分析和告警能力。夜莺集合了 Prometheus 和 Grafana 的优点,你可以在 UI 上管理和配置告警策略,也可以对分布在多个 Region 的指标、日志、链路追踪数据进行统一的可视化和分析
项目代码 后端:💡 https://github.com/ccfos/nightingale 前端:💡 https://github.com/n9e/fe
2.架构介绍
夜莺作为一款 Go 写的监控系统,不仅部署方便,而且整体设计上非常开放和灵活,可以和开源生态上其他软件组合使用,适用于已有监控系统升级或从零搭建监控平台等场景。
- 采集器:可对接 telegraf、categraf、grafana-agent、datadog-agent、以及各类 exporter;
- 存储:可对接 prometheus、thanos、m3、victoriametrics 等
架构图如下:
从依赖上看,夜莺就只依赖 MySQL 和 Redis,这俩存储对于技术人员来说,都是非常熟悉的。重点是它部署时只需一个二进制文件 + 配置文件,没有其他依赖,将开箱即用的精神贯彻到底!
3.多机房场景
目前,大多数公司都有很多机房,它们分布在不同的区域,这让监控变得不再简单。因为如果机房之间网络链路很好,那么只需要部署一套监控系统就搞定了。但如果机房之间的网络不太好,无法做到监控数据实时、可靠的上传,但是告警规则又想在一个中心管理。
这个时候就需要高级部署方案,夜莺就提供了现成的边缘机房部署方案,可以方便的解决上面的问题。架构图如下:
通过夜莺提供的高级部署方案,即在网络不好(边缘)机房部署(下沉)时序数据和告警引擎(n9e-edge),保证数据的不丢失和告警规则的同步,轻松实现统一的监控中心,多机房监控只需管理一套告警规则和可视化。
真·企业级监控和告警一体化解决方案!
4.开源主流监控介绍
开源的监控系统,目前用的比较广泛的是 Zabbix 和 Prometheus,但它们或多或少都有一些不擅长的场景。
Zabbix 擅长设备监控,对各类操作系统、网络设备有较好的兼容适配,但是不擅长微服务和云原生环境的监控。
- 不擅长动态变化对象的监控:Zabbix 是资产管理式,在云原生环境下,资产是动态变化的,比如 Pod、Service、Deployment 等。
- 不擅长微服务的监控:在微服务和云原生环境下,监控指标爆炸性增长,而且指标有不同的维度描述,Zabbix 使用关系型数据库存储时序数据,不擅长处理这种大规模的多维度的指标数据。
Prometheus 擅长微服务和云原生环境的监控,基本已经成为 Kubernetes 的标配,在云原生环境下非常流行,但它也有缺点。
- 设计上偏工具化,使用配置文件来管理规则,缺少权限化管理的 WebUI。
- 使用 Prometheus 的公司通常会不止一套,比如每个 Kubernetes 一套 Prometheus,多个 Prometheus 可能有很多相同的规则,管理起来比较重复。
- 其他一些小点:告警引擎是单点,告警事件没有持久化;告警规则缺乏一些更为灵活的配置,比如生效时间;存储是单点,当然,现在已经有 VictoriaMetrics、Thanos 等方案了
5.夜莺对比Prometheus
这是经常被问到的问题。如果您当前使用的是 Prometheus,而且没有痛点,那么就不需要考虑夜莺了,用好现在的体系就可以了。如果您用了多个时序库,比如 Prometheus、VictoriaMetrics、Thanos 等等,需要一个统一的平台来管理告警、看图,夜莺是一个选择。如果您想把监控的能力开放给公司所有研发团队,让研发团队自助服务,觉得 Prometheus 使用配置文件的告警规则管理方式不方便,夜莺是一个选择。如果您需要更为灵活的告警策略配置,比如控制生效时间、一套规则生效多个集群,夜莺是一个选择。如果您需要告警自愈能力,告警之后自动执行个脚本啥的,夜莺是一个选择。如果您需要一个统一的事件 OnCall 中心,聚合各个监控系统的告警,做统一的告警聚合降噪、排班认领升级、灵活的分发和协同,FlashDuty 是一个选择. (不是开源的,需要额外收费)
另外,相比 Grafana,夜莺的看图能力还是差一些,因为 Grafana 是 agpl 协议,我们也没法封装 Grafana 进夜莺,所以夜莺的看图是自研的,和 Grafana 没法 100% 兼容,当然,夜莺支持导入 Grafana 的仪表盘 JSON,基础的图表都是兼容的(但是导入体验做的还不好,这是一个巨大无比的工程)。另外,夜莺设计了内置告警规则和内置仪表盘,方便用户开箱即用,现在覆盖了常用组件,后面随着时间推移,这个体验也会越来越好,期待大家一起共建。
以笔者观察来看,很多公司是一套组合方案(成年人的世界,没有非黑即白,都要):
- 数据采集:组合使用了各种 agent 和 exporter,比如使用 Categraf,辅以各类 Exporter
存储:时序库主要使用 VictoriaMetrics,因为 VictoriaMetrics 兼容 Prometheus,而且性能更好且有集群版本,对大部分公司,单机版就足够用了 - 告警引擎:使用夜莺,方便不同的团队管理协作,内置了一些规则开箱即用,告警规则的配置比较灵活
- 看图可视化:使用 Grafana,图表更为炫酷,社区非常庞大,从 Grafana 站点可以找到很多别人做好的仪表盘,直接导入即可
- 告警事件 OnCall 分发:使用 FlashDuty,聚合了 Zabbix、Prometheus、夜莺、Open-Falcon、云监控、Elastalert 等各类告警事件,统一聚合降噪、排班、认领升级等。开源夜莺不提供日志告警能力,很多人会白嫖 FlashDuty 的日志告警能力,参看这里。