Ceilometer項目源碼分析----ceilometer項目源碼結構分析

感謝朋友支持本博客,歡迎共同探討交流,由於能力和時間有限,錯誤之處在所難免,歡迎指正!

如果轉載,請保留作者信息。
博客地址:http://blog.csdn.net/gaoxingnengjisuan
郵箱地址:[email protected]

PS:最近沒有登錄博客,很多朋友的留言沒有看見,這裏道歉!還有就是本人較少上QQ,可以郵件交流。


ceilometer主要概念
sample:採樣數據是每個採集時間點上meter對應的值;
statistics一般是統計學上某個週期內,meter對應的值(平均值之類);
resource是被監控的資源對象,這個可以是一臺虛擬機,一臺物理機或者一塊雲硬盤;
alarm是ceilometer的報警系統,可以通過閾值或者組合條件報警,並設置報警時觸發的action,alarm的實現模型有兩種,即單例報警系統和分佈式報警系統;
meter被跟蹤資源的測量值。一個實例有很多的計量值,比如實例運行時長、CPU使用時間、請求磁盤的數量等。在Ceilometer中有三種計量值:

    Cumulative: 累計的,隨着時間增長(如磁盤讀寫);
    Gauge: 計量單位,離散的項目(如浮動IP,鏡像上傳)和波動的值(如對象存儲數值);
    Delta: 增量,隨着時間的改變而增加的值(如帶寬變化);
central agent運行在OpenStack架構中中央管理節點上用來測量和發送監控結果到收集器的服務;
compute agent運行再OpenStack架構中計算節點上的服務,用來測量和發送監控結果到蒐集器中;
API serverCeilometer的HTTP REST API服務;
collector運行在OpenStack架構中的服務,用來監控來自其他OpenStack組件和監控代理髮送來的通知,並且將其存入數據庫中;


ceilometer中的服務組件
需要說明這裏是針對icehouse版對ceilometer模塊進行源碼解析。根據配置文件setup.cfg以及/ceilometer/cli.py可以知道,運行在ceilometer中的服務組件有如下所示:
ceilometer-api: ceilometer.cli:api
ceilometer-agent-central: ceilometer.cli:agent_central
ceilometer-agent-compute: ceilometer.cli:agent_compute
ceilometer-agent-notification: ceilometer.cli:agent_notification
ceilometer-send-sample: ceilometer.cli:send_sample
ceilometer-dbsync: ceilometer.cli:storage_dbsync
ceilometer-expirer: ceilometer.cli:storage_expirer
ceilometer-collector: ceilometer.cli:collector_service
ceilometer-alarm-evaluator: ceilometer.cli:alarm_evaluator
ceilometer-alarm-notifier: ceilometer.cli:alarm_notifier


ceilometer監控數據採集機制
    這裏藉助網上獲取的一副圖片來說明ceilometer監控數據的採集機制(對其作者表示感謝):


    由上圖可以看到,實現監控數據採集的服務組件有三個,分別是ceilometer-agent-central、ceilometer-agent-compute和ceilometer-agent-notification。按照我的理解,監控數據的採集主要分爲兩種情況實現,一種是服務組件通過相關模塊的客戶端或者計算節點的Hypervisor實現主動獲取相關模塊的相關監控數據,一種則是通過收集各個模塊推送到oslo-messaging的通知(notification)信息,從中獲取有用的監控數據,實現被動地採集相關監控數據。
    其中ceilometer-agent-compute的服務組件主要用來收集計算節點上的虛擬機實例的監控數據,在每一個計算節點上都要運行這個服務組件,該agent通過Stevedore管理了一組pollster插件,分別用來獲取計算節點上虛擬機的CPU,Disk IO,Network IO,Instance這些信息,這些信息大部分是通過調用Hypervisor的API來獲取的,需要定期Poll輪詢收集信息。
    ceilometer-agent-central服務組件則運行在控制節點上,它主要通過調用相關模塊的REST API,通過訪問相關模塊的客戶端,從而實現主動收集相關模塊(Image,Volume,Objects,Network)的監控數據,需要定期Poll輪詢收集信息。
    而ceilometer-agent-notification服務組件則實現訪問oslo-messaging,openstack中各個模塊都會推送通知(notification)信息到oslo-messaging消息框架,ceilometer-agent-notification通過訪問這個消息隊列服務框架,獲取相關通知信息,並進一步轉化爲採樣數據的格式。從消息隊列服務框架獲取通知信息,並進一步獲取採樣數據信息,可以理解爲被動獲取監控數據操作,需要一直監聽oslo-messaging消息隊列。
    由示意圖可以看出,當監控獲取完成之後,則會執行信息發佈操作,有三種實現方案可供選擇,即RPC/UDP/FILE。其中,RPC將會發布相關消息到消息隊列,後續的collector組件服務將會監聽相應的消息隊列來獲取這些數據信息;UDP將會建立socket建立一個信息通道,實現發送相關消息數據,而後續的collector組件服務將會通過這個信息通道接收相關的消息數據;FILE將會直接保存相關消息數據到指定的日誌文件中。
    由示意圖可以看出,當信息發佈操作完成之後,collector組件服務將會分別獲取相關的消息數據,並實現保存獲取的消息數據到數據存儲系統中。而數據存儲系統方案目前也支持幾種實現,即log/mongodb/mysql/postgresql/sqlite/hbase/db2等;


其他服務組件的介紹
ceilometer-alarm-notifier 加載並啓動AlarmNotifierService服務,實現報警器被觸發的相關通知服務;
ceilometer-alarm-evaluator 實現加載並啓動報警服務,ceilometer中實現的系統報警服務有兩種,即單例報警系統SingletonAlarmService和分佈式報警系統PartitionedAlarmService,而ceilometer默認應用的是SingletonAlarmService;對於報警系統相關的內容,我將會在另外一篇博客中進行詳細的分析;


I版ceilometer項目源碼結構
/ceilometer/alarm 報警系統的實現;
/ceilometer/api 提供REST API服務;
/ceilometer/central ceilometer-agent-central的具體實現
/ceilometer/compute ceilometer-agent-compute的具體實現
/ceilometer/dispatcher 用於實現保存數據到數據存儲系統;
/ceilometer/energy 通過kwapi架構,獲取物理機能耗相關信息數據;
/ceilometer/event Ceilometer Events
/ceilometer/hardware 獲取物理機硬件的相關監控數據信息;
/ceilometer/image 實現通過客戶端訪問glance模塊,獲取相關的監控數據信息;
/ceilometer/network 實現通過客戶端訪問Neutron模塊,獲取相關的監控數據信息;
/ceilometer/objectstore 實現通過客戶端訪問swift模塊,獲取相關的監控數據信息;
/ceilometer/openstack 通用應用代碼工具;
/ceilometer/orchestration 通過Heat的通知信息獲取相關監控項的採樣數據信息;
/ceilometer/publisher 收集到的監控數據的發佈實現;
/ceilometer/storage 存儲監控數據到數據存儲系統的實現;
/ceilometer/transformer 數據轉換
/ceilometer/volume 實現通過客戶端訪問cinder模塊,獲取相關的監控數據信息;
/ceilometer/agent.py Ceilometer通過Agent模塊去polling虛擬機或者OpenStack中需要的信息;
/ceilometer/cli.py 實現若干服務組件的啓動;
/ceilometer/collector.py 實現發佈的監控數據的收集;
/ceilometer/middleware.py HTTP相關插件實現;
/ceilometer/notification.py 通過oslo-messaging框架,監聽compute/image/network/heat/cinder等服務的隊列,來獲取相關的通知信息;
/ceilometer/notifier.py 根據不同的插件實現Instance/Image/Network/Volume/HTTPRequest中的具體方法process_notification,用來從通知中獲取監控項的採樣數據信息;
/ceilometer/nova_client.py nova客戶端;
/ceilometer/pipeline.py pipeline實現;
/ceilometer/plugin.py 插件實現基類;
/ceilometer/sample.py 根據已知的採樣數據形成Sample格式;
/ceilometer/service.py 服務實現相關;
/ceilometer/utils.py 若干通用工具;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章