一:簡介
一、背景
1. 為什么要有Ceilometer
1. 通常雲的計算層次
1. 計量 (Metering): 收集資源的使用數據,其數據信息主要包括:使用對象(what), 使用者(who), 使用時間(when)和 用量(how much)。
2. 計費 (Rating):將資源使用數據按照商務規則轉化為可計費項目並計算費用。
3. 結算 (Billing):收錢開票
2. Ceilometer 的目標是計量(Metering) 方面,為上層的計費、結算或者監控應用提供統一的資源使用數據收集功能。
2. 歷史
1. 項目始於2012年四五月份,10月份發布第一個版本,實現對一些重要數據的計量,包括Compute, Network, Memory, CPU, Image, Volume等,並且提供了REST API。
2. 2013年作為OpenStack發行版的計量計費功能的項目,后來逐步發展增加了部分監控采集和告警等功能。
3. 但是由於種種原因,Ceilometer項目在Openstack中已經處於一種沒落的狀態,基本沒有什么新的特性開發了,原本該項目的PTL也另起爐灶開始在做Gnocchi項目(ceilometer的后端存儲系統)。
4. 雖然該項目已經沒有前幾年活躍,但是還是在很多公有雲場景中有比較多的應用,而生產環境中,可能很多公司還用的是M、N版本。
二、概念
1. Meter
1. 概念:資源使用的某些測量值(計量項,監控項),如內存占用、網絡IO、磁盤IO等。
2. 屬性:名稱(name)、單位 (unit)、類型 (cumulative:累計值;delta:變化值;gauge:離散或者波動值)以及對應的資源屬性等。
2. Sample
1. 概念:每個采集時間點上meter對應的值(某時刻某個 resource 的某個 meter 的值),收集數據具有時間間隔。
2. 屬性:測量值(meter)、采樣時間(timestampe)和采樣值(Volume)。
3. Statistics:某個周期內(Period)的Samples聚合值,包括計數(Count)、最大(Max)、最小(Min)、平均 (Avg)、求和(Sum)等
4. Resource:被監控的資源對象,如虛擬機、磁盤等
5. Alarm
1. 概念:告警機制,可以通過閾值或者組合條件告警,並設置告警時觸發的action,但是相對ceilometer是獨立的一塊,只是放在了ceilometer的代碼樹里面。
2. 類型
1. 閾值告警(Threshold Alarm):根據一個監控項的閾值去判斷Alarm的狀態,它包括幾個要素:
1. 一個靜態閾值和比較方法 (a static threshold value & comparison operator)
2. 指定的 meter statistic (against which a selected meter statistic is compared)
3. 比較的時間窗 (over an evaluation window of configurable length into the recent past.)
2. 組合告警(Combination Alarm):根據多個監控項建立一個Alarm,多個alarm之間是or/and的關系。
3. 屬性
1. name: 告警名稱
2. meter-name:meter 名稱
3. threshold: 閾值
4. comparison_operator: 比較方式,有6個可選:lt, le, eq, ne, ge, gt,默認是eq
5. statistic: 比較方式,有5種可選:max, min, avg, sum, count,默認是avg
6. period: 獲取該監控指標的監控數據的時間周期
7. evaluation_periods:統計次數
8. alarm-action:告警產生后的動作
4. Action(動作)
1. 'log://':Alarm 被寫入 Log 文件
2. Webhook URL: 這是一個 HTTP(S) endpoint 的URL,例如 'http://130.56.250.199:8080/alarm/instances_TOO_MANY'。Alarm 的內容會以 JSON 的格式被 POST 到該URL 中。
三、組件
1. 控制節點
1. Central Agent: 調用OpenStack其它組件api采集指標
2. Notification Agent:接收其它組件主動上報的通知消息
3. Collector:基於AMQP接收消息,並記錄到DataStore
4. API:運行在管理節點,提供接口訪問Data Store
2. 計算節點
1. Compute Agent:采集本節點性能指標
二:數據處理
一、數據收集
1. Poller方式
1. Compute agent (ceilometer-agent-compute)運行在每個 compute 節點上,以輪詢的方式通過調用 Image 的 driver 來獲取資源使用統計數據。
2. Central agent (ceilometer-agent-central)運行在 management server 上,以輪詢的方式通過調用 OpenStack 各個組件(包括 Nova、Cinder、Glance、Neutron、Swift 等)的 API 收集資源使用統計數據。
2. Notificaiton方式
二、數據處理
1. Pipeline(處理器)
1. Meters 數據的處理使用 Pipeline 的方式,即Metes 數據依次經過(零個或者多個) Transformer 和 (一個或者多個)Publisher 處理,最后達到(一個或者多個)Receiver。其中Recivers 包括 Ceilometer Collector 和 外部系統。
2. Ceilometer 根據配置文件 /etc/ceilometer/pipeline.yaml 來配置 meters 所使用的 transformers 和 publishers。以 cpu meter 為例:
1 sources: A source is a producer of samples 2 ...... 3 - name: cpu_source 4 interval: 600 ## Poller 獲取 cpu samples 的間隔為 10 分鍾 5 meters: 6 - "cpu" 7 sinks: 8 - cpu_sink 9 10 ...... 11 sinks: A sink on the other hand is a chain of handlers of samples 12 ...... 13 - name: cpu_sink 14 transformers: ## 轉換器 15 - name: "rate_of_change" 16 parameters: 17 target: 18 name: "cpu_util" 19 unit: "%" 20 type: "gauge" 21 scale: "100.0 / (10**9 * (resource_metadata.cpu_number or1))" 22 publishers: ## 分發器 23 - notifier://
2. Transformer (轉換器)
1. unit_conversion:單位轉換器,比如溫度從°F 轉換成°C
2. rate_of_change::計算方式轉換器,比如根據一定的計算規則來轉換一個sample
3. accumulator:累計器,如下圖所示
3. Publisher(分發器)
三、數據保存
1. Ceilometer Collector 從 AMQP 接收到數據后,會原封不動地通過一個或者多個分發器(dispatchers)將它保存到指定位置。目前它支持的分發器:
1. 文件分發器:保存到文件 - 添加配置項dispatcher = file 和 [dispatcher_file] 部分的配置項
2. HTTP 分發器:保存到外部的 HTTP target - 添加配置項 dispatcher = http
3. 數據庫分發器:保存到數據庫 - 添加配置項 dispatcher = database。
2. Ceilometer 支持同時配置多個分發器,將數據保存到多個目的位置。比如在 ceilometer.conf 中做如下配置使得同時使用 file 和 database dispatcher:
1 [DEFAULT] 2 dispatcher = database 3 dispatcher = file 4 5 [dispatcher_file] 6 backup_count = 5 7 file_path = /var/log/ceilometer/ceilometer-samples 8 max_bytes = 100000
四、數據訪問
1. 外部系統通過 ceilometer-api 模塊提供的 Ceilometer REST API 來訪問保存在數據庫中的數據。API 有 V1 和 V2 兩個版本,現在使用的是 V2.
五、告警
1. 架構
1. ceilometer-alarm-evaluator 使用 Ceilometer REST API 獲取 statistics 數據
2. ceilometer-alarm-evaluator 生成 alarm 數據, 並通過 AMQP 發給 ceilometer-alarm-notifer
3. ceilometer-alarm-notifer 會通過指定方式把 alarm 發出去。
2. Heat 和 Ceilometer 通過 Ceilometer Alarm 進行交互來實現 Instance auto-scaling
三:架構
一、核心架構
二、京東對 Ceilometer 的優化 (摘自京東架構師在2015年初OpenStack meetup 上的材料)
四:常用操作