监控系统选型,这篇不可不读!

2020-10-05  本文已影响0人  夜空_2cd3

来自公众号:IT人的职场进阶
作者:骆俊武

image

之前,我写过几篇有关「线上问题排查」的文章,文中附带了一些监控图,有些读者对此很感兴趣,问我监控系统选型上有没有好的建议?

目前我所经历的几家公司,监控系统都是自研的。其实业界有很多优秀的开源产品可供选择,能满足绝大部分的监控需求,如果能从中选择一款满足企业当下的诉求,显然最省时省力。

这篇文章,我将对监控体系的基础知识、原理和架构做一次系统性整理,同时还会对几款最常用的开源监控产品做下介绍,以便大家选型时参考。内容包括3部分:

01 必知必会的监控基础知识

监控系统俗称「第三只眼」,几乎是我们每天都会打交道的系统,下面 4 项基础知识我认为是必须要了解的。

1. 监控系统的7大作用正所谓「无监控,不运维」,监控系统的地位不言而喻。不管你是监控系统的开发者还是使用者,首先肯定要清楚:监控系统的目标是什么?它能发挥什么作用?

image
  1. 使用监控系统的正确姿势

出任何线上事故,先不说其他地方有问题,监控部分一定是有问题的。

听着很甩锅的一句话,仔细思考好像有一定道理。我们在事故复盘时,通常会思考这3个和监控有关的问题:有没有做监控?监控是否及时?监控信息是否有助于快速定位问题?

可见光有一套好的监控系统还不够,还必须知道「****如何****用好它」。一个成熟的研发团队通常会定一个监控规范,用来统一监控系统的使用方法。

image

3. 监控的对象和指标都有哪些?监控已然成为了整个产品生命周期非常重要的一环,运维关注硬件和基础监控,研发关注各类中间件和应用层的监控,产品关注核心业务指标的监控。可见,监控的对象已经越来越立体化。这里,我对常用的监控对象以及监控指标做了分类整理,供大家参考。

image

3.1 硬件监控

包括:电源状态、CPU状态、机器温度、风扇状态、物理磁盘、raid状态、内存状态、网卡状态

3.2 服务器基础监控

3.3 数据库监控

包括:数据库连接数、QPS、TPS、并行处理的会话数、缓存命中率、主从延时、锁状态、慢查询

3.4 中间件监控

3.5 应用监控

4. 监控系统的基本流程
无论是开源的监控系统还是自研的监控系统,监控的整个流程大同小异,一般都包括以下模块:

image

02 主流监控系统介绍下面再来认识下主流的开源监控系统,由于篇幅有限,我挑选了3款使用最广泛的监控系统:Zabbix、Open-Falcon、Prometheus,会对它们的架构进行介绍,同时总结下各自的优劣势。

image

1. Zabbix(老牌监控的优秀代表)

image

Zabbix 1998年诞生,核心组件采用C语言开发,Web端采用PHP开发。它属于老牌监控系统中的优秀代表,监控功能很全面,使用也很广泛,差不多有70%左右的互联网公司都曾使用过 Zabbix 作为监控解决方案。

先来了解下Zabbix的架构设计:

image

Zabbix架构图

下面是 Zabbix 的优势:

下面是 Zabbix 的劣势:

2. Open-Falcon(小米出品,国内流行) image

Open-falcon 是小米2015年开源的企业级监控工具,采用Go和Python语言开发,这是一款灵活、高性能且易扩展的新一代监控方案,目前小米、美团、滴滴等超过200家公司在使用它。

小米初期也使用的Zabbix进行监控,但是机器量和业务量上来后,Zabbix就有些力不从心了。因此,后来自主研发了Open-Falcon,在架构设计上吸取了Zabbix的经验,同时很好地解决了Zabbix的诸多痛点。

先来了解下Open-Falcon的架构设计:

image

Open-Falcon架构图,来自网络

下面是Open-Falcon的优势:

下面是Open-Falcon的劣势:

3. Prometheus(号称下一代监控系统)

image

Prometheus(普罗米修斯)是由前google员工2015年正式发布的开源监控系统,采用Go语言开发。它不仅有一个很酷的名字,同时它有Google与k8s的强力支持,开源社区异常火爆。

Prometheus 2016年加入云原生基金会,是继k8s后托管的第二个项目,未来前景被相当看好。它和Open-Falcon最大不同在于:数据采集是基于Pull模式的,而不是Push模式,并且架构非常简单。

先来了解下Prometheus的架构设计:

image

Prometheus架构图,来自网络

下面是Prometheus的优势:

下面是Prometheus的劣势:

03 监控系统的选型建议

通过上面的介绍,大家对主流的监控系统应该有了一定的认识。面对选型问题,我的建议是:

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、如果非要自研,可以多研究下主流监控系统的架构方案,借鉴它们的优势。

最后的话本文对监控体系的基础知识、原理和主流架构做了详细梳理,希望有助于大家对监控系统的认识,以及在技术选型时做出更合适的选择。


image

由于篇幅问题,本文的内容并未涉及到全链路监控、日志监控、以及Web前端和客户端的监控,可见监控真的是一个庞大且复杂的体系,如果想理解透彻,必须理论结合实践再做深入。对于运维监控体系,如果你们也有自己的经验和体会,欢迎留言讨论。

上一篇下一篇

猜你喜欢

热点阅读