Nightingale是一套衍生自Open-Falcon的互联网监控解决方案,融入了滴滴的最佳实践,在性能、易用性、可用性方面都做了大幅改进,在滴滴抗住了7.7亿(包括物理机、虚机、容器、网络、业务模块的)监控指标
    Nightingale 采用树状节点导航,我们称之为对象树。对象树本质上是一种对监控对象的分组管理机制,方便查找和查看监控对象,以及对监控对象设置监控策略等管理动作。一棵典型的树可从上到下描述为组织架构关系、产品服务模块关系、机房和机器挂载关系,该导航树可根据用户需求自行灵活定制。

    夜莺与Zabbix的对比 - 图1

    绿色部分:数据采集—>传输—>存储链路 collector
    collector采用,采集指标有限,
    提供plugin插件,扩展功能。
    log日志采集,业务监控的工具
    SDK(Software Development Kit):软件开发工具包
    transfer相当于server端
    tsdb 时序数据库
    红色部分:告警引擎
    紫色部分:和用户的交互,提供的一些API、存储等

    对比项 夜莺 Zabbix 备注
    容量方面 可集群化扩展无上限,采取时序数据库 受限于单机数据库,监控数据用MySQL存储,监控容量有限 滴滴监控指标7.7亿,监控设备10万量级,每秒上报2800万监控点;Zabbix如果采集频率15秒,只能监控600台设备
    展示方面 灵活炫酷、直观易用 比较复古、易用性差 夜莺支持即时看图、监控大盘、监控大屏多种展示方式
    报警方面 生产级的灵活、直观易用 配置复杂,学习成本高 夜莺支持告警认领、告警升级、事件生命周期管理、告警回调、告警自愈、分时段告警、与条件告警、同环比告警、离群点检测等智能检测算法;
    用户方面 大规模互联网公司偏多,2020-03月份开源,资料比较少,出现问题解决问题较困难 传统企业偏多,是老牌监控系统,出现问题解决较容易 夜莺(包括Open-Falcon)有小米、美团、滴滴、360、新浪微博、京东金融、58、金山云、平安科技、方正证券等众多大厂使用,集群规模大;
    Zabbix由于起步较早,在传统企业应用较多;
    设备监控 对常用系统提供支持,支持并不是很完善 支持范围更广 夜莺对Linux、Windows、容器等支持较好,也支持交换机、防火墙等网络设备,对AIX、BSD等暂无支持;
    Zabbix对AIX、BSD等也有较好支持,对容器支持较差
    业务监控 多种接入方式,灵活完备 对业务模块监控能力较差,监控指标描述的数据格式比较死板,与最新的监控领域的推荐做法相比,还是差了一个时代 夜莺数据结构灵活,支持通过SDK埋点、端上日志解析、中心流式计算、集群指标聚合等手段提供完备的业务监控支持;
    Zabbix由于数据结构较为简单,历史包袱积重难返,对业务监控毫无建树
    运维体系 运维体系考虑较多 运维体系考虑较少 夜莺提供完备的用户权限体系、设备纳管、应用运维视角的CMDB、命令执行通道、告警自愈机制等运维体系的考量;
    Zabbix只是一个纯粹的监控,与运维体系的整合考虑较少
    二次开发 二开容易 二开难度高 夜莺后端全部是Go语言开发,前后端分离设计,上手容易;
    Zabbix是C+PHP+Java,前后端耦合较重,只能基于其API开发,难以直接修改其代码;

    主站:https://nge.didiyun.com/
    源码:https://github.com/didi/nightingale

    • collector即agent,可以采集机器常见指标,原生支持日志监控,支持插件机制,支持业务通过接口直接上报数据;
    • transfer提供rpc接口接收collector上报的数据,然后通过一致性哈希,将数据转发给多台tsdb和多台judge;
    • tsdb即open-falcon中的graph组件,用于存储历史数据,支持配置为双写模式提升系统容灾能力,tsdb会把监控数据转发一份给index建索引;
    • index是内存索引模块,替换原来的mysql方案,在内存里构建索引,便于后续数据检索,在检索的灵活性和检索性能方面大幅提升;
    • judge是告警引擎,从monapi(portal)同步监控策略,然后对接收到的数据做告警判断,如满足阈值,则生成告警事件推送到redis队列;
    • monapi(alarm)从redis队列中读取judge生成的事件,进行二次处理,补充一些元信息,生成告警消息,重新推送回redis队列;
    • 各发送组件,比如mail-sender、sms-sender等,从redis读取告警消息,发送告警,抽象出各类sender是为了后续定制方便;
    • monapi集成了原来多个模块的功能,提供接口给js调用,api前缀为/api/portal,数据查询走transfer,去除了 open-falcon 中原来的query组件,api前缀为/api/transfer,索引查询的api前缀/api/index,于是,在前端统一搭建nginx,即可通过不同location将请求转发到不同后端;
    • 数据库仍然使用MySQL,主要存储的内容包括:用户信息、团队信息、树节点信息、告警策略、监控大盘、屏蔽策略、采集策略、部分组件心跳信息等;