前言

OpenStack 发展至今,已经走过了5年多的风风雨雨,随着时间的推移,OpenStack 项目逐渐成熟,各个核心组件逐渐趋于稳定,OpenStack 正在被越来越多的企业部署到生产环境中。稳定性和可用性是企业级云平台的一个重要考核指标,稳定性和可用性如何保证?除了需要对云平台有深入了解并在出现故障时能在最短时间内快速定位排除的运维人员外,还需要有一套优秀的实时监控平台,能够实时监控云平台状态,在故障出现的第一时间将故障体现出来,便于运维人员在第一时间定位并排除故障,保证云平台稳定运行,保证服务的可用性。

监控项目

该监控平台监控的对象为 OpenStack 平台本身,而不是平台上运行的虚拟机及虚拟机内部运行的应用。

  • 各 OpenStack 节点系统基本状态监控
    • CPU 利用率
    • MEM、SWAP 使用量
    • Process 数量
    • 登陆用户数
    • 磁盘空间使用量
    • 磁盘 IO
    • 网卡 IO
  • OpenStack 各 Controller 节点上各组件服务状态监控
    • API 5XX 错误数量
    • API HTTP Response 时间及数量
    • API 可用性(如:nova api)
    • 服务运行状态(如:openstack-nova-scheduler)
    • 资源状态 (如:运行中的 instance 数量)
  • 集群状态监控
    • RabbitMQ 集群状态
    • MySQL 集群状态
    • HAProxy 集群状态
    • Ceph 集群状态
  • 附加服务监控
    • Apache 服务状态
  • Memcached 服务状态

监控平台架构

监控平台架构分析

整个监控平台由四部分组成(参考上图):数据收集部分、数据存储部分、报警通知部分及数据展示部分

数据收集

数据收集功能通过 Collectd + Heka 两个开源软件实现,Collectd 主要负责系统基本状态信息、OpenStack 各服务状态信息及各集群状态信息的收集,将收集到的信息发送给 Heka;Heka 主要负责 OpenStack 各组件日志的收集,同时对 Collectd 收集到的信息及 OpenStack 各组件日志信息进行解码处理,然后将处理过的数据实时发送到 Influxdb 数据库。Collectd 及 Heka 均支持自定义插件,因此我们可以通过自定义插件来实现对自己开发的功能的监控。

数据存储

数据存储功能通过开源数据库 InfluxDB 实现,InfluxDB 是一个开源,分布式,时间序列,事件,可度量和无外部依赖的数据库。所有 OpenStack 节点的监控数据都存储在该数据库中。该数据库支持HTTP API,用户可以通过 HTTP API 对数据库进行读写操作。

数据展示

数据展示通过开源软件 Grafana 实现,部署在 Nginx 上,它可以将从 InfluxDB 数据库中获取到的实时监控数据通过图表的形式展示出来。Grafana 拥有迷倒众生的炫酷界面,当我第一次看到它时,便被它那炫酷的界面所折服。Grafana 支持用户自定义图表,当我们需要对自己开发的功能进行监控时,可以非常方便的增加相关监控图表。

报警通知