ceilometer polling agents源码分析
来源:互联网 发布:玛雅软件下载 编辑:程序博客网 时间:2024/06/06 07:07
ceilometer polling agents
ceilometer数据采集polling agents 和 notification agents完成; polling agents是主动轮询所关心的数据;notification agents则是由各个模块上报数据到notificaton队列,然后再由ceilometer notification agents抓取队列消息进行处理;经过polling agents和notification agents处理后的数据最后会发送到notification队列,由ceilometer collector收集写入数据库或做其它处理。
概述
polling agent分为compute、central和ipmi三部分,分别对应不同的服务,使用同一套代码;在启动服务时,传入不同的参数(compute/central/ipmi),以此来加载对应的entry_points,实现轮询不同的pollster数据。
1、从notifications队列取消息转换为ceilometer samples
2、polling agents 以固定时间间隔通过轮询其它模块API或其它工具收集数据
计算资源的轮询是由polling compute agent处理的,它在计算节点执行(访问hypervisor更有效)。polling 通过服务API轮询非计算资源的处理是由运行在控制节点的polling central agent完成的。
ceilometer-polling启动流程
通过启动service时传入的参数确认启动'compute', 'central', 'ipmi'中的一个。
pollster-list用于确认加载哪些entry_points;如果为[],则加载所有的entry_points,否则加载pollster-list对应的entry_points ceilometer\ceilometer\cmd\polling.pyCLI_OPTS = [ MultiChoicesOpt('polling-namespaces', default=['compute', 'central'], choices=['compute', 'central', 'ipmi'], ……), MultiChoicesOpt('pollster-list', default=[], ……),
]
初始化操作主要实现了以下内容的操作:
1、先根据指定参数(compute/central/ipmi)获取命名空间ceilometer.poll.compute|central|ipmi,然后获取与该命名空间相匹配的所有插件,并加载;该命名空间所指定的插件描述了如何获取采样数据;
2、获取命名空间ceilometer.discover,获取与ceilometer.discover相匹配的所有插件,并加载;ceilometer.discover所指定的插件描述了如何发现主机上的需要监控的资源。
ceilometer\ceilometer\agent\manager.pyclass AgentManager(service_base.BaseService): def __init__(self, namespaces=None, pollster_list=None): namespaces = namespaces or ['compute', 'central'] pollster_list = pollster_list or []
……
……
……
……
……
1、lanch(……) -> ServiceLauncher -> Launcher. launch_service() -> Services.add(……)
2、ServiceLauncher.wait() -> Launcher.restart() -> Services.restart() -> Services.run_service()
3、调用ceilometer.agent.manager. AgentManager. start()oslo_service\service.pydef launch(conf, service, workers=1):
……
……
1、读取配置文件pipeline.yaml,获取所有的sources配置。
2、以每个meter项的interval为key创建定时任务列表,并其添加到对应采集周期的定时任务列表中。
ceilometer\ceilometer\agent\manager.pyclass AgentManager(service_base.BaseService):
def start(self):
……
注意:因pipeline.yaml里的meter_source项的默认配置是"\*",故entry_points.txt里定义的所有采集指标都会有对应一个采集并上报原始数据任务并加入600s的任务列表里。如果不想上报原始数据,则配置项应改为:"!*"
/etc/ceilometer/pipeline.yaml:sources: - name: meter_source interval: 600 meters: - "*" sinks: - meter_sink
ceilometer-polling模块定时轮询流程
加载pipeline.yaml配置,通过interval分类创建timer,相同interval的pollster会同时触发。
ceilometer\ceilometer\agent\manager.pyclass AgentManager(service_base.BaseService): def configure_polling_tasks(self):
……
……
#加入轮询数据调用的方法(函数),格式见下段entry_points.txt内容 polling_task.add(pollster, source) return polling_tasks def interval_task(self, task):
……
……
ceilometer\ceilometer\compute\pollsters\cpu.pyclass CPUPollster(pollsters.BaseComputePollster): def get_samples(self, manager, cache, resources): for instance in resources:
try:
cpu_num = {'cpu_number': cpu_info.number}
参考资料
https://github.com/openstack/ceilometer/tree/stable/mitaka
http://docs.openstack.org/developer/ceilometer/architecture.html?highlight=aodh- ceilometer polling agents源码分析
- Ceilometer项目源码分析----ceilometer项目源码结构分析
- 《转》 Ceilometer项目源码分析----ceilometer项目源码结构分析
- Ceilometer项目源码分析----ceilometer报警器服务的实现概览
- ceilometer监控源码分析之任务队列
- Ceilometer 分析
- Ceilometer项目源码分析----ceilometer分布式报警系统的具体实现(1)
- Ceilometer项目源码分析----ceilometer分布式报警系统的具体实现(2)
- Ceilometer项目源码分析----ceilometer-alarm-notifier服务的初始化和启动
- Ceilometer项目源码分析----ceilometer-alarm-evaluator服务的初始化和启动
- Ceilometer项目源码分析----ceilometer-agent-central服务的初始化和启动
- Ceilometer项目源码分析----ceilometer-agent-compute服务的初始化和启动
- Ceilometer项目源码分析----ceilometer-agent-notification服务的初始化和启动
- Ceilometer项目源码分析----ceilometer-collector服务的初始化和启动
- Ceilometer项目源码分析----ceilometer报警器状态评估方式之联合报警器状态评估的具体实现
- Ceilometer项目源码分析----ceilometer报警器状态评估方式之单一报警器状态评估的具体实现
- openstack ceilometer 分析
- Agents
- Microservice 微服务的理论模型和现实路径
- WebService基础教程之一(概念,如何发布和调用一个简单的WebService)
- ffmpeg 开源视、音频解码
- 大数据:Spark Core(四)用LogQuery的例子来说明Executor是如何运算RDD的算子
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- ceilometer polling agents源码分析
- (14)caffe总结之Linux下Caffe如何调试
- Linux命令格式
- jQuery网站新闻公告上下滚动自动轮播代码
- 深度学习入门实战(二)-用TensorFlow训练线性回归
- Javascript——Object.prototype.hasOwnProperty()
- 分布式服务框架ZooKeeper安装和配置
- java split 小数点 "."
- 群控源码二次开发