坎蒂丝_Swan 发表于 2014-12-11 17:06:14

Ceilometer项目源码分析----ceilometer项目源码结构分析

本帖最后由 坎蒂丝_Swan 于 2014-12-14 19:40 编辑



问题导读

问题1:什么是ceilometer?它的服务组件都有哪些?
问题2:ceilometer监控数据的采集机制是怎样的?



static/image/hrline/4.gif





ceilometer主要概念
sample:采样数据是每个采集时间点上meter对应的值;

statistics:一般是统计学上某个周期内,meter对应的值(平均值之类);

resource:是被监控的资源对象,这个可以是一台虚拟机,一台物理机或者一块云硬盘;

alarm:是ceilometer的报警系统,可以通过阈值或者组合条件报警,并设置报警时触发的action,alarm的实现模型有两种,即单例报警系统和分布式报警 系统;

meter:被跟踪资源的测量值。一个实例有很多的计量值,比如实例运行时长、CPU使用时间、请求磁盘的数量等。

在Ceilometer中有三种计量值:
    Cumulative: 累计的,随着时间增长(如磁盘读写);
    Gauge: 计量单位,离散的项目(如浮动IP,镜像上传)和波动的值(如对象存储数值);
    Delta: 增量,随着时间的改变而增加的值(如带宽变化);

central agent:运行在OpenStack架构中中央管理节点上用来测量和发送监控结果到收集器的服务;

compute agent:运行再OpenStack架构中计算节点上的服务,用来测量和发送监控结果到搜集器中;

API server:Ceilometer的HTTP REST API服务;

collector:运行在OpenStack架构中的服务,用来监控来自其他OpenStack组件和监控代理发送来的通知,并且将其存入数据库中;


ceilometer中的服务组件


需要说明这里是针对icehouse版对ceilometer模块进行源码解析。根据配置文件setup.cfg以及/ceilometer/cli.py可以知道,运行在ceilometer中的服务组件有如下所示:

ceilometer-api: ceilometer.cli:api

ceilometer-agent-central: ceilometer.cli:agent_central

ceilometer-agent-compute: ceilometer.cli:agent_compute

ceilometer-agent-notification: ceilometer.cli:agent_notification

ceilometer-send-sample: ceilometer.cli:send_sample

ceilometer-dbsync: ceilometer.cli:storage_dbsync

ceilometer-expirer: ceilometer.cli:storage_expirer

ceilometer-collector: ceilometer.cli:collector_service

ceilometer-alarm-evaluator: ceilometer.cli:alarm_evaluator

ceilometer-alarm-notifier: ceilometer.cli:alarm_notifier

ceilometer监控数据采集机制
   
这里借助网上获取的一副图片来说明ceilometer监控数据的采集机制(对其作者表示感谢):




    由上图可以看到,实现监控数据采集的服务组件有三个,分别是ceilometer-agent-central、ceilometer-agent-compute和ceilometer-agent-notification。

按照我的理解,监控数据的采集主要分为两种情况实现
      一种是服务组件通过相关模块的客户端或者计算节点的Hypervisor实现主动获取相关模块的相关监控数据
      一种则是通过收集各个模块推送到oslo-messaging的通知(notification)信息,从中获取有用的监控数据,实现被动地采集相关监控数据。

    其中ceilometer-agent-compute的服务组件主要用来收集计算节点上的虚拟机实例的监控数据,在每一个计算节点上都要运行这个服务组件,该agent通过Stevedore管理了一组pollster插件,分别用来获取计算节点上虚拟机的CPU,Disk IO,Network IO,Instance这些信息,这些信息大部分是通过调用Hypervisor的API来获取的,需要定期Poll轮询收集信息。

    ceilometer-agent-central服务组件则运行在控制节点上,它主要通过调用相关模块的REST API,通过访问相关模块的客户端,从而实现主动收集相关模块(Image,Volume,Objects,Network)的监控数据,需要定期Poll轮询收集信息。

    而ceilometer-agent-notification服务组件则实现访问oslo-messaging,openstack中各个模块都会推送通知(notification)信息到oslo-messaging消息框架,ceilometer-agent-notification通过访问这个消息队列服务框架,获取相关通知信息,并进一步转化为采样数据的格式。从消息队列服务框架获取通知信息,并进一步获取采样数据信息,可以理解为被动获取监控数据操作,需要一直监听oslo-messaging消息队列。

    由示意图可以看出,当监控获取完成之后,则会执行信息发布操作,有三种实现方案可供选择,即RPC/UDP/FILE。其中,RPC将会发布相关消息到消息队列,后续的collector组件服务将会监听相应的消息队列来获取这些数据信息;UDP将会建立socket建立一个信息通道,实现发送相关消息数据,而后续的collector组件服务将会通过这个信息通道接收相关的消息数据;FILE将会直接保存相关消息数据到指定的日志文件中。

    由示意图可以看出,当信息发布操作完成之后,collector组件服务将会分别获取相关的消息数据,并实现保存获取的消息数据到数据存储系统中。而数据存储系统方案目前也支持几种实现,即log/mongodb/mysql/postgresql/sqlite/hbase/db2等;

其他服务组件的介绍


ceilometer-alarm-notifier 加载并启动AlarmNotifierService服务,实现报警器被触发的相关通知服务;

ceilometer-alarm-evaluator 实现加载并启动报警服务,ceilometer中实现的系统报警服务有两种,即单例报警系统SingletonAlarmService和分布式报警系统

PartitionedAlarmService,而ceilometer默认应用的是SingletonAlarmService;对于报警系统相关的内容,我将会在另外一篇帖子中进行详细的分析;

I版ceilometer项目源码结构


/ceilometer/alarm 报警系统的实现;

/ceilometer/api 提供REST API服务;

/ceilometer/central ceilometer-agent-central的具体实现

/ceilometer/compute ceilometer-agent-compute的具体实现

/ceilometer/dispatcher 用于实现保存数据到数据存储系统;

/ceilometer/energy 通过kwapi架构,获取物理机能耗相关信息数据;

/ceilometer/event Ceilometer Events

/ceilometer/hardware 获取物理机硬件的相关监控数据信息;

/ceilometer/image 实现通过客户端访问glance模块,获取相关的监控数据信息;

/ceilometer/network 实现通过客户端访问Neutron模块,获取相关的监控数据信息;

/ceilometer/objectstore 实现通过客户端访问swift模块,获取相关的监控数据信息;

/ceilometer/openstack 通用应用代码工具;

/ceilometer/orchestration 通过Heat的通知信息获取相关监控项的采样数据信息;

/ceilometer/publisher 收集到的监控数据的发布实现;

/ceilometer/storage 存储监控数据到数据存储系统的实现;

/ceilometer/transformer 数据转换

/ceilometer/volume 实现通过客户端访问cinder模块,获取相关的监控数据信息;

/ceilometer/agent.py Ceilometer通过Agent模块去polling虚拟机或者OpenStack中需要的信息;

/ceilometer/cli.py 实现若干服务组件的启动;

/ceilometer/collector.py 实现发布的监控数据的收集;

/ceilometer/middleware.py HTTP相关插件实现;

/ceilometer/notification.py 通过oslo-messaging框架,监听compute/image/network/heat/cinder等服务的队列,来获取相关的通知信息;

/ceilometer/notifier.py 根据不同的插件实现Instance/Image/Network/Volume/HTTPRequest中的具体方法process_notification,用来从通知中获取监控项的采样数据信息;

/ceilometer/nova_client.py nova客户端;

/ceilometer/pipeline.py pipeline实现;

/ceilometer/plugin.py 插件实现基类;

/ceilometer/sample.py 根据已知的采样数据形成Sample格式;

/ceilometer/service.py 服务实现相关;

/ceilometer/utils.py 若干通用工具;



Ceilometer项目源码分析----ceilometer项目源码结构分析
Ceilometer项目源码分析----ceilometer报警器服务的实现概览
Ceilometer项目源码分析----ceilometer报警器状态评估方式
Ceilometer项目源码分析----ceilometer分布式报警系统的具体实现
Ceilometer项目源码分析----ceilometer-alarm-notifier服务的初始化和启动
Ceilometer项目源码分析----ceilometer-alarm-evaluator服务的初始化和启动
Ceilometer项目源码分析----ceilometer-agent-central服务的初始化和启动
Ceilometer项目源码分析----ceilometer-agent-compute服务的初始化和启动
Ceilometer项目源码分析----ceilometer-agent-notification服务的初始化和启动
Ceilometer项目源码分析----ceilometer-collector服务的初始化和启动




bugs2k@163.com 发表于 2014-12-12 16:42:23

{:soso_e100:}{:soso_e100:}{:soso_e100:}
页: [1]
查看完整版本: Ceilometer项目源码分析----ceilometer项目源码结构分析