这篇文章,我将对监控体系的基础知识、原理和架构做一次系统性整理,同时还会对几款最常用的开源监控产品做下介绍,以便大家选型时参考。内容包括3部分:
我们可以理解监控系统就像我们古代打战的哨兵一样,哨兵的角色非常重要,敌人来了,哨兵会第一时间发出预警(吹笛、打鼓、放烟),让守城的战士能够最快的时间处理,应对。
那对于我们应用系统而言,监控系统就像我们第三只眼,如果有应用系统出现问题,我们可以通过监控系统看是哪里出现问题,是redis挂了,还是说服务器内存满了,有监控系统我们可以很轻松、快速的定位问题。
甚至我们可以设置预警,对一些将要出现的问题进行提前预防处理,及时避免问题的发生。
-
帮助定位故障
: 在发生故障时,我们可以通过查看监控系统的各项指标数据,辅助故障分析和定位。
-
预警减少故障率
: 对于即将可能产生的故障能够及时发出预警信息,做好提前预防处理。
-
辅助容量规划
: 为服务器、中间件以及应用集群的容量规划提供数据支撑。
-
辅助性能调优
: JVM垃圾回收次数、接口响应时间、慢SQL等等都可以监控优化。
-
服务器监控
: CPU使用率、内存使用率、磁盘使用率、磁盘读写的吞吐量、网络出入流量等等。
-
MySQL监控
: TPS、QPS、数据库连接数、慢SQL、InnoDB缓冲池命中率等等。
-
Redis监控
: 内存使用率、缓存命中率、key值总数、Redis响应请求时间、客户端连接数、持久性指标等等。
-
MQ监控
: 连接数、队列数、生产速率、消费速率、消息堆积量等等。
-
-
-
JVM :GC次数、GC耗时、各个内存区域的大小、当前线程数、死锁线程数
-
线程池:活跃线程数、任务队列大小、任务执行耗时、拒绝任务数
-
数据采集
:采集的方式有很多种,包括日志埋点进行采集,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
,会对它们的架构进行介绍,同时总结下各自的优劣势。
Zabbix 1998年诞生,核心组件采用C语言开发,Web端采用PHP开发。它属于老牌监控系统中的优秀代表,监控功能很全面,使用也很广泛,差不多有70%左右的互联网公司都曾使用过 Zabbix 作为监控解决方案。
先来了解下Zabbix的架构设计: