Objectives
2012年Ceilometer创建的时候,目的只是为了提供基础设施为OpenStack项目收集信息。它使得那些评级的引擎可以用它来将事件转化成付费项目,我们俗称“计量”。
随着这个项目的发展,跨多个项目的计量值越来越多。Openstack社区就想着进一步扩展Ceilometer的作用:把它打造成标准的计量方式,并且不用理会统计的目的究竟是什么。然后这些数据又可以被分发到任意的目的地。
Metering
可以将一个计费过程分为3步:
1、Metering
2、Rating
3、Billing
Ceilometer从始至终都限制了第一步。这是一开始就选择的一条路,因为从私有云发展到公有云,评级和计费因为每一个人不同的需求而有各种各样的解决办法。也就是说,如果你想利用ceilometer进行计费,是一个不错的选择,单绝对不是唯一的选择。
下面是对Ceilometers逻辑架构的一个总结:
每一个Ceilometer的服务都是水平可扩展的。额外的进程和节点都可以按需增加。Ceilometer主要提供两个核心的服务:
1、polling agent-设计成一个守护进程轮询Openstack服务,然后创建计量值
2、notification agent-设计成一个可以坚挺消息队列的通知的守护进程,并把他们转换成Events或者Samples,并且进一步应用到pipeline 上。
通过Ceilometer收集和规范化的话剧都可以被送到不同的目的地。Gnocchi旨在以时间序列格式捕捉测量数据,以优化存储和查询。Gnocchi是为了替代现有的计量数据库接口。另外,Aodh是一项报警服务,当用户打破定义的规则的时候,Aodh就会发出警告。最后,Panko是一个事件存储项目,它是为了捕获面向文档的数据,比如日志和系统事件行为。
收集数据
上面就是典型的,代理如何从不同的来源收集数据。
Ceilometer工程创建了2个方法收集数据:
1、notification agent:它会收集从通知总线过来的数据,然后把他们转成Ceilometer样本数据或者事件
2、polling agent:会根据一个固定的间隔事件轮询条用API或者其他的工具收集信息。
第一个方法由ceilometer-notification agent所支持,它会监测管理通知的消息队列。polling agents可以配置成轮询本地程序或者远程APIs(由服务提供的REST APIS接口,还有主机级别的SNMP/IPMI守护进程)
notification agent 消费从各种服务发送过来的消息。
上面这个系统的核心就是notification的守护进程(也就是agent-notification),会监测由其他OpenStack组件(比如Nova,Glance,Cinder,Neutron,Swift,Keystone,Heat,以及ceilometer内部交互)发送数据过来的消息队列。
这个notification进程加载一个或者多个监听插件,使用的命名空间是ceilometer.notification。每一个插件可以监听不同的主题。默认会监听notification.info,notification.sample,还有notification.error。这些监听器会将这些捕获到的不同主题的数据分发到合适的端点,然后进一步发展成Events和Samples
面向样本数据的插件会提供一个方法来列出他们感兴趣的事件类型以及相应的处理消息的回调。回调的注册名称被用于开启或者关闭使用通知守护进程的管道。在被传递到回调之前,传进来的数据会被根据他们的事件类型进行过滤,所以这个插件只会接收它自己感兴趣的事件。
polling agent查询服务数据
轮询compute resorces被运行在compute节点上的polling agent处理,经常被称为compute-agent。轮询其他非计算资源被运行在一个云控制节点上的代理处理,经常被称为central-agent。单一代理可以在一体化部署当中履行这两种角色。相反的,一个代理的多个实例可以被部署,这些实例之间工作负载是共享的。polling agent的守护进程通过在ceilomater.poll.compute,ceilometer.poll.central,和ceilometer.poll.ipmi混合的命名空间中,被配置成运行一个或者多个pollster插件
这个代理框架之后将生成的样本数据发送到了notification agent处理
处理数据
从polling和notifications agent收集起来的数据如果和时间上下文结合的话,可以获取到更多的数据。Ceilometer提供了很多的转换器用来转换管道中的数据。
这张图表示样本数据可以被分发到不同的目的地,现在由7中不同的方法:
1、gnocchi,会把数据和事件发布到Gnochi API
2、notifier,会把数据推到消息队列里面,可以供外部系统使用
3、udp,会使用UDP包分发数据
4、http,会指向REST接口
5、file,会把数据发送到指定名字和位置的文件中
存储/获取数据
ceilometer产生的数据可以被发送到上面提到任何的方式当中,首推Gnocchi.