监控
对监控体系的基础知识、原理和架构做一次系统性整理,同时还会对几款最常用的开源监控产品做下介绍,以便大家选型时参考。内容包括3部分:
- 必知必会的监控基础知识
- 主流监控系统介绍
- 监控系统的选型建议
一、必知必会的监控基础知识
可以理解监控系统就像古代打战的哨兵一样,哨兵的角色非常重要,敌人来了,哨兵会第一时间发出预警(吹笛、打鼓、放烟),让守城的战士能够最快的时间处理,应对。 那对于应用系统而言,监控系统就像第三只眼,如果有应用系统出现问题,可以通过监控系统看是哪里出现问题,是redis挂了,还是说服务器内存满了,有监控系统可以很轻松、快速的定位问题。 甚至可以设置预警,对一些将要出现的问题进行提前预防处理,及时避免问题的发生。1、监控系统的作用
1)帮助定位故障
在发生故障时,可以通过查看监控系统的各项指标数据,辅助故障分析和定位。2)预警减少故障率
对于即将可能产生的故障能够及时发出预警信息,做好提前预防处理。3)辅助容量规划
为服务器、中间件以及应用集群的容量规划提供数据支撑。4)辅助性能调优
JVM垃圾回收次数、接口响应时间、慢SQL等等都可以监控优化。2、常见的监控对象和指标都有哪些?
1)服务器监控
CPU使用率、内存使用率、磁盘使用率、磁盘读写的吞吐量、网络出入流量等等。2)MySQL监控
TPS、QPS、数据库连接数、慢SQL、InnoDB缓冲池命中率等等。3)Redis监控
内存使用率、缓存命中率、key值总数、Redis响应请求时间、客户端连接数、持久性指标等等。4)MQ监控
连接数、队列数、生产速率、消费速率、消息堆积量等等。5)应用监控
- HTTP接口:URL存活、请求量、耗时、异常量。
- JVM :GC次数、GC耗时、各个内存区域的大小、当前线程数、死锁线程数。
- 线程池:活跃线程数、任务队列大小、任务执行耗时、拒绝任务数。
3、监控系统的基本流程
1)数据采集
采集的方式有很多种,包括日志埋点进行采集,JMX标准接口输出监控指标,被监控对象提供REST API进行数据采集(如Hadoop、ES),系统命令行,统一的SDK进行侵入式的埋点和上报等。2)数据传输
将采集的数据以TCP、UDP或者HTTP协议的形式上报给监控系统,有主动Push模式,也有被动Pull模式。3)数据存储
有使用MySQL、Oracle等关系数据库存储的,也有使用时序数据库RRDTool、OpentTSDB、InfluxDB存储的,还有使用HBase存储的。4)数据展示
数据指标的图形化展示。5)监控告警
灵活的告警设置,以及支持邮件、短信、IM等多种通知通道。二、市面上的一些常见监控系统比较
下面再来认识下主流的开源监控系统,由于篇幅有限,挑选了3款使用最广泛的监控系统:Zabbix、Open-Falcon、Prometheus,会对它们的架构进行介绍,同时总结下各自的优劣势。1、Zabbix介绍
- Zabbix Server
- Zabbix Proxy
- Zabbix Agentd
- Database
- Web Server
1)Zabbix的优势
- 产品成熟
- 采集方式丰富
2)Zabbix的劣势
需要在被监控主机上安装Agent,所有的数据都存在数据库里,产生的数据很大,瓶颈主要在数据库。2、Open-Falcon(小米出品,国内流行)
- Falcon-agent
- Transfer
- Graph
- Judge和Alarm
- API
1)Open-Falcon优势
- 自动采集能力
- 强大的存储能力
- 灵活的数据模型
- 插件统一管理
- 个性化监控支持
2)Open-Falcon缺点
- 监控类型较少
- 整体发展一般,社区活跃度低
3、Prometheus(号称下一代监控系统)
zabbix 在监控界占有不可撼动的地位,功能强大。但是对容器监控显得力不从心。为解决监控容器的问题,引入了 Prometheus 技术。- Exporter
- Prometheus Server
- Push gateway
- Alert Manager
- Web UI
1)Prometheus优点
- 社区活跃度高
- 基于时序数据库,存储效率高
- 很好地支持容器监控
- 基于Pull模型的架构
2)Prometheus缺点
- Prometheus 是基于 Metric 的监控,不适用于日志(Logs)、事件(Event)、调用链(Tracing)。
- 由于Prometheus采用的是Pull模型拉取数据,意味着所有被监控的endpoint必须是可达的,需要合理规划网络的安全配置。
- 指标众多,需进行适当裁剪。