Ceilometer原理及介紹


本博客所有文章采用的授權(quán)方式為 自由轉(zhuǎn)載-非商用-非衍生-保持署名 ,轉(zhuǎn)載請(qǐng)務(wù)必注明出處,謝謝。

聲明:
本博客歡迎轉(zhuǎn)發(fā),但請(qǐng)注明出處,保留原作者信息
博客地址:孟阿龍的博客
所有內(nèi)容為本人學(xué)習(xí)、研究、總結(jié)。如有雷同,實(shí)屬榮幸


注: 本文基于當(dāng)前Openstack的Q版本進(jìn)行分析

1. 背景

ceilometer項(xiàng)目是openstack中用來做計(jì)量計(jì)費(fèi)功能的一個(gè)組件,后來又逐步發(fā)展增加了部分監(jiān)控采集、告警的功能。由于種種原因,ceilometer項(xiàng)目在Openstack中已經(jīng)處于一種沒落的狀態(tài),基本沒有什么新的特性開發(fā)了,原本該項(xiàng)目的PTL也另起爐灶開始在做Gnocchi項(xiàng)目(ceilometer的后端存儲(chǔ)系統(tǒng))。雖然該項(xiàng)目已經(jīng)沒有前幾年活躍,但是還是在很多公有云場景中有比較多的應(yīng)用,而生產(chǎn)環(huán)境中,可能很多公司還用的是M、N版本。

2. 基本概念

  • meter:
    針對(duì)一個(gè)資源的某些測量值,比如,一個(gè)虛擬機(jī)可以有多個(gè)meters:虛擬機(jī)在一段時(shí)間內(nèi)cpu的使用時(shí)間、磁盤的請(qǐng)求次數(shù)等。在ceilometer中針對(duì)這些meter定義了三種類型:
    • Cumulative(累積型): 隨著時(shí)間會(huì)不斷增長(eg. disk I/O)
    • Gauge(測量型):離散型的值(eg. floating IPs)和浮動(dòng)的值(eg. swift對(duì)象的數(shù)量)
    • Delta(變化量):一段時(shí)間內(nèi)某個(gè)采集值的變化量(eg. 帶寬變化量)
  • sample:
    針對(duì)一個(gè)特定的meter的具體數(shù)據(jù)結(jié)構(gòu)
  • event:
    在某個(gè)特定時(shí)間,發(fā)生的一個(gè)動(dòng)作,比如:19:09:08 創(chuàng)建了一個(gè)虛擬機(jī)
  • resource:
    資源,比如instance(虛擬機(jī))、disk(磁盤)都是資源

3. High-Level 架構(gòu)

ceilo-arch.png

如上,是當(dāng)前Ceilometer的一個(gè)全局概覽邏輯圖.
以上ceilometer的每一個(gè)服務(wù)都是基于可橫向擴(kuò)展來設(shè)計(jì)的。實(shí)際生產(chǎn)環(huán)境中,可以根據(jù)系統(tǒng)的負(fù)載,決定來增加實(shí)例或者增加單個(gè)實(shí)例的worker數(shù)。當(dāng)前Ceilometer主要提供兩個(gè)核心服務(wù):

  1. polling agent:輪詢agent,是一個(gè)deamon服務(wù),通過周期性調(diào)用Openstack內(nèi)部服務(wù)的接口或者一些外部接口獲取指定resource的meter數(shù)據(jù)
  2. notification agent:一個(gè)deamon服務(wù),通過監(jiān)聽消息隊(duì)列獲取相關(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是用來提供對(duì)捕獲到的時(shí)間序列的測量數(shù)據(jù)的存儲(chǔ)和查詢。Gnocchi未來的趨勢是取代當(dāng)前現(xiàn)存的metering數(shù)據(jù)存儲(chǔ)接口(當(dāng)前存儲(chǔ)在mongodb、mysql等存儲(chǔ)后端)。Aodh是一個(gè)告警服務(wù),在滿足用戶設(shè)置的告警條件時(shí),可以發(fā)送告警信息,其后端可以對(duì)接不同的數(shù)據(jù)庫。Panko是用來獲取系統(tǒng)中的各類事件并將其存儲(chǔ)到對(duì)應(yīng)后端數(shù)據(jù)庫。

4. 數(shù)據(jù)獲取的過程

4.1 數(shù)據(jù)采集

1-agents.png

上圖展示了ceilometer-agent怎樣從不同的數(shù)據(jù)源獲取到數(shù)據(jù)
Ceilometer共有兩種方法來收集數(shù)據(jù):

  1. Notification agent,從notification bus上獲取消息,將其轉(zhuǎn)換為ceilometer的sample或者event數(shù)據(jù)
  2. Polling agent,周期性調(diào)用系統(tǒng)中的一些API或者外部工具來獲取數(shù)據(jù)。輪詢服務(wù)可能會(huì)對(duì)API服務(wù)帶來較大的影響,因此對(duì)應(yīng)的API服務(wù)需要針對(duì)這種輪詢機(jī)制做一些優(yōu)化。
    以上第一種方法是ceilometer-agent-notification提供的,他可以監(jiān)控消息隊(duì)列上的信息。第二種方法是通過polling-agent實(shí)現(xiàn),通過配置可以實(shí)現(xiàn)輪詢本地虛擬化層或者遠(yuǎn)程API來獲取數(shù)據(jù)。

4.2 notification agent監(jiān)聽數(shù)據(jù)

2-1-collection-notification.png

notification-agent可以消費(fèi)來自不同服務(wù)上報(bào)的消息數(shù)據(jù)。
這個(gè)系統(tǒng)的核心是notification-agent這個(gè)deamon服務(wù),他可以監(jiān)聽openstack組件(比如nova、glance/cinder/neutron/等)發(fā)送到消息隊(duì)列上的數(shù)據(jù),以及ceilometer內(nèi)部發(fā)送過來數(shù)據(jù)

notification-agent加載ceilometer.notification這個(gè)namespace下的一個(gè)或者多個(gè)插件.每個(gè)插件都可以監(jiān)聽任何topic,默認(rèn)的都會(huì)監(jiān)聽notifications.info, notifications.sample,notifications.error.監(jiān)聽進(jìn)程從配置的topic抓取下來消息之后,將其分發(fā)到合適的插件處理成event和sample。

基于Sample的插件提供了一個(gè)方法來獲取他們所關(guān)注的事件類型,然后據(jù)此調(diào)用對(duì)應(yīng)的回調(diào)方法來處理消息。注冊的毀掉方法通過notification的pipeline來配置生效與否。通過插件配置的事件類型對(duì)新進(jìn)來的消息進(jìn)行過濾,因此回調(diào)接口最終只會(huì)收到他們所關(guān)心的數(shù)據(jù)。

4.3 Polling Agent輪詢獲取數(shù)據(jù)

2-2-collection-poll.png

Polling-agent通過主動(dòng)調(diào)用service接口查詢來獲取數(shù)據(jù)。

部署在計(jì)算節(jié)點(diǎn)上的polling-agent用來輪詢計(jì)算資源的數(shù)據(jù)(這樣agent可以更有效的和本地虛擬化層交互),也被稱為compute-agent。
通過服務(wù)API輪詢查詢非計(jì)算資源相關(guān)數(shù)據(jù)的agent部署在控制節(jié)點(diǎn)上,也被稱為central-agent。在all-in-one環(huán)境中,一個(gè)agent也支持同時(shí)提供以上兩種角色。
相反的,也可以通過部署多個(gè)agent實(shí)例來分擔(dān)系統(tǒng)負(fù)載。Polling-agent進(jìn)程可以加載ceilometer.poll.compute,ceilometer.poll.central,ceilometer.poll.ipmi這三個(gè)namespace中配置的插件。

4.4 數(shù)據(jù)處理

4.4.1 pipeline manager

3-Pipeline.png

以上組件實(shí)現(xiàn)ceiloemter的pipeline。
ceilometer提供抓取數(shù)據(jù)的agent,控制數(shù)據(jù)、通過多重pipeline將數(shù)據(jù)發(fā)送到多種后端的能力。這種功能通過notification-agent來實(shí)現(xiàn)。

4.4.2 數(shù)據(jù)發(fā)送

5-multi-publish.png

上圖展示了一個(gè)sample數(shù)據(jù)怎樣被發(fā)送到多個(gè)不同后端
當(dāng)前處理過的數(shù)據(jù)可以被發(fā)送到8種不同的后端

  1. gnocchi, 發(fā)送samples/event數(shù)據(jù)到Gnocchi-api
  2. notifier, 發(fā)送數(shù)據(jù)到消息隊(duì)列,最終可以被內(nèi)部系統(tǒng)消費(fèi)
  3. udp, 通過UDP包將數(shù)據(jù)發(fā)送出去
  4. http, 發(fā)送數(shù)據(jù)到REST接口
  5. file, 發(fā)送數(shù)據(jù)到指定的文件
  6. zaqar, 一個(gè)用于web和移動(dòng)開發(fā)者的多租戶云消息和通知服務(wù)
  7. https, 通過SSL加密的REST接口HTTP服務(wù)
  8. prometheus, 發(fā)送samples數(shù)據(jù)到 Prometheus Pushgateway

5. 存儲(chǔ)/訪問數(shù)據(jù)

Ceilometer是設(shè)計(jì)用來單純的生產(chǎn)和序列化云數(shù)據(jù)。Ceilometer生產(chǎn)的數(shù)據(jù)可以被發(fā)送到通過pipeline-publishers中定義 的多重后端。推薦的方法是將數(shù)據(jù)發(fā)送到Gnocchi用于有效的時(shí)間序列存儲(chǔ)以及資源生命周期的追蹤。

參考:
https://docs.openstack.org/ceilometer/latest/contributor/architecture.html

以上我們可以看出,ceilometer關(guān)鍵的組件包含:ceilometer-agent-compute,ceilometer-agent-notification,插件采集數(shù)據(jù)這幾個(gè)核心,后邊會(huì)分別對(duì)其進(jìn)行分析:

  1. ceilometer-compute-agent(已完成)
  2. 插件采集數(shù)據(jù)的原理和過程分析(已完成)
  3. ceilometer-agent-notification (待分析)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139
  • Objectives 2012年Ceilometer創(chuàng)建的時(shí)候,目的只是為了提供基礎(chǔ)設(shè)施為OpenStack項(xiàng)目收...
    黑加侖妞閱讀 1,159評(píng)論 0 0
  • 第一章 OpenStack基礎(chǔ) OpenStack管理的資源及提供的服務(wù)OpenStack做為一個(gè)操作系統(tǒng),...
    sgt_tiger閱讀 13,226評(píng)論 4 72
  • 文/燁子 1 從上周四的晚上起,日子突然變得忙碌起來。岳母周四上午因?yàn)樯眢w不適,被送到省中醫(yī)院,診斷結(jié)果為腦梗塞,...
    燁子人生閱讀 1,396評(píng)論 2 3
  • if ()else{} 三目:條件 ?條件成立 : 條件不成立 只有一個(gè)語句 if()語句 if(true) a...
    warmT_閱讀 9,109評(píng)論 0 3

友情鏈接更多精彩內(nèi)容