Array|监控系统选型,这篇不可不读( 四 )


Graph:数据存储组件 , 底层使用RRDTool(时序数据库)做单个指标的存储 , 并通过缓存、分批写入磁盘等方式进行了优化 。据说一个graph实例能够处理8W+每秒的写入速率 。
Judge和Alarm:告警组件 , Judge对Transfer组件上报的数据进行实时计算 , 判断是否要产生告警事件 , Alarm组件对告警事件进行收敛处理后 , 将告警消息推送给各个消息通道 。
API:面向终端用户 , 收到查询请求后会去Graph中查询指标数据 , 汇总结果后统一返回给用户 , 屏蔽了存储集群的分片细节 。
下面是Open-Falcon的优势:
自动采集能力:Falcon-agent 能自动采集服务器的200多个基础指标(比如CPU、内存等) , 无需在server上做任何配置 , 这一点可以秒杀Zabbix.
强大的存储能力:底层采用RRDTool , 并且通过一致性hash进行数据分片 , 构建了一个分布式的时序数据存储系统 , 可扩展性强 。
灵活的数据模型:借鉴OpenTSDB , 数据模型中引入了tag , 这样能支持多维度的聚合统计以及告警规则设置 , 大大提高了使用效率 。
插件统一管理:Open-Falcon的插件机制实现了对用户自定义脚本的统一化管理 , 可通过HeartBeat Server分发给agent , 减轻了使用者自主维护脚本的成本 。
个性化监控支持:基于Proxy-gateway , 很容易通过自主埋点实现应用层的监控(比如监控接口的访问量和耗时)和其他个性化监控需求 , 集成方便 。
下面是Open-Falcon的劣势:
整体发展一般:社区活跃度不算高 , 同时版本更新慢 , 有些大厂是基于它的稳定版本直接做二次开发的 , 关于以后的前景其实有点担忧 。
UI不够友好:对于业务线的研发来说 , 可能只想便捷地完成告警配置和业务监控 , 但是它把机器分组、策略模板、模板继承等概念全部暴露在UI上 , 感觉在围绕这几个概念设计UI , 理解有点费劲 。
安装比较复杂:个人的亲身感受 , 由于它是从小米内部衍生出来的 , 虽然去掉了对小米内部系统的依赖 , 但是组件还是比较多 , 如果对整个架构不熟悉 , 安装很难一蹴而就 。
3. Prometheus(号称下一代监控系统)
Array|监控系统选型,这篇不可不读
文章图片

文章图片

Prometheus(普罗米修斯)是由前google员工2015年正式发布的开源监控系统 , 采用Go语言开发 。它不仅有一个很酷的名字 , 同时它有Google与k8s的强力支持 , 开源社区异常火爆 。
Prometheus 2016年加入云原生基金会 , 是继k8s后托管的第二个项目 , 未来前景被相当看好 。它和Open-Falcon最大不同在于:数据采集是基于Pull模式的 , 而不是Push模式 , 并且架构非常简单 。
先来了解下Prometheus的架构设计:
Array|监控系统选型,这篇不可不读
文章图片

文章图片

Prometheus架构图 , 来自网络
Prometheus Server:核心组件 , 用于收集、存储监控数据 。它同时支持静态配置和通过Service Discovery动态发现来管理监控目标 , 并从监控目标中获取数据 。此外 , Prometheus Server 也是一个时序数据库 , 它将监控数据保存在本地磁盘中 , 并对外提供自定义的 PromQL 语言实现对数据的查询和分析 。
Exporter:用来采集数据 , 作用类似于agent , 区别在于Prometheus是基于Pull方式拉取采集数据的 , 因此 , Exporter通过HTTP服务的形式将监控数据按照标准格式暴露给Prometheus Server , 社区中已经有大量现成的Exporter可以直接使用 , 用户也可以使用各种语言的client library自定义实现 。
Push gateway:主要用于瞬时任务的场景 , 防止Prometheus Server来pull数据之前此类Short-lived jobs就已经执行完毕了 , 因此job可以采用push的方式将监控数据主动汇报给Push gateway缓存起来进行中转 。


推荐阅读