OpenStack的Ceilometer組件詳解


一:簡介

    一、背景

       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. 一個靜態閾值和比較方法 (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 上的材料)

          

 

四:常用操作

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM