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 上的材料)

          

四:常用操作

     

原文地址:https://www.cnblogs.com/mh20131118/p/12941855.html