这篇文章,我将对监控体系的基础知识、原理和架构做一次系统性整理,同时还会对几款最常用的开源监控产品做下介绍,以便大家选型时参考。内容包括3部分:
必知必会的监控基础知识 主流监控系统介绍 监控系统的选型建议 必知必会的监控基础知识 我们可以理解监控系统就像我们古代打战的哨兵一样,哨兵的角色非常重要,敌人来了,哨兵会第一时间发出预警(吹笛、打鼓、放烟),让守城的战士能够最快的时间处理,应对。
那对于我们应用系统而言,监控系统就像我们第三只眼,如果有应用系统出现问题,我们可以通过监控系统看是哪里出现问题,是redis挂了,还是说服务器内存满了,有监控系统我们可以很轻松、快速的定位问题。
甚至我们可以设置预警,对一些将要出现的问题进行提前预防处理,及时避免问题的发生。
1、监控系统的作用 帮助定位故障 : 在发生故障时,我们可以通过查看监控系统的各项指标数据,辅助故障分析和定位。 预警减少故障率 : 对于即将可能产生的故障能够及时发出预警信息,做好提前预防处理。 辅助容量规划 : 为服务器、中间件以及应用集群的容量规划提供数据支撑。 辅助性能调优 : jvm垃圾回收次数、接口响应时间、慢sql等等都可以监控优化。 2、常见的监控对象和指标都有哪些? 服务器监控 : cpu使用率、内存使用率、磁盘使用率、磁盘读写的吞吐量、网络出入流量等等。
mysql监控 : tps、qps、数据库连接数、慢sql、innodb缓冲池命中率等等。
redis监控 : 内存使用率、缓存命中率、key值总数、redis响应请求时间、客户端连接数、持久性指标等等。
mq监控 : 连接数、队列数、生产速率、消费速率、消息堆积量等等。
应用监控 :
http接口:url存活、请求量、耗时、异常量 jvm :gc次数、gc耗时、各个内存区域的大小、当前线程数、死锁线程数 线程池:活跃线程数、任务队列大小、任务执行耗时、拒绝任务数 3、监控系统的基本流程 数据采集 :采集的方式有很多种,包括日志埋点进行采集,jmx标准接口输出监控指标,被监控对象提供rest api进行数据采集(如hadoop、es),系统命令行,统一的sdk进行侵入式的埋点和上报等。 数据传输 :将采集的数据以tcp、udp或者http协议的形式上报给监控系统,有主动push模式,也有被动pull模式。 数据存储 :有使用mysql、oracle等关系数据库存储的,也有使用时序数据库rrdtool、openttsdb、influxdb存储的,还有使用hbase存储的。 数据展示 :数据指标的图形化展示。 监控告警 :灵活的告警设置,以及支持邮件、短信、im等多种通知通道。 基于 spring boot + mybatis plus + vue & element 实现的后台管理系统 + 用户小程序,支持 rbac 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro 视频教程:https://doc.iocoder.cn/video/ 市面上的一些常见监控系统比较 下面再来认识下主流的开源监控系统,由于篇幅有限,我挑选了3款使用最广泛的监控系统:zabbix 、open-falcon 、prometheus ,会对它们的架构进行介绍,同时总结下各自的优劣势。
1、zabbix介绍 zabbix 1998年诞生,核心组件采用c语言开发,web端采用php开发。它属于老牌监控系统中的优秀代表,监控功能很全面,使用也很广泛,差不多有70%左右的互联网公司都曾使用过 zabbix 作为监控解决方案。
先来了解下zabbix的架构设计:
zabbix server :核心组件,c语言编写,负责接收agent、proxy发送的监控数据。同时,它还负责数据的汇总存储以及告警触发等。 zabbix proxy :可选组件,对于被监控机器较多的情况下,可使用proxy进行分布式监控,它能代理server收集部分监控数据,以减轻server的压力。 zabbix agentd :部署在被监控主机上,用于采集本机的数据并发送给proxy或者server。数据收集方式同时支持主动push和被动pull 两种模式。 database :用于存储配置信息以及采集到的数据,支持mysql、oracle等关系型数据库。同时,最新版本的zabbix已经开始支持时序数据库,不过成熟度还不高。 web server :zabbix的gui组件,php编写,提供监控数据的展现和告警配置。 zabbix的优势:
产品成熟 :由于诞生时间长且使用广泛,拥有丰富的文档资料以及各种开源的数据采集插件,能覆盖绝大部分监控场景。 采集方式丰富 :支持agent、snmp、jmx、ssh等多种采集方式,以及主动和被动的数据传输方式。 zabbix的劣势:
需要在被监控主机上安装agent,所有的数据都存在数据库里,产生的数据很大,瓶颈主要在数据库。
2、open-falcon(小米出品,国内流行) open-falcon 是小米2015年开源的企业级监控工具,采用go和python语言开发,这是一款灵活、高性能且易扩展的新一代监控方案,目前小米、美团、滴滴等超过200家公司在使用它。
小米初期也使用的zabbix进行监控,但是机器量和业务量上来后,zabbix就有些力不从心了。因此,后来自主研发了open-falcon,在架构设计上吸取了zabbix的经验,同时很好地解决了zabbix的诸多痛点。
架构看去比zabbix复杂多了,其实它也是基于server---agent的模式,只不过server又给他划分了好几个组件,这个耦合性和扩展性都得到了明显提高。
falcon-agent :数据采集器和收集器,go开发,部署在被监控的机器上。就相当于agent,用于采集机器负载监控指标数据如:cpu、内存、磁盘、io、网络、端口等等大概有200多个这些都可以自定是否收集。 transfer :数据分发组件,接收客户端发送的数据,分别发送给数据存储组件graph和告警判定组件judge,graph和judge均采用一致性hash做数据分片,以提高横向扩展能力。同时transfer还支持将数据分发到opentsdb,用于历史归档。 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缺点 监控类型较少 : 不支持常用应用服务器如tomcat、apache、jetty等的监控。 整体发展一般,社区活跃度低 : 没有专门的运维支持,代码更新较少,没有一个较大的社区来维护,后续想要有什么新的能力基本只能指望自己扩展。 3、prometheus(号称下一代监控系统) 我们知道 zabbix 在监控界占有不可撼动的地位,功能强大。但是对容器监控显得力不从心。为解决监控容器的问题,引入了 prometheus 技术。
prometheus 是一套开源的系统监控报警框架。是由前google员工2015年正式发布的开源监控系统,采用go语言开发。它不仅有一个很酷的名字,同时它有google与k8s的强力支持,开源社区异常火爆。
先来了解下prometheus的架构设计:
exporter :主要用来采集数据,并通过 http 服务的形式暴露给 prometheus server,prometheus server 通过访问该 exporter 提供的接口,即可获取到需要采集的监控数据。常见的exporter有很多,例如node_exporter、mysqld_exporter、redis_exporter 等 prometheus server :核心组件,负责实现对监控数据的获取,存储以及查询。prometheus server 也是一个时序数据库,它将监控数据保存在本地磁盘中,并对外提供自定义的 promql 语言实现对数据的查询和分析。 push gateway :由于 prometheus 数据采集采用 pull 方式进行设置的, 内置必须保证 prometheus server 和对应的 exporter 必须通信,当网络情况无法直接满足时,可以使用 pushgateway 来进行中转,可以通过 pushgateway 将内部网络数据主动 push 到 gateway 里面去,而 prometheus 采用 pull方式拉取 pushgateway 中数据。 alert manager :当支持基于 promql 创建告警规则,如果满足定义的规则,则会产生一条告警信息,进入 alertmanager 进行处理。可以集成邮件,微信或者通过 webhook 自定义报警。 web ui :prometheus内置了一个简单的web控制台,可以查询配置信息和指标等,而实际应用中我们通常会将prometheus作为grafana的数据源,创建仪表盘以及查看指标。 prometheus优点 社区活跃度高 : github start超过40k,且一直在维护。 基于时序数据库,存储效率高 :prometheus核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,缓存等等)。唯一需要的就是 本地磁盘,因此不会有潜在级联故障的风险。 很好地支持容器监控 : 能自动发现容器,同时k8s和etcd等项目都提供了对prometheus的原生支持,是目前容器监控最流行的方案。 基于pull模型的架构 : prometheus基于pull模型的架构方式,可以在任何地方(本地电脑,开发环境,测试环境)搭建我们的监控系统。 prometheus缺点 prometheus 是基于 metric 的监控,不适用于日志(logs)、事件(event)、调用链(tracing)。 由于prometheus采用的是pull模型拉取数据,意味着所有被监控的endpoint必须是可达的,需要合理规划网络的安全配置。 指标众多,需进行适当裁剪。 基于 spring cloud alibaba + gateway + nacos + rocketmq + vue & element 实现的后台管理系统 + 用户小程序,支持 rbac 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://gitee.com/zhijiantianya/yudao-cloud 视频教程:https://doc.iocoder.cn/video/ 选型建议 通过上面的介绍,大家对主流的监控系统应该有了一定的认识。面对选型问题,我的建议是:
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、如果非要自研,可以多研究下主流监控系统的架构方案,借鉴它们的优势。
美国实验室特写:等离子物理实验室制造的微型太阳
小米折叠屏手机或将命名“小米MIX 4 Pro Max”
三极管下拉电阻最易忽略的三个问题
Docker镜像获取方式
富士康深圳工厂暂停生产iPhone 深圳人进入7天慢生活
必知必会的监控基础知识
UWB定位系统在北京冬奥会上的作用
如何选择运算放大器,性能参数如何确定
宏控UTP协同自动化测试系统的功能介绍
爆料称华为中国总部落户将丽泽SOHO
虹科方案|具有RDMA复制写入日志的高可用性HDD存储集群可提供出色的性能
怎样用曲线工具揭示隐藏的照片秘密
广电网络IP传输实现方法与规划介绍
农业大型气象站优势在哪里?
TI率先获得Netflix高清认证
汽车与无线及消费电子推动磁性传感器市场增长
拜腾中国“首映礼”:开拓新市场的开始
华硕将推出抽插式电池
Semtech与亚马逊的合作,将推动LoRa器件在智能家居行业中的应用
菲律宾地震或冲击全球MLCC市场 相关公司受关注