一、监控系统概述
监控系统在这里特指对数据中心的监控,主要针对数据中心内的硬件和软件进行监控和告警。
从监控对象的角度来看,可以将监控分为网络监控、存储监控、服务器监控和应用监控等。
从程序设计的角度来看,可以将监控分为基础资源监控、中间件监控、应用程序监控和日志监控,
二、基础资源监控
从监控对象的角度来看,可以将基础资源监控分为网络监控、存储监控和服务器监控。
2.1 网络监控
这里讲解的网络监控主要包括:
- 对数据中心内网络流量的监控;
- 对网络拓扑发现及网络设备的监控;
- 对网络性能的监控及对网络攻击的探测等。
网络监控主要有以下几个方向。
(1)网络性能监控(Network Performance Monitor,NPM):主要涉及网络监测、网络实时流量监控(网络延迟、访问量、成功率等)和历史数据统计、汇总和历史数据分析等功能。
(2)网络攻击检查:主要针对内网或者外网的网络攻击如DDos攻击等,通过分析异常流量来确定网络攻击行为。
(3)设备监控:主要针对数据中心内的多种网络设备进行监控,包括路由器、防火墙和交换机等硬件设备,可以通过SNMP等协议收集数据。
2.2 存储监控
存储主要分为云存储和分布式存储两部分。
- 云存储主要通过存储设备构建存储资源池,并对操作系统提供统一的存储接口,例如块存储的 SCSI和文件存储 NFS等。它们的特点是存储接口统一,并不识别存储数据的格式和内容,例如块存储只负责保存二进制数据块,这些二进制数据可能来自图片或视频,对于块存储来说都是一样的。
- 分布式存储主要构建在操作系统之上,提供分布式集群存储服务,主要是针对特定数据结构的数据存储。例如HDFS的大文件存储、Dynamo的键值数据存储、Elasticsearch的日志文档存储等。
我们可以将云存储监控分为存储性能监控、存储系统监控、存储设备监控。
- 在存储性能监控方面,块存储通常监控块的读写速率、IOPS、读写延迟、磁盘用量等;文件存储通常监控文件系统Inode、读写速度、目录权限等。
- 在存储系统监控方面,不同的存储系统有不同的指标。例如,对于Ceph存储,需要监控OSD、MON的运行状态,各种状态PG的数量,以及集群IOPS等信息。
- 在存储设备监控方面,对于构建在x86服务器上的存储设备,设备监控通过每个存储节点上的采集器统一收集磁盘、SSD、网卡等设备信息;存储厂商以黑盒方式提供的商业存储设备通常自带监控功能,可监控设备的运行状态、性能和容量等。
2.3 服务器监控
服务器监控包括物理服务器监控,虚拟机监控和容器监控。
- 对服务器硬件的兼容。数据中心内的服务器通常来自多个厂商如Dell、华为或者联想等,服务器监控需要获取不同厂商的服务器硬件信息。
- 对操作系统的兼容。为了适应不同软件的需求,在服务器上会安装不同的操作系统如 Windows、Linux,采集软件需要做到跨平台运行以获取对应的指标。
- 对虚拟化环境的兼容。当前,虚拟化已经成为数据中心的标配,可以更加高效便捷地获取计算和存储服务。服务器监控需要兼容各种虚拟化环境如虚拟机(KVM、VMware、Xen)及容器(Docker、rkt)。
采集方式通常分为两种:一种是内置客户端,即在每台机器上都安装采集客户端;另一种是在外部采集,例如在虚化环境中可以通过Xen API、VMware Vcenter API或者Libvirt的接口分别获取监控数据。
从操作系统层级来看,采集直指标通常如下:CPU、内存、网络IO、磁盘IO
服务器监控还包括针对物理硬件的监控,可以通过IPMI(Intelligent Platform Management Interface,智能平台管理接口)实现。IPMI是一种标准开放的硬件管理接口,不依赖于操作系统,可以提供服务器的风扇、温度、电压等信息。
2.4 中间件监控
常用的中间件主要有以下几类。
- 消息中间件,例如RabbitMQ、Kafka。
- Web服务中间件,例如Tomcat、Jetty。
- 缓存中间件,例如Redis、Memcached。
- 数据库中间件,例如MySQL、PostgreSQL。
2.5 应用程序监控(APM)
2.6 日志监控
目前业内比较流行的监控组合:
Fluentd----Kafka----logstash----Elasticsearch----Kibana
Fluentd:主要负责日志采集,其他开源组件还有Filebeta、Flume、Fluent、Bit等,也有以西而应用集成log4g等日志组件直接输出日志。
Kafka:主要负责数据整流合并,避免突发日志流量直接冲击Logstash,业内也有用Redis替换Kafka的方案。
Logstash:负责日志整理,可以完成日志过滤、日志修改等功能。
Elasticserach:负责日志存储和日志检索,自带分布式存储,可以将采集的日志进行分片存储。
Kibana:是一个日志查询组件,负责日志展现,主要通过Elasticsearch的HTTP接口展现日志。
三、 监控系统实现
3.1 指标采集
指标采集包括数据采集、数据传输和过滤、以及数据存储。
3.2 数据处理
数据处理分为:数据查询、数据分析和基于规则告警等。
四、开源监控软件
Zabbix、Nagios、OPen-Falcon、Prometheus