Objectives
2012年Ceilometer創(chuàng)建的時候,目的只是為了提供基礎(chǔ)設(shè)施為OpenStack項目收集信息。它使得那些評級的引擎可以用它來將事件轉(zhuǎn)化成付費項目,我們俗稱“計量”。
隨著這個項目的發(fā)展,跨多個項目的計量值越來越多。Openstack社區(qū)就想著進一步擴展Ceilometer的作用:把它打造成標準的計量方式,并且不用理會統(tǒng)計的目的究竟是什么。然后這些數(shù)據(jù)又可以被分發(fā)到任意的目的地。
Metering
可以將一個計費過程分為3步:
1、Metering
2、Rating
3、Billing
Ceilometer從始至終都限制了第一步。這是一開始就選擇的一條路,因為從私有云發(fā)展到公有云,評級和計費因為每一個人不同的需求而有各種各樣的解決辦法。也就是說,如果你想利用ceilometer進行計費,是一個不錯的選擇,單絕對不是唯一的選擇。

下面是對Ceilometers邏輯架構(gòu)的一個總結(jié):
每一個Ceilometer的服務(wù)都是水平可擴展的。額外的進程和節(jié)點都可以按需增加。Ceilometer主要提供兩個核心的服務(wù):
1、polling agent-設(shè)計成一個守護進程輪詢Openstack服務(wù),然后創(chuàng)建計量值
2、notification agent-設(shè)計成一個可以堅挺消息隊列的通知的守護進程,并把他們轉(zhuǎn)換成Events或者Samples,并且進一步應(yīng)用到pipeline 上。
通過Ceilometer收集和規(guī)范化的話劇都可以被送到不同的目的地。Gnocchi旨在以時間序列格式捕捉測量數(shù)據(jù),以優(yōu)化存儲和查詢。Gnocchi是為了替代現(xiàn)有的計量數(shù)據(jù)庫接口。另外,Aodh是一項報警服務(wù),當用戶打破定義的規(guī)則的時候,Aodh就會發(fā)出警告。最后,Panko是一個事件存儲項目,它是為了捕獲面向文檔的數(shù)據(jù),比如日志和系統(tǒng)事件行為。
收集數(shù)據(jù)

上面就是典型的,代理如何從不同的來源收集數(shù)據(jù)。
Ceilometer工程創(chuàng)建了2個方法收集數(shù)據(jù):
1、notification agent:它會收集從通知總線過來的數(shù)據(jù),然后把他們轉(zhuǎn)成Ceilometer樣本數(shù)據(jù)或者事件
2、polling agent:會根據(jù)一個固定的間隔事件輪詢條用API或者其他的工具收集信息。
第一個方法由ceilometer-notification agent所支持,它會監(jiān)測管理通知的消息隊列。polling agents可以配置成輪詢本地程序或者遠程APIs(由服務(wù)提供的REST APIS接口,還有主機級別的SNMP/IPMI守護進程)

notification agent 消費從各種服務(wù)發(fā)送過來的消息。
上面這個系統(tǒng)的核心就是notification的守護進程(也就是agent-notification),會監(jiān)測由其他OpenStack組件(比如Nova,Glance,Cinder,Neutron,Swift,Keystone,Heat,以及ceilometer內(nèi)部交互)發(fā)送數(shù)據(jù)過來的消息隊列。
這個notification進程加載一個或者多個監(jiān)聽插件,使用的命名空間是ceilometer.notification。每一個插件可以監(jiān)聽不同的主題。默認會監(jiān)聽notification.info,notification.sample,還有notification.error。這些監(jiān)聽器會將這些捕獲到的不同主題的數(shù)據(jù)分發(fā)到合適的端點,然后進一步發(fā)展成Events和Samples
面向樣本數(shù)據(jù)的插件會提供一個方法來列出他們感興趣的事件類型以及相應(yīng)的處理消息的回調(diào)。回調(diào)的注冊名稱被用于開啟或者關(guān)閉使用通知守護進程的管道。在被傳遞到回調(diào)之前,傳進來的數(shù)據(jù)會被根據(jù)他們的事件類型進行過濾,所以這個插件只會接收它自己感興趣的事件。

polling agent查詢服務(wù)數(shù)據(jù)
輪詢compute resorces被運行在compute節(jié)點上的polling agent處理,經(jīng)常被稱為compute-agent。輪詢其他非計算資源被運行在一個云控制節(jié)點上的代理處理,經(jīng)常被稱為central-agent。單一代理可以在一體化部署當中履行這兩種角色。相反的,一個代理的多個實例可以被部署,這些實例之間工作負載是共享的。polling agent的守護進程通過在ceilomater.poll.compute,ceilometer.poll.central,和ceilometer.poll.ipmi混合的命名空間中,被配置成運行一個或者多個pollster插件
這個代理框架之后將生成的樣本數(shù)據(jù)發(fā)送到了notification agent處理
處理數(shù)據(jù)


從polling和notifications agent收集起來的數(shù)據(jù)如果和時間上下文結(jié)合的話,可以獲取到更多的數(shù)據(jù)。Ceilometer提供了很多的轉(zhuǎn)換器用來轉(zhuǎn)換管道中的數(shù)據(jù)。

這張圖表示樣本數(shù)據(jù)可以被分發(fā)到不同的目的地,現(xiàn)在由7中不同的方法:
1、gnocchi,會把數(shù)據(jù)和事件發(fā)布到Gnochi API
2、notifier,會把數(shù)據(jù)推到消息隊列里面,可以供外部系統(tǒng)使用
3、udp,會使用UDP包分發(fā)數(shù)據(jù)
4、http,會指向REST接口
5、file,會把數(shù)據(jù)發(fā)送到指定名字和位置的文件中
存儲/獲取數(shù)據(jù)
ceilometer產(chǎn)生的數(shù)據(jù)可以被發(fā)送到上面提到任何的方式當中,首推Gnocchi.