感谢朋友支持本博客,欢迎共同探讨交流。因为能力和时间有限,错误之处在所难免,欢迎指正!

假设转载,请保留作者信息。

博客地址:http://blog.csdn.net/gaoxingnengjisuan

邮箱地址:dong.liu@siat.ac.cn

PS:近期没有登录博客。非常多朋友的留言没有看见。这里道歉。还有就是本人较少上QQ,能够邮件交流。

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

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

ceilometer-agent-central服务组件则执行在控制节点上,它主要通过调用相关模块的REST API。通过訪问相关模块的client,从而实现主动收集相关模块(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 实现通过client訪问glance模块。获取相关的监控数据信息;

/ceilometer/network 实现通过client訪问Neutron模块。获取相关的监控数据信息;

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

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

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

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

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

/ceilometer/transformer 数据转换

/ceilometer/volume 实现通过client訪问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项目源代码结构分析的更多相关文章

  1. cocos2d-x 源代码分析 : control 源代码分析 ( 控制类组件 controlButton)

    源代码版本号来自3.1rc 转载请注明 cocos2d-x源代码分析总文件夹 http://blog.csdn.net/u011225840/article/details/31743129 1.继承 ...

  2. 【Java收集的源代码分析】Hashtable源代码分析

    Hashtable简单介绍 Hashtable相同是基于哈希表实现的,相同每一个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时.相同会自己主动增长. Has ...

  3. 转:SDL2源代码分析

    1:初始化(SDL_Init()) SDL简介 有关SDL的简介在<最简单的视音频播放示例7:SDL2播放RGB/YUV>以及<最简单的视音频播放示例9:SDL2播放PCM>中 ...

  4. SDL2源代码分析7:显示(SDL_RenderPresent())

    ===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...

  5. SDL2源代码分析6:复制到渲染器(SDL_RenderCopy())

    ===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...

  6. SDL2源代码分析5:更新纹理(SDL_UpdateTexture())

    ===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...

  7. SDL2源代码分析4:纹理(SDL_Texture)

    ===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...

  8. SDL2源代码分析2:窗口(SDL_Window)

    ===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...

  9. Android KLog源代码分析

    Android KLog源代码分析 Android KLog源代码分析 代码结构 详细分析 BaseLog FileLog JsonLog XmlLog 核心文件KLogjava分析 遇到的问题 一直 ...

随机推荐

  1. vim 将文件所有行合并到一行

      vim 将文件所有行合并到一行   在 Normal Mode下执行: ggvGJ gg 用于跳到行首 v 转换成 visual 模式 G 跳到最后一行 J 合并行

  2. 【C语言】控制台窗口图形界面编程(八):键盘事件

    目录 00. 目录 01. INPUT_RECORD结构 02. KEY_EVENT_RECORD结构 03. ReadConsoleInput函数 04. 示例程序 00. 目录 01. INPUT ...

  3. 利用filter过滤去重

    var r, ary = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry']; r ...

  4. 2019ICPC西安邀请赛(计蒜客复现赛)总结

    开始时因为吃饭晚了一刻钟,然后打开比赛.看了眼榜单A题已经过了二十来个队伍了,宝儿就去做A. 传师说最后一题看题目像最短路,于是我就去看M了,宝儿做完之后也来陪我看.M一开始看到时以为是像   POJ ...

  5. 洛谷——P1731 [NOI1999]生日蛋糕

    P1731 [NOI1999]生日蛋糕 搜索+剪枝 常见的剪枝: 若当前状态+后面所要搜索的最差的状态$>$或是$<$最后的状态,就返回 预处理最差的状态 #include<iost ...

  6. [bzoj2806][Ctsc2012]Cheat(后缀自动机(SAM)+二分答案+单调队列优化dp)

    偷懒直接把bzoj的网页内容ctrlcv过来了 2806: [Ctsc2012]Cheat Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1943   ...

  7. Java权限管理(授权与认证)

    CRM权限管理 有兴趣的同学也可以阅读我最近分享的:Shiro框架原理分析   (PS : 这篇博客里面介绍了使用Shiro框架的方式实现权限管理) https://www.cnblogs.com/y ...

  8. ibdata过大删除的方法

    1.做数据库的逻辑备份 mysqldump -uroot -p123456 -B xx xx xx xx > /backup/all.sql 2.停止mysql进程 service mysqld ...

  9. 微信小程序 video组件----真机测试position:fixed无效 且有黑底

    1.问题描述 video组件fixed后,视频随页面滚动,且有个黑色底停留在页面. 页面滚动前 滚动后 这里贴一下修改前代码,在微信开发者工具看是没有任何问题的.在手机端测试就有以上的问题 <v ...

  10. django-1创建项目创建app设置setting、urls、templates、views等

    1. python -m django --version 查看版本 1.11.4 在需要创建项目的目录下执行: 2. django-admin startproject myblog => 创 ...