Pollster插件的作用是用来获取某种测量值。Pollster插件运行在Ceilometer Agent里的某个线程中,周期性地被调用,来获取某种测量值的采样值(Sample)。
所有的Pollster都必须是ceilometer.agent.plugin_base.PollsterBase抽象类的子类,需要实现其中的接口。PollsterBase的定义如下:
@six.add_metaclass(abc.ABCMeta)class PollsterBase(PluginBase):@abc.abstractpropertydef default_discovery(self): """返回Pollster默认的discovery"""@abc.abstractmethoddef get_samples(self, manager, cache, resources): """返回Sample对象列表"""
开发新的Pollster插件时,需要实现两个接口,其中default_discovery方法返回一个URL字符串来指明这个Pollster所需要使用的Discovery插件。此处URL字符串中scheme部分用来在ceilometer.discovery的namespace中找到对应的Discovery插件,URL字符串中的netloc和path部分会被作为参数调用该Discovery插件的Discovery方法。如果此Pollster插件不需要使用Discovery插件,可以返回None。例如,default_discovery方法实现如下,表明该Pollster需要使用名为endpoint的Discovery插件,调用其discovery方法时param参数的值为compute。
def default_discovery(self): return ‘endpoint:compute’
Pollster插件中的关键方法是get_samples方法,这个方法被Ceilometer Agent周期性地调用。该方法的输入参数含义如下。
1)manager:指向其运行的agent service manager对象的句柄。
2)cache:缓存,pollster的具体实现可以在这个缓存里保存任何信息。值得注意的是,这个缓存是由运行在此代理上的各个pollster共享的,缓存的作用是保存某些pollster在同一轮询周期里被重复调用的对象,以提高效率。而在新一个轮询周期开始时,此缓存中的信息会被清空。
3)resource:包含resource endpoint的列表,这个列表的内容可能是由此pollster的default discovery插件所获取的resource信息,也可能是pipeline中resource所指定的静态resource信息。不同的pollster实现可以对这些resource值有不同的解释和使用,一般这里的resource用来指明这个pollster需要在哪些端点上进行获取测量值的操作。
get_samples方法返回的是一个包含ceilometer.sample.Sample对象实例的iterable,这个iterable中包含的Sample对象实例表示的是某个测量值的此次轮询的采样值。
Pollster插件可以根据开发者的需要注册在ceilometer.poll.compute、ceilometer.poll.ipmi、ceilometer.poll.central这3个不同的NameSpace下,表示其分别运行在Compute Agent、IPMI Agent、Central Agent中。一般来说,每一种Pollster的实现只返回一种测量值的sample实例,并且使用sample.name的值作为此Pollster插件的注册名称,即使用测量值的名称作为setup.cfg文件中的注册名称。例如:
ceilometer.poll.compute = disk.read.requests = ceilometer.compute.pollsters.disk:ReadRequestsPollster disk.write.requests = ceilometer.compute.pollsters.disk:WriteRequestsPollster disk.read.bytes = ceilometer.compute.pollsters.disk:ReadBytesPollster