CSDNTB|监控系统选型,这篇不可不读( 二 )



CSDNTB|监控系统选型,这篇不可不读
本文插图

(1)硬件监控
包括:电源状态、CPU状态、机器温度、风扇状态、物理磁盘、raid状态、内存状态、网卡状态
(2)服务器基础监控
CPU:单个CPU以及整体的使用情况
内存:已用内存、可用内存
磁盘:磁盘使用率、磁盘读写的吞吐量
网络:出口流量、入口流量、TCP连接状态
(3)数据库监控
包括:数据库连接数、QPS、TPS、并行处理的会话数、缓存命中率、主从延时、锁状态、慢查询
(4)中间件监控
Nginx:活跃连接数、等待连接数、丢弃连接数、请求量、耗时、5XX错误率
Tomcat:最大线程数、当前线程数、请求量、耗时、错误量、堆内存使用情况、GC次数和耗时
缓存 :成功连接数、阻塞连接数、已使用内存、内存碎片率、请求量、耗时、缓存命中率
消息队列:连接数、队列数、生产速率、消费速率、消息堆积量
(5)应用监控
HTTP接口:URL存活、请求量、耗时、异常量
RPC接口:请求量、耗时、超时量、拒绝量
JVM :GC次数、GC耗时、各个内存区域的大小、当前线程数、死锁线程数
线程池:活跃线程数、任务队列大小、任务执行耗时、拒绝任务数
连接池:总连接数、活跃连接数
日志监控:访问日志、错误日志
业务指标:视业务来定 , 比如PV、订单量等
4. 监控系统的基本流程
无论是开源的监控系统还是自研的监控系统 , 监控的整个流程大同小异 , 一般都包括以下模块:

CSDNTB|监控系统选型,这篇不可不读
本文插图

数据采集:采集的方式有很多种 , 包括日志埋点进行采集(通过Logstash、Filebeat等进行上报和解析) , JMX标准接口输出监控指标 , 被监控对象提供REST API进行数据采集(如Hadoop、ES) , 系统命令行 , 统一的SDK进行侵入式的埋点和上报等 。
数据传输:将采集的数据以TCP、UDP或者HTTP协议的形式上报给监控系统 , 有主动Push模式 , 也有被动Pull模式 。
数据存储:有使用MySQL、Oracle等RDBMS存储的 , 也有使用时序数据库RRDTool、OpentTSDB、InfluxDB存储的 , 还有使用HBase存储的 。
数据展示:数据指标的图形化展示 。
监控告警:灵活的告警设置 , 以及支持邮件、短信、IM等多种通知通道 。
主流监控系统介绍
下面再来认识下主流的开源监控系统 , 由于篇幅有限 , 我挑选了3款使用最广泛的监控系统:Zabbix、Open-Falcon、Prometheus , 会对它们的架构进行介绍 , 同时总结下各自的优劣势 。

CSDNTB|监控系统选型,这篇不可不读
本文插图

1. Zabbix(老牌监控的优秀代表)
CSDNTB|监控系统选型,这篇不可不读
本文插图

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

CSDNTB|监控系统选型,这篇不可不读
本文插图

Zabbix架构图
Zabbix Server:核心组件 , C语言编写 , 负责接收Agent、Proxy发送的监控数据 , 也支持JMX、SNMP等多种协议直接采集数据 。 同时 , 它还负责数据的汇总存储以及告警触发等 。
Zabbix Proxy:可选组件 , 对于被监控机器较多的情况下 , 可使用Proxy进行分布式监控 , 它能代理Server收集部分监控数据 , 以减轻Server的压力 。


推荐阅读