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


Alert Manager:当告警产生时 , Prometheus Server将告警信息推送给Alert Manager , 由它发送告警信息给接收方 。
Web UI:Prometheus内置了一个简单的web控制台 , 可以查询配置信息和指标等 , 而实际应用中我们通常会将Prometheus作为Grafana的数据源 , 创建仪表盘以及查看指标 。
下面是Prometheus的优势:
轻量管理:架构简单 , 不依赖外部存储 , 单个服务器节点可直接工作 , 二进制文件启动即可 , 属于轻量级的Server , 便于迁移和维护 。
较强的处理能力:监控数据直接存储在Prometheus Server本地的时序数据库中 , 单个实例可以处理数百万的metrics 。
灵活的数据模型:同Open-Falcon , 引入了tag , 属于多维数据模型 , 聚合统计更方便 。
强大的查询语句:PromQL允许在同一个查询语句中 , 对多个metrics进行加法、连接和取分位值等操作 。
很好地支持云环境:能自动发现容器 , 同时k8s和etcd等项目都提供了对Prometheus的原生支持 , 是目前容器监控最流行的方案 。
下面是Prometheus的劣势:
功能不够完善:Prometheus从一开始的架构设计就是要做到简单 , 不提供集群化方案 , 长期的持久化存储和用户管理 , 而这些是企业变大后所必须的特性 , 目前要做到这些只能在Prometheus之上进行扩展 。
网络规划变复杂:由于Prometheus采用的是Pull模型拉取数据 , 意味着所有被监控的endpoint必须是可达的 , 需要合理规划网络的安全配置 。
监控系统的选型建议
通过上面的介绍 , 大家对主流的监控系统应该有了一定的认识 。面对选型问题 , 我的建议是:
1、先明确清楚你的监控需求:要监控的对象有哪些?机器数量和监控指标有多少?需要具备什么样的告警功能?
2、监控是一项长期建设的事情 , 一开始就想做一个 All In One 的监控解决方案 , 我觉得没有必要 。从成本角度考虑 , 在初期直接使用开源的监控方案即可 , 先解决有无问题 。
3、从系统成熟度上看 , Zabbix属于老牌的监控系统 , 资料多 , 功能全面且稳定 , 如果机器数量在几百台以内 , 不用太担心性能问题 , 另外 , 采用数据库分区、SSD硬盘、Proxy架构、Push采集模式都可以提高监控性能 。
4、Zabbix在服务器监控方面占绝对优势 , 可以满足90%以上的监控场景 , 但是应用层的监控似乎并不擅长 , 比如要监控线程池的状态、某个内部接口的执行时间等 , 这种通常都要做侵入式埋点 。相反 , 新一代的监控系统Open-Falcon和Prometheus在这一点做得很好 。
5、从整体表现上来看 , 新一代监控系统也有明显的优势 , 比如:灵活的数据模型、更成熟的时序数据库、强大的告警功能 , 如果之前对zabbix这种传统监控没有技术积累 , 建议使用Open-Falcon或者Prometheus.
6、Open-Falcon的核心优势在于数据分片功能 , 能支撑更多的机器和监控项;Prometheus则是容器监控方面的标配 , 有Google和k8s加持 。
7、Zabbix、Open-Falcon和Prometheus都支持和Grafana做快速集成 , 想要美观且强大的可视化体验 , 可以和Grafana进行组合 。
8、用合适的监控系统解决相应的问题即可 , 可以多套监控同时使用 , 这种在企业初期很常见 。
9、到中后期 , 随着机器数据增加和个性化需求增多(比如希望统一监控平台、打通公司的CMDB和组织架构关系) , 往往需要二次开发或者通过监控系统提供的API做集成 , 从这点来看 , Open-Falcon或者Prometheus更合适 。
10、如果非要自研 , 可以多研究下主流监控系统的架构方案 , 借鉴它们的优势 。
最后的话
本文对监控体系的基础知识、原理和主流架构做了详细梳理 , 希望有助于大家对监控系统的认识 , 以及在技术选型时做出更合适的选择 。


推荐阅读