对于监控系统的需求?
监控系统是实现自动化运维的基础,在一个IT环境中会存在各种各样的设备,例如,硬件基础设施需要监控;软件运行状态需要监控;程序中的API需要监控;程序执行脚本需要监控;以及数据库的慢查询需要监控等等。
多种应用构成复杂的IT 业务系统,保证这些资源的正常运转,是一个公司IT部门的职责。而要让这些应用能够稳定地运行,则需要专业IT人员进行设计、架构、维护和调优。在这个过程中,为了及时掌控基础环境和业务应用系统的可用性,需要获取各个组件的运行状态,如CPU的利用率、系统的负载、服务的运行、端口的连通、带宽流量、网站访问状态码等信息。而这一切都离不开监控系统。所以可以这么说只要有IT设施的地方就需要监控系统。
对于监控系统的实现?
一个监控系统的组成大概要考虑以下几个方面的问题?
- 原始数据如何收集?
- 数据收集来了如何存储?
- 数据存储好了如何展示,以及告警?
基本每一个监控系统都是围绕这三个核心展开的,不同的是对于这三个核心而言使用了不同的软件而已。对于数据采集一般使用客户端方式,其工作模式可以分为“被动模式(服务器端到客户端采集数据)”和“主动模式(客户端主动上报数据到服务器端)”两种。通常,大多数监控系统应该能同时支持这两种模式,被动模式对服务器的开销较大,适合小规模的监控环境;主动模式对服务器的开销较小,适合大规模的监控环境。对于数据采集来说还有一些不同的协议,也可以分为两种,一种是专用客户端采集、一种是公用协议采集(SNMP/SSH/TELNET)。
对于数据存储和分析告警展示部分都是在服务器端搞定,而数据存储和分析告警展示有的监控系统都是自己搞定,而有的监控系统则使用了开源组合,也就是说数据存储是一个组件,分析展示是一个组件,告警又是一个组件。另外一个好的监控系统应该要达到以下几点:
- Dashboard人性化展示:多维度的数据展示、用户自定义Dashboard等功能。
- 告警智能化:比如,支持最大告警次数、告警级别、告警恢复、告警暂停、支持维护周期,以及告警依赖设置,比如就是说网络故障跟服务之间做依赖,如果网络有问题会告警但服务就不会告警了,避免重复性告警太多。
- 自动故障处理:在告警的基础上往上伸展就是不光能够报警,还能够支持用户自定义脚本或指令来自动处理故障,这对及时解决问题和故障自愈非常重要。
- 数据采集免配置:支持agent自发现、支持Plugin、主动推送模式等等。
- 容量水平扩展:生产环境中数据收集、告警、存储、绘图等等。
- 历史数据高效查询:这就需要对数据存储系统有很高的要求了,最好能够做到秒级返回上百个指标一年的历史数据。
- 架构设计分布式:整个系统无核心单点、易扩展、易运维、易部署。
当然没有一个十全十美的监控系统,我是还没有碰到一个能做数据收集、数据有效存储、展示、聚合、智能告警、自动化处理等等这些非常实用的功能。所以在实际环境中就需要进行排列组合了,需要什么功能就组装什么组件,组合一个尽可能对公司业务来说完美的监控系统。
下面提供一个不那么完整的监控系统基本处理流程图:
对于一般的监控环境,被监控的节点不多,产生的数据较少,采用C/S(Client/Server,客户端/服务器端)架构就足够了,这种架构适合于规模较小、处于同一地域的环境。但对于大规模的监控环境,被监控的节点多,且监控类型多,监控产生的数据和网络连接开销会非常巨大,而且由于跨地域等多种因素,需要分布式的解决方案,常见的方式为C/P/S(Client/Proxy/Server,客户端/代理端/服务器端)架构,采用中间代理将大大提高监控服务器端的处理速度,从而能支撑构建大型分布式监控的环境。
监控平台要做到什么程度?
对于运维监控系统来说,在开源界有着各种各样的系统以及它们的Dashboard。比如Zabbix、Cacti、Nagios、Centreon、Logstach、Ganglia、Open-falcon、Graphite、statsd、grafana等等。它们中有的侧重于绘图展示、有的侧重于告警、有的侧重于数据收集等等。一个好的监控平台不仅仅只做各种数据的采集和罗列,不仅仅是弄若干个报表并进步一配置成仪表盘,而是有一定智能,仿照我们日常的排查问题思路,然后建立一定的规则,自动检查、及告警提示。
后面会先简单介绍上面提到的每一个监控的简单原理以及侧重点,了解这些可以更好地根据实际业务需求构建自己的企业监控平台。另外说一点真正在把这些组件组合到一起使用的时候你会发现构建一个旁大的监控平台有时候比业务都复杂。对于zabbix我们主要做基础设施平台的监控、cacti主要做网络设备监控、ELK主要做日志分析、Graphite性能监控、statsd数据收集、grafana绘图展示,目前这些都是我们业务中正在使用的。下面提供一张eBay云谈及OpenStack的监控和报警平台图,也都使用到了statsd、graphite、zabbix等监控系统和ELK日志处理系统。可以细细品味一下。