监控(1)--概述
监控
当我们的应用上线后,我们总是希望能够掌握应用运行的动态,以便在出了状况时,能够及时有效的应对,这种手段就是监控
。
应用运行依赖于硬件,所以监控分为硬件性能监控
和软件性能监控
。
硬件监控有网络监控
,存储监控
,服务器监控
。
软件监控有中间件监控
,应用监控
,日志监控
。
1. 硬件监控
1.1 网络监控
网络监控主要有以下几个方向。
网络性能监控(Network Performance Monitor,NPM):主要涉及网络监测、网络实时流量监控(网络延迟、访问量、成功率等)和历史数据统计、汇总和历史数据分析等功能。
网络攻击检查:主要针对内网或者外网的网络攻击如DDos攻击等,通过分析异常流量来确定网络攻击行为。
设备监控:主要针对数据中心内的多种网络设备进行监控,包括路由器、防火墙和交换机等硬件设备,可以通过SNMP等协议收集数据。
1.2 存储监控
存储监控分为存储性能监控、存储系统监控、存储设备监控。
存储性能监控方面,块存储通常监控块的读写速率、IOPS、读写延迟、磁盘用量等;文件存储通常监控文件系统Inode、读写速度、目录权限等。
存储系统监控方面,不同的存储系统有不同的指标。例如,对于Ceph存储,需要监控OSD、MON的运行状态,各种状态PG的数量,以及集群IOPS等信息。
存储设备监控方面,对于构建在x86服务器上的存储设备,设备监控通过每个存储节点上的采集器统一收集磁盘、SSD、网卡等设备信息;存储厂商以黑盒方式提供的,商业存储设备通常自带监控功能,可监控设备的运行状态、性能和容量等。
1.3 服务器监控
服务器监控包括物理服务器监控,虚拟机监控和容器监控。
对服务器硬件的兼容。数据中心内的服务器通常来自多个厂商如Dell、华为或者联想等,服务器监控需要获取不同厂商的服务器硬件信息。
对操作系统的兼容。为了适应不同软件的需求,在服务器上会安装不同的操作系统如 Windows、Linux,采集软件需要做到跨平台运行以获取对应的指标。
对虚拟化环境的兼容。当前,虚拟化已经成为数据中心的标配,可以更加高效便捷地获取计算和存储服务。服务器监控需要兼容各种虚拟化环境如虚拟机(KVM、VMware、Xen)及容器(Docker、rkt)。
从操作系统层级来看,采集指标通常如下:CPU、内存、网络IO、磁盘IO
服务器监控还包括针对物理硬件的监控,可以通过IPMI(Intelligent Platform Management Interface,智能平台管理接口)实现。IPMI是一种标准开放的硬件管理接口,不依赖于操作系统,可以提供服务器的风扇、温度、电压等信息。
2. 软件监控
2.1 中间件监控
常用的中间件主要有以下几类。
消息中间件,例如RabbitMQ、Kafka。
Web服务中间件,例如Tomcat、Jetty。
缓存中间件,例如Redis、Memcached。
数据库中间件,例如MySQL、PostgreSQL。
当然实际还有很多,我们主要针对软件应用涉及到的中间件进行监控。
每个中间件都有不同的监控指标。
2.2 应用监控
这里我们一般指的是应用的性能监控,比如PV,QPS/TPS,Response Time,CPU资源,内存占用,JVMGC指标,IO等
2.4 日志监控
在软件运行的过程中,会产生大量的日志,这些日志对我们分析程序有极大的帮助。
目前业内比较流行的监控组合:
Fluentd+Kafka+logstash+Elasticsearch+Kibana
Fluentd:主要负责日志采集,其他开源组件还有Filebeta、Flume、Fluent、Bit等。
Kafka:主要负责数据整流合并,避免突发日志流量直接冲击Logstash,业内也有用Redis替换Kafka的方案。
Logstash:负责日志整理,可以完成日志过滤、日志修改等功能。
Elasticserach:负责日志存储和日志检索,自带分布式存储,可以将采集的日志进行分片存储。
Kibana:是一个日志查询组件,负责日志展现,主要通过Elasticsearch的HTTP接口展现日志。
3. 常见的监控软件
Zabbix、Nagios、OPen-Falcon、Prometheus