讀古今文學網 > OpenStack系統架構設計實戰 > 5.5.2 Pollster插件開發 >

5.5.2 Pollster插件開發

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