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

5.5.1 Notification Listener插件開發

Notification代理通過Notification Listener插件來實現監聽OpenStack各個服務推送到通知總線上的通知消息,然後把其感興趣的通知消息轉換成測量取樣值Sample,交給Pipeline做進一步處理。Notification Listener插件運行在Notification代理上,用戶可以通過開發符合接口定義的新的Notification Listener插件,來實現對新的通知消息的監聽。

所有Notification Listener插件都必須是ceilometer.agent.plugin_base.NotificationBase抽像類的子類,需要實現如下接口:

@six.add_metaclass(abc.ABCMeta)class NotificationBase(PluginBase):@abc.abstractpropertydef event_types(self): """返回該插件的事件類型"""def get_targets(self, conf): """返回一個包含oslo.messaging.Target對像實例的列表"""@abc.abstractmethoddef process_notification(self, message): """返回取樣值"""

Notification Listener插件需要實現3個接口,event_types、get_targets和process_notification。各個接口的作用如下。

1)event_types:需要返回一個事件類型列表,用來表明此Notification Listener插件對哪些類型的通知消息感興趣。

2)get_targets:返回一個包含oslo.messaging.Target對像實例的列表,這些Target對像實例指明了需要監聽的Notification Bus信息。get_targets接口的輸入參數conf指向oslo.config.CONF對象,該對像包含了Ceilometer的配置信息。例如,監聽Neutron服務通知消息的Notification Listener插件的get_targets方法實現如下:

OPTS = [ cfg.StrOpt('neutron_control_exchange', default='neutron', help="Exchange name for Neutron notifications.", deprecated_name='quantum_control_exchange'),]cfg.CONF.register_opts(OPTS)class NetworkNotificationBase(plugin_base.NotificationBase):@staticmethoddef get_targets(conf):return [oslo.messaging.Target(topic=topic, exchange=conf.neutron_control_exchange) for topic in conf.notification_topics]

3)process_notification:用來把消息通知的內容轉化為一系列的測量取樣值(ceilometer.sample.Sample對像),並返回給Notification Agent。Notification Agent再將這些Sample交由Pipeline進一步處理,消息通知的內容作為入參傳入。

Notification Listener插件需要被註冊在ceilometer.notification的namespace下,一般來說,每一種Listener的實現只返回一種測量值的Sample實例,並且使用sample.name的值作為此Listener插件的註冊名稱,即使用測量值的名稱作為setup.cfg文件中Listener插件的註冊名稱。例如:

ceilometer.notification =memory = ceilometer.compute.notifications.instance:Memory disk_root_size = ceilometer.compute.notifications.instance:RootDiskSize cpu_frequency = ceilometer.compute.notifications.cpu:CpuFrequency