Ceilometer原理及介紹
本部落格所有文章採用的授權方式為 自由轉載-非商用-非衍生-保持署名 ,轉載請務必註明出處,謝謝。
宣告:
本部落格歡迎轉發,但請註明出處,保留原作者資訊
部落格地址:孟阿龍的部落格
所有內容為本人學習、研究、總結。如有雷同,實屬榮幸
注: 本文基於當前Openstack的Q版本進行分析
1. 背景
ceilometer專案是openstack中用來做計量計費功能的一個元件,後來又逐步發展增加了部分監控採集、告警的功能。由於種種原因,ceilometer專案在Openstack中已經處於一種沒落的狀態,基本沒有什麼新的特性開發了,原本該專案的PTL也另起爐灶開始在做Gnocchi專案(ceilometer的後端儲存系統)。雖然該專案已經沒有前幾年活躍,但是還是在很多公有云場景中有比較多的應用,而生產環境中,可能很多公司還用的是M、N版本。
2. 基本概念
- meter:
針對一個資源的某些測量值,比如,一個虛擬機器可以有多個meters:虛擬機器在一段時間內cpu的使用時間、磁碟的請求次數等。在ceilometer中針對這些meter定義了三種類型:- Cumulative(累積型): 隨著時間會不斷增長(eg. disk I/O)
- Gauge(測量型):離散型的值(eg. floating IPs)和浮動的值(eg. swift物件的數量)
- Delta(變化量):一段時間內某個採集值的變化量(eg. 頻寬變化量)
- sample:
針對一個特定的meter的具體資料結構 - event:
在某個特定時間,發生的一個動作,比如:19:09:08 建立了一個虛擬機器 - resource:
資源,比如instance(虛擬機器)、disk(磁碟)都是資源
3. High-Level 架構
ceilo-arch.png
如上,是當前Ceilometer的一個全域性概覽邏輯圖.
以上ceilometer的每一個服務都是基於可橫向擴充套件來設計的。實際生產環境中,可以根據系統的負載,決定來增加例項或者增加單個例項的worker數。當前Ceilometer主要提供兩個核心服務:
- polling agent:輪詢agent,是一個deamon服務,通過週期性呼叫Openstack內部服務的介面或者一些外部介面獲取指定resource的meter資料
- notification agent:一個deamon服務,通過監聽訊息佇列獲取相關資料,將其轉換為event和sample,並根據pipeline中定義的方法將資料傳送出去
這和以前的版本相比,簡化了不少,以前ceilometer包含了(polling-agent,notification-agent,collector,ceilometer-api)
通過Ceilometer收集到的資料可以被髮送到不同的後端。Gnocchi是用來提供對捕獲到的時間序列的測量資料的儲存和查詢。Gnocchi未來的趨勢是取代當前現存的metering資料儲存介面(當前儲存在mongodb、mysql等儲存後端)。Aodh是一個告警服務,在滿足使用者設定的告警條件時,可以傳送告警資訊,其後端可以對接不同的資料庫。Panko是用來獲取系統中的各類事件並將其儲存到對應後端資料庫。
4. 資料獲取的過程
4.1 資料採集
1-agents.png
上圖展示了ceilometer-agent怎樣從不同的資料來源獲取到資料
Ceilometer共有兩種方法來收集資料:
- Notification agent,從notification bus上獲取訊息,將其轉換為ceilometer的sample或者event資料
- Polling agent,週期性呼叫系統中的一些API或者外部工具來獲取資料。輪詢服務可能會對API服務帶來較大的影響,因此對應的API服務需要針對這種輪詢機制做一些優化。
以上第一種方法是ceilometer-agent-notification提供的,他可以監控訊息佇列上的資訊。第二種方法是通過polling-agent實現,通過配置可以實現輪詢本地虛擬化層或者遠端API來獲取資料。
4.2 notification agent監聽資料
2-1-collection-notification.png
notification-agent可以消費來自不同服務上報的訊息資料。
這個系統的核心是notification-agent這個deamon服務,他可以監聽openstack元件(比如nova、glance/cinder/neutron/等)傳送到訊息佇列上的資料,以及ceilometer內部發送過來資料
notification-agent載入ceilometer.notification這個namespace下的一個或者多個外掛.每個外掛都可以監聽任何topic,預設的都會監聽notifications.info, notifications.sample,notifications.error.監聽程序從配置的topic抓取下來訊息之後,將其分發到合適的外掛處理成event和sample。
基於Sample的外掛提供了一個方法來獲取他們所關注的事件型別,然後據此呼叫對應的回撥方法來處理訊息。註冊的毀掉方法通過notification的pipeline來配置生效與否。通過外掛配置的事件型別對新進來的訊息進行過濾,因此回撥介面最終只會收到他們所關心的資料。
4.3 Polling Agent輪詢獲取資料
2-2-collection-poll.png
Polling-agent通過主動呼叫service介面查詢來獲取資料。
部署在計算節點上的polling-agent用來輪詢計算資源的資料(這樣agent可以更有效的和本地虛擬化層互動),也被稱為compute-agent。通過服務API輪詢查詢非計算資源相關資料的agent部署在控制節點上,也被稱為central-agent。在all-in-one環境中,一個agent也支援同時提供以上兩種角色。相反的,也可以通過部署多個agent例項來分擔系統負載。Polling-agent程序可以載入ceilometer.poll.compute,ceilometer.poll.central,ceilometer.poll.ipmi這三個namespace中配置的外掛。
4.4 資料處理
4.4.1 pipeline manager
3-Pipeline.png
以上元件實現ceiloemter的pipeline。
ceilometer提供抓取資料的agent,控制資料、通過多重pipeline將資料傳送到多種後端的能力。這種功能通過notification-agent來實現。
4.4.2 資料傳送
5-multi-publish.png
上圖展示了一個sample資料怎樣被髮送到多個不同後端
當前處理過的資料可以被髮送到8種不同的後端
- gnocchi, 傳送samples/event資料到Gnocchi-api
- notifier, 傳送資料到訊息佇列,最終可以被內部系統消費
- udp, 通過UDP包將資料傳送出去
- http, 傳送資料到REST介面
- file, 傳送資料到指定的檔案
- zaqar, 一個用於web和移動開發者的多租戶雲訊息和通知服務
- https, 通過SSL加密的REST介面HTTP服務
- prometheus, 傳送samples資料到 Prometheus Pushgateway
5. 儲存/訪問資料
Ceilometer是設計用來單純的生產和序列化雲資料。Ceilometer生產的資料可以被髮送到通過pipeline-publishers中定義 的多重後端。推薦的方法是將資料傳送到Gnocchi用於有效的時間序列儲存以及資源生命週期的追蹤。
參考:
https://docs.openstack.org/ceilometer/latest/contributor/architecture.html
以上我們可以看出,ceilometer關鍵的元件包含:ceilometer-agent-compute,ceilometer-agent-notification,外掛採集資料這幾個核心,後邊會分別對其進行分析:
1. ceilometer-agent-compute原理和程式碼分析(已完成)
2. ceilometer外掛採集原理和程式碼分析(已完成)
3. ceilometer-agent-notification原理和程式碼分析(待開展)