Ceilometer简介

1.1 历史和任务

1.1.1 历史

Ceilometer项目开始于2012年的4,5月份,由Julien Danjou,Dreamhost Canonical等发起。 html

通过6个月的开发,在2012年的10月份,伴随着Folsom的发布,Ceilometer也发布了它的v1.0版本,在 第一个版本中,Ceilometer主要实现了对一些重要数据的计量,包括Compute, Network, Memory, CPU, Image, Volume等,而且提供了REST API python

2013年的2月份,Ceilometer完成了由IncubationIntegrated转变,这意味着Ceilometer将做为OpenStack 发行版的一部分而发布。 web

Grizzly版中,Ceilometer添加了对Swift的支持,增长了SQLAlchemy做为Storage Backend,开发了Multi Publisher, 而且发布了V2版本的API sql

如今Havana中,Ceilometer已经发布了2milestone,主要增长了HBase做为Storage BackendAlarm功能也基本完成, 而且增长了UDP Publisher做为取代RPC发送消息的第二选择,更加高效。正在开发的havana-3,一个重要的新功能是 又增长了DB2做为Storage Backend. 数据库

 

1.1.2 任务

Ceilometer的使命通过一次变化,在项目提出之初,对它的定位就只是专一于计量,为计费而生。咱们能够从它 v1.0Mission看出。 django

可是Ceilometer收集的是有用的数据,咱们都知道数据的价值,因此随着Ceilometer的发展,对它的需求也在不断的增加, 除了计费以外,像监控、Autoscalling、数据统计分析、benchmarking等都须要这些数据。因此从Grizzly开始,Ceilometer 扩展了它的目标,不只仅局限在计量和计费上,又因为Ceilometer的扩展性很强,很容易经过扩展去知足这些需求。 api

1.2 核心架构

Ceilometer收集的是OpenStack内部各个服务(nova, neutron, cinder),以及未来不少未知的服务的信息,这个基本的 需求决定了它的架构必须是灵活可扩展的,所以,Ceilometer采用了一种“微内核”的架构,经过插件的机制来实现扩展。 架构

这里不得不说一下它的设计者Doug Hellmann为此作出的努力,可扩展能够说是软件设计的一个基本特征,不一样的项目 有不一样的实现方法,Doug Hellmann花了一年的时间,调研了不少项目的扩展机制,包括Sphinx,Nose,Django,SQLAlchemy,Nova等,最终开发了Python的一个基于setuptools entry points三方库Stevedore, 而且使用Stevedore设计了Ceilometer插件机制,如今Stevedore已经被OpenStack中的不少新的项目使用, nova中也有用到。 post

下面是Ceilometer的核心架构图: 优化

 

Ceilometer使用了两种收集数据的方式,一种是消费OpenStack各个服务内发出的notification消息(对应上图中的蓝色箭头),一种 是经过调用各个服务的API去主动的获取数据(对应上图中的黑色箭头)

为何会须要两种方式呢?

Ceilometer做为OpenStack内部 notification的最大消费者,OpenStack内部发生的一些事件都会发出对应的notification消息,好比说建立和删除instance,这些 信息是计量/计费的重要信息,所以第一种方式是Ceilometer第一数据来源,可是有些计量信息经过notification消息是获取不到的, 好比说instanceCPU的运行时间,或者是CPU的使用率,这些信息不会经过notification消息发送出来,所以Ceilometer增长了第二种 方式,周期性的调用相关的API去获取这些信息。

Ceilometer5个重要的组件以及一个Message Bus组成,简单介绍一下各个组件以及他们之间的关系:

(1) Compute Agent

该组件用来收集计算节点上的信息,在每个计算节点上都要运行一个Compute Agent,该Agent经过Stevedore管理了一组pollster插件, 分别用来获取虚拟机的CPU, Disk IO, Network IO, Instance这些信息,值得一提的是这些信息大部分是经过调用HypervisorAPI来获取的, 目前,Ceilometer仅提供了LibvirtAPI

(2) Central Agent

Central Agent运行在控制节点上,它主要收集其它服务(Image, Volume, Objects, Network)的信息,实现逻辑和Compute Agent相似,可是 是经过调用这些服务的REST API去获取这些数据的。

(3) Collector

这个应该是最为核心的组件了,它的主要做用是监听Message Bus,将收到的消息以及相应的数据写入到数据库中,它是在核心架构中惟一一个 可以对数据库进行写操做的组件。除此以外,它的另外一个做用是对收到的其它服务发来的notification消息作本地化处理,而后再从新发送到 Message Bus中去,随后再被其收集。

(4)Storage

数据存储如今支持MongoDB, MySQL, PostgresqlHBase,如今H3又新增长了对DB2的支持,其中MongoDB是支持最好的。

(5)REST API

像其它服务同样,Ceilometer也提供的是REST APIAPI是惟一一个能对数据库进行读操做的组件,虽而后来加入的Alarm API可以直接对数据库 进行读写,可是Alarm应该是一个较为独立的功能,而且它的读写量也不大

(6) Message Bus

Message Bus是整个数据流的瓶颈,全部的数据都要通过Message BusCollector收集而存到数据库中,目前Message Bus采用RabbitMQ实现。

(7) Pipeline

Pipeline虽然不是其中一个组件,可是也是一个重要的机制,它是AgentMessage Bus以及外界之间的桥梁,Agent将收集来的数据发送到pipeline中, 在pipeline中,先通过一组transformer的处理,而后经过Multi Publisher发送出去,能够经过Message Bus发送到Collector,或者是发送到其它的 地方。Pipeline是可配置的,Agent poll数据的时间间隔,以及TransformersPublishers都是通pipeline.yaml文件进行配置。

总体上看,Ceilometer对数据流的处理,给人一种大禹治水的感受。

 

1.3 Roadmap and status

可能因为CeilometerPTLJulien Danjou比较强悍,Ceilometer从一开始就保持着很是好的项目进度,这也是它可以在很短的时间内,就由孵化项目 成为OpenStack Core项目的缘由之一,在Havana Release中,已经发布了2Milestone,分别实现了10, 11Blueprints,修复了60多个bug,正在进行 的Havana-3,有27Blueprints,其中大部分都保持着很好的进度。

H版中,一个重量级功能是给Ceilometer添加了Alarm功能,该Alarm的实现几乎跟AWSCloudWatch Alarm如出一辙。

H-1中,添加的POST meter API是一个重要的API,它的实现实际上是打破了Ceilometer只局限在OpenStack内部服务的限制。能够直接经过该API Ceilometer写入数据,而不是去写plugin,完成了Ceilometerpollpoll+push的转变。

H-2中,实现的One Meter per Pollster Plugin简洁和规范化了Ceilometer的插件机制。

H-3中,也有不少BP会被实现,对API进行查询优化的Implements GROUP BY operations in APIPipelineMutiple dispatcher enablement以及db2 support,Enable/Disable/Configure a pollster in runtime,还有一个Monitoring Physical Devices BP,它的实现会使 Ceilometer向监控迈出重要一步,可是该BP中间换过一个Assignee,如今进度比较慢。

1.4 计量或监控

这个问题相信不少人都比较关心,并且也常常在邮件列表中被争论,在CeilometerMission中清晰的写着Its primary targets are monitoring and metering, 可是到底Ceiometer能用来作什么,为何会有这些争论,先不忙下结论,先来看看别人是如何使用它的。

CeilometerPTLJulien Danjou是一个自由职业者,在不少的开源社区作太重要贡献,有不少公司雇佣他作技术Leader,近期的包括eNovance,DreamHost, Talligent EISTI,而这些公司都使用Ceilometer来作billing systemsaccounting solution for openstack,我想这应该是最有力的解释了。

CeilometerG版改变了它的Mission以后,在Monitoring方面作了一些努力,曾想和其它一些开源监控项目合并,好比三星的synaps,还有Healthnmon,可是最后因为各类缘由都不了了之。G版为这个Misson作的比较重要的工做集中在数据流的导入导出上,直到HCeilometer才为Monitor作了一些实际工做,包括Alarming,Monitoring Physical Devices ,Ceilometer CloudWatch API,可是目前,只有Alarm的大部分代码被Merge进代码仓库中。

虽然计量和监控他们的数据类似,可是对数据的要求却 截然不同,前者重点在Allocated,然后者重点在UtilizationAllocated这些信息可以很容易经过消费其它服务的notification消息来得到,好比经过 捕获compute.instance.create.start, compute.instance.delete.end这些Event能够比较准确的知道一个instance是否建立成功,是否删除失败,可是像Instance Memory Utilization, Disk Space Utilization这些数据是监控很是关心的,然而想获取这些数据却不容易,没有现成的API可使用,写Agent,兼容性是个头疼的问题, 这也是虚拟化平台监控的难点之一,目前Ceilometer在这方面仍是空白,由此在邮件列表中也引起的一次不愉快的争论。可是关于OpenStack的监控,Mirantis给出了一个解决方案,使用sFlow 来解决虚拟资源监控的难点,有兴趣能够阅读一下。

因此,最终的结论是Ceilometer作计量系统已经比较成熟,可是若是有能力hack它,使用它作监控也是能够的,毕竟它已经作了一些工做,并且有很好的扩展性,相信在 I版会在这方面投入更多精力的。

1.5 UnitedStacks Effort

咱们使用Ceilometer来作基础监控服务。从如今Ceilometer测量指标来看,它根本不能知足咱们的需求,数据来源太少,并且大部分的数据对监控来讲,没有多大的价值,若是经过写插件的形式去主动的poll数据,不能知足众多应用程序通用性的需求,而且Ceilometer对虚拟资源的监控有着难以规避的问题。这些问题迫使着咱们须要再次扩展CeilometerMission,将它的Within OpenStack扩展到Out of OpenStack,让Ceilometer更加的开放,更加的通用。

因而,咱们给Ceilometer添加了Ceilometer CloudWatch API,一是解决了数据来源的问题,不少应用程序都会提供基于AWS CloudWatch  API的监控数据,咱们能够无痛的收集到这些数据;二是将Ceilometerpoll模式,改形成了push+agent模式,变得更加的通用,可使它不只仅局限在OpenStack内部的服务,使它能够面对更多的未知的服务;三是CloudWatch APIHeat基于CeilometerAutoScalling提供了接口支持。

早在G版的时候,Ceilometer就想和三星公司开源的synaps合并,它是一个OpenStack的监控项目,提供CloudWatch API,可是后来因为种种缘由做废了,因此,咱们的patch一提出,就受到了社区的热烈欢迎,而且很快给出了修改的意见。目前,该patch仅仅实现了三个接口,还有一些问题须要修改,但愿最迟在I版能Merge进社区。

相关文章
相关标签/搜索