本博客所有文章采用的授權(quán)方式為 自由轉(zhuǎn)載-非商用-非衍生-保持署名 狈惫,轉(zhuǎn)載請務(wù)必注明出處,謝謝仆邓。
聲明:
本博客歡迎轉(zhuǎn)發(fā),但請注明出處廓握,保留原作者信息
博客地址:孟阿龍的博客
所有內(nèi)容為本人學習搭独、研究婴削、總結(jié)。如有雷同牙肝,實屬榮幸
注: 本文基于當前Openstack的Q版本進行分析
1. 背景
ceilometer項目是openstack中用來做計量計費功能的一個組件唉俗,后來又逐步發(fā)展增加了部分監(jiān)控采集、告警的功能配椭。由于種種原因虫溜,ceilometer項目在Openstack中已經(jīng)處于一種沒落的狀態(tài),基本沒有什么新的特性開發(fā)了股缸,原本該項目的PTL也另起爐灶開始在做Gnocchi項目(ceilometer的后端存儲系統(tǒng))衡楞。雖然該項目已經(jīng)沒有前幾年活躍,但是還是在很多公有云場景中有比較多的應(yīng)用敦姻,而生產(chǎn)環(huán)境中瘾境,可能很多公司還用的是M歧杏、N版本。
2. 基本概念
- meter:
針對一個資源的某些測量值迷守,比如犬绒,一個虛擬機可以有多個meters:虛擬機在一段時間內(nèi)cpu的使用時間、磁盤的請求次數(shù)等兑凿。在ceilometer中針對這些meter定義了三種類型:- Cumulative(累積型): 隨著時間會不斷增長(eg. disk I/O)
- Gauge(測量型):離散型的值(eg. floating IPs)和浮動的值(eg. swift對象的數(shù)量)
- Delta(變化量):一段時間內(nèi)某個采集值的變化量(eg. 帶寬變化量)
- sample:
針對一個特定的meter的具體數(shù)據(jù)結(jié)構(gòu) - event:
在某個特定時間凯力,發(fā)生的一個動作,比如:19:09:08 創(chuàng)建了一個虛擬機 - resource:
資源礼华,比如instance(虛擬機)咐鹤、disk(磁盤)都是資源
3. High-Level 架構(gòu)
如上,是當前Ceilometer的一個全局概覽邏輯圖.
以上ceilometer的每一個服務(wù)都是基于可橫向擴展來設(shè)計的卓嫂。實際生產(chǎn)環(huán)境中慷暂,可以根據(jù)系統(tǒng)的負載,決定來增加實例或者增加單個實例的worker數(shù)晨雳。當前Ceilometer主要提供兩個核心服務(wù):
- polling agent:輪詢agent行瑞,是一個deamon服務(wù),通過周期性調(diào)用Openstack內(nèi)部服務(wù)的接口或者一些外部接口獲取指定resource的meter數(shù)據(jù)
- notification agent:一個deamon服務(wù)餐禁,通過監(jiān)聽消息隊列獲取相關(guān)數(shù)據(jù)血久,將其轉(zhuǎn)換為event和sample,并根據(jù)pipeline中定義的方法將數(shù)據(jù)發(fā)送出去
這和以前的版本相比帮非,簡化了不少氧吐,以前ceilometer包含了(polling-agent,notification-agent,collector,ceilometer-api)
通過Ceilometer收集到的數(shù)據(jù)可以被發(fā)送到不同的后端末盔。Gnocchi是用來提供對捕獲到的時間序列的測量數(shù)據(jù)的存儲和查詢筑舅。Gnocchi未來的趨勢是取代當前現(xiàn)存的metering數(shù)據(jù)存儲接口(當前存儲在mongodb、mysql等存儲后端)陨舱。Aodh是一個告警服務(wù)翠拣,在滿足用戶設(shè)置的告警條件時,可以發(fā)送告警信息游盲,其后端可以對接不同的數(shù)據(jù)庫误墓。Panko是用來獲取系統(tǒng)中的各類事件并將其存儲到對應(yīng)后端數(shù)據(jù)庫。
4. 數(shù)據(jù)獲取的過程
4.1 數(shù)據(jù)采集
上圖展示了ceilometer-agent怎樣從不同的數(shù)據(jù)源獲取到數(shù)據(jù)
Ceilometer共有兩種方法來收集數(shù)據(jù):
- Notification agent益缎,從notification bus上獲取消息谜慌,將其轉(zhuǎn)換為ceilometer的sample或者event數(shù)據(jù)
- Polling agent,周期性調(diào)用系統(tǒng)中的一些API或者外部工具來獲取數(shù)據(jù)莺奔。輪詢服務(wù)可能會對API服務(wù)帶來較大的影響欣范,因此對應(yīng)的API服務(wù)需要針對這種輪詢機制做一些優(yōu)化。
以上第一種方法是ceilometer-agent-notification提供的,他可以監(jiān)控消息隊列上的信息恼琼。第二種方法是通過polling-agent實現(xiàn)杖刷,通過配置可以實現(xiàn)輪詢本地虛擬化層或者遠程API來獲取數(shù)據(jù)。
4.2 notification agent監(jiān)聽數(shù)據(jù)
notification-agent可以消費來自不同服務(wù)上報的消息數(shù)據(jù)驳癌。
這個系統(tǒng)的核心是notification-agent這個deamon服務(wù)滑燃,他可以監(jiān)聽openstack組件(比如nova、glance/cinder/neutron/等)發(fā)送到消息隊列上的數(shù)據(jù)颓鲜,以及ceilometer內(nèi)部發(fā)送過來數(shù)據(jù)
notification-agent加載ceilometer.notification這個namespace下的一個或者多個插件.每個插件都可以監(jiān)聽任何topic表窘,默認的都會監(jiān)聽notifications.info, notifications.sample,notifications.error.監(jiān)聽進程從配置的topic抓取下來消息之后,將其分發(fā)到合適的插件處理成event和sample甜滨。
基于Sample的插件提供了一個方法來獲取他們所關(guān)注的事件類型乐严,然后據(jù)此調(diào)用對應(yīng)的回調(diào)方法來處理消息。注冊的毀掉方法通過notification的pipeline來配置生效與否衣摩。通過插件配置的事件類型對新進來的消息進行過濾昂验,因此回調(diào)接口最終只會收到他們所關(guān)心的數(shù)據(jù)。
4.3 Polling Agent輪詢獲取數(shù)據(jù)
Polling-agent通過主動調(diào)用service接口查詢來獲取數(shù)據(jù)艾扮。
部署在計算節(jié)點上的polling-agent用來輪詢計算資源的數(shù)據(jù)(這樣agent可以更有效的和本地虛擬化層交互)既琴,也被稱為compute-agent。
通過服務(wù)API輪詢查詢非計算資源相關(guān)數(shù)據(jù)的agent部署在控制節(jié)點上泡嘴,也被稱為central-agent甫恩。在all-in-one環(huán)境中,一個agent也支持同時提供以上兩種角色酌予。
相反的磺箕,也可以通過部署多個agent實例來分擔系統(tǒng)負載。Polling-agent進程可以加載ceilometer.poll.compute,ceilometer.poll.central,ceilometer.poll.ipmi這三個namespace中配置的插件抛虫。
4.4 數(shù)據(jù)處理
4.4.1 pipeline manager
以上組件實現(xiàn)ceiloemter的pipeline松靡。
ceilometer提供抓取數(shù)據(jù)的agent,控制數(shù)據(jù)建椰、通過多重pipeline將數(shù)據(jù)發(fā)送到多種后端的能力雕欺。這種功能通過notification-agent來實現(xiàn)。
4.4.2 數(shù)據(jù)發(fā)送
上圖展示了一個sample數(shù)據(jù)怎樣被發(fā)送到多個不同后端
當前處理過的數(shù)據(jù)可以被發(fā)送到8種不同的后端
- gnocchi, 發(fā)送samples/event數(shù)據(jù)到Gnocchi-api
- notifier, 發(fā)送數(shù)據(jù)到消息隊列广凸,最終可以被內(nèi)部系統(tǒng)消費
- udp, 通過UDP包將數(shù)據(jù)發(fā)送出去
- http, 發(fā)送數(shù)據(jù)到REST接口
- file, 發(fā)送數(shù)據(jù)到指定的文件
- zaqar, 一個用于web和移動開發(fā)者的多租戶云消息和通知服務(wù)
- https, 通過SSL加密的REST接口HTTP服務(wù)
- prometheus, 發(fā)送samples數(shù)據(jù)到 Prometheus Pushgateway
5. 存儲/訪問數(shù)據(jù)
Ceilometer是設(shè)計用來單純的生產(chǎn)和序列化云數(shù)據(jù)阅茶。Ceilometer生產(chǎn)的數(shù)據(jù)可以被發(fā)送到通過pipeline-publishers中定義 的多重后端蛛枚。推薦的方法是將數(shù)據(jù)發(fā)送到Gnocchi用于有效的時間序列存儲以及資源生命周期的追蹤谅海。
參考:
https://docs.openstack.org/ceilometer/latest/contributor/architecture.html
以上我們可以看出,ceilometer關(guān)鍵的組件包含:ceilometer-agent-compute蹦浦,ceilometer-agent-notification扭吁,插件采集數(shù)據(jù)這幾個核心,后邊會分別對其進行分析:
- ceilometer-compute-agent(已完成)
- 插件采集數(shù)據(jù)的原理和過程分析(已完成)
- ceilometer-agent-notification (待分析)