ceilometer监控源码分析之任务队列

本文分析了ceilometer监控任务队列的源码,详细解释了从配置读取到任务执行的过程,包括从pipeline.yaml配置定时任务,通过AgentManager和PollingTask类实现监控数据获取和发送,使用ThreadGroup进行线程管理和任务调度,以及通过libvirt接口获取虚拟机监控数据。在遇到大量并发调用libvirt接口可能导致的问题时,提出了限制小协程池数量的解决方案。
摘要由CSDN通过智能技术生成

ceilometer监控源码分析之任务队列

场景描述:

ceilometer(这里仅指监控任务)在每个宿主机上运行,读取/etc/ceilometer/pipeline.yaml中配置定时执行监控任务。
pipeline.yaml内容如下:
这里写图片描述
图注:该图中有三个监控项,分别是heartbeat, cpu, memory,interval表示定时间隔。

代码分析:

( 一 )
故事从/ceilometer/agent/base.py 讲起
openstack项目通常的结构是manage+instance。base.py下有两个关键的类,一个是AgentManager,一个是PollingTask.

1. PollingTask
实现Task的类,主要函数是 poll_and_publish (),该函数实现了从获取监控数据至发送数据的全过程。
2. AgentManager
该类继承os_service, 作为进程入口,持有且管理Task,主要函数是 start()

def start(self):

        self.pipeline_manager = publish_pipeline.setup_pipeline()

        self.partition_coordinator.start()
        self.join_partitioning_groups()

        # allow time for coordination if necessary
        delay_start = self.partition_coordinator.is_active()

        # set shuffle time before polling task if necessary
        delay_polling_time = random.randint(
            0, cfg.CONF.shuffle_time_before_polling_task)

        for interval, task in six.iteritems(self.setup_polling_tasks()):
            delay_time = (interval + delay_polling_time if delay_start
                          else delay_polling_time)
            self.tg.add_timer(interval,
                              self.interval_task,
                              initial_delay=delay_time,
                              task=task)
        self.tg.add_timer(cfg.CONF
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值