探索 OpenStack 之:计量模块 Ceilometer 介绍及优化

0. 背景

0.1 为什么要有 Ceilometer?

通常云,特别是公有云在计费方面有三个层次:

  • 计量 (Metering): 收集资源的使用数据,其数据信息主要包括:使用对象(what), 使用者(who), 使用时间(when)和 用量(how much)。
  • 计费 (Rating):将资源使用数据按照商务规则转化为可计费项目并计算费用
  • 结算 (Billing):收钱开票

Ceilometer 的目标是 计量 Metering 方面,为上层的计费、结算或者监控应用提供统一的资源使用数据收集功能。

"To provide an infrastructure to collect any information needed within all OpenStack projects so that rating engines could use this single point to transform events into bill items, which we tagged “metering“."

0.2 历史

  • 项目开始于2012年四五月份,由 Julien Danjou, Dreamhost 和 Canonical等发起。
  • 2012年的10月份(Folsom版本),Ceilometer发布了它的v1.0版本,在 第一个版本中,Ceilometer主要实现了对一些重要数据的计量,包括Compute, Network, Memory, CPU, Image, Volume等,并且提供了REST API。
  • 2013年2月,Ceilometer完成了由Incubation到Integrated的转变,这意味着Ceilometer将作为OpenStack 发行版的一部分而发布。
  • Grizzly 中,Ceilometer添加了对 Swift 的支持,增加了SQLAlchemy作为Storage Backend,开发了Multi Publisher, 并且发布了V2版本的API。
  • Havana 中,Ceilometer主要增加了 HBase 作为Storage Backend,Alarm功能也基本完成, 并且增加了UDP Publisher 作为取代RPC发送消息的第二选择,更加高效。还增加了DB2作为Storage Backend.
  • IceHouse 中,主要是分离collector,增加vmware vcenter server支持等。参考链接
  • Juno 中,主要是进行优化(还之前留下的技术债),以及添加Temptest。参考链接。

 1. 概念 

Ceilometer 的主要概念包括:

  • Meter:计量项
  • Sample:某Resource 某时刻某 Meter 的值
  • Statistics:某区间 Samples 的聚合值
  • Alarm:某区间 Statistics 满足给定条件后发出的告警 

1.1 Meter

资源使用的某个计量项,它的属性包括:名称(name)、单位 (unit)、类型 (cumulative:累计值,delta:变化值、gauge:离散或者波动值)以及对应的资源属性等。

(1)在 这里 可以看到所有的 Ceilometer meter 列表和说明。

(2)使用CLI “ceilometer meter-list” 来获取所有的meters。例如:

s1@controller:~$ ceilometer meter-list
+---------------------+------------+----------+--------------------------------------+----------------------------------+----------------------------------+
| Name                | Type       | Unit     | Resource ID                                                 | User ID                                                | Project ID                       |
+---------------------+------------+----------+--------------------------------------+----------------------------------+----------------------------------+
| cpu                 | cumulative | ns       | 440e4e2c-f255-43b3-8150-c6bc6b061ef7   | 1dc0db32a936496ebfc50be54924a7cc | fa2046aaead44a698de8268f94759fc1 |
| cpu_util            | gauge      | %        | 440e4e2c-f255-43b3-8150-c6bc6b061ef7   | 1dc0db32a936496ebfc50be54924a7cc | fa2046aaead44a698de8268f94759fc1 |
| cpu_util            | gauge      | %        | 49618cae-dd28-41a0-ae97-e98899d717eb | 8f4f734443674afcbbb57b9909d5a07f  | d6feddb5279a42f4854b93a729470448 |
| image               | gauge      | image   | 1e7b0a5a-7b78-4673-8d56-3abff7b491ae  | None                                                    | fa2046aaead44a698de8268f94759fc1 |

tips:
(a)meter 列表结果和被计量对象关联。该CLI只列出的当前存在的计量对象的meter 列表。
(b)meter 列表结果和 samples 关联。没有 samples 的meter 不出现在列表中。 

1.2 Sample

某时刻某个 resource 的某个 meter 的值。Sample 的收集有区间概念,即收集数据的时间间隔。它的属性出了meter属性外,还有 timestampe(采样时间)和 Volume (采样值)。

s1@controller:~$ ceilometer sample-list -m cpu_util
+--------------------------------------+----------+-------+---------------+------+---------------------+
| Resource ID                                                | Name     | Type   | Volume              | Unit | Timestamp |
+--------------------------------------+----------+-------+---------------+------+---------------------+

| 631507ed-598c-4e6d-8582-9fd7490e7805 | cpu_util | gauge | 22.5263157895 | % | 2015-03-29T13:22:10 |
| 49618cae-dd28-41a0-ae97-e98899d717eb | cpu_util | gauge | 0.0                     | % | 2015-03-29T13:22:10 |
| 631507ed-598c-4e6d-8582-9fd7490e7805 | cpu_util | gauge | 21.85                 | % | 2015-03-29T13:21:51 |

1.3 Statistics

一个时间段(Period)内的 samples 聚合值,包括计数(Count)、最大(Max)、最小(Min)、平均 (Avg)、求和(Sum)等。例如:
 
s1@controller:~$ ceilometer statistics -m cpu -p 10000000
+------------+---------------------+---------------------+-----+-----+-----+-----+-------+----------+---------------------+---------------------+
| Period      | Period Start                 | Period End                | Max | Min | Avg | Sum | Count | Duration | Duration Start      | Duration End        |
+------------+---------------------+---------------------+-----+-----+-----+-----+-------+----------+---------------------+---------------------+
| 10000000 | 2015-03-29T05:56:38 | 2046-12-05T07:43:18 | 0.0 | 0.0 | 0.0 | 0.0 | 17    | 11273.0  | 2015-03-29T05:56:38 | 2015-03-29T09:04:31 |
+------------+---------------------+---------------------+-----+-----+-----+-----+-------+----------+---------------------+---------------------+
 这里的Period表示当前该查询的区间,使用 -p 参数指定;Duration 表示 samples 的区间。

1.4 Alarm:告警

在 Havana 版本中引入。参考文档

1.4.1 类型

Alarm 包括 threshold alarm (阈值告警)和 combination (组合告警)两种类型。

  • Threshold alarm 根据监控指标的阈值去判断alarm的状态,它只是针对某一个监控指标建立alarm。它包括几个要素:
    • 一个静态阈值和比较方法 (static threshold value & comparison operator
    • 指定的 meter statistic (against which a selected meter statistic is compared
    • 比较的时间窗 (over an evaluation window of configurable length into the recent past.)
  • Combination alarm 根据多个alarm的状态来判断自己的状态的,多个alarm之间是or/and的关系,这相当于是对多个监控指标建立了一个alarm。比如
$ ceilometer alarm-combination-create --name meta \
  --alarm_ids ALARM_ID1 \
  --alarm_ids ALARM_ID2 \
  --operator or \
  --alarm-action 'http://example.org/notify' 
1.4.2 CLI

Ceilometer Alarm CLI 支持一下Alarm的操作:

  • create:[POST ] /alarms
  • list: [GET ] /alarms
  • get:[GET ] /alarms/<alarm>
  • update:[PUT ] /alarms/<alarm>
  • delete:[DELETE] /alarms/<alarm>
  • histroy:GET /v2/alarms/{alarm_id}/history

使用 CLI 创建一个名为 "cpu_high" 的 Threshold Alarm “当连续 3 个 10 分钟内 某 instance 的 cpu_util 值超过70 的时候产告警,并其内容被写入日志文件”:

ceilometer alarm-threshold-create --name cpu_high --description 'instance running hot'  --meter-name cpu_util  --threshold 70.0 --comparison-operator gt  --statistic avg --period 600 --evaluation-periods 3 --alarm-action 'log://' --query resource_id=INSTANCE_ID
  • name: 告警名称
  • meter-name:meter 名称
  • threshold: 阈值
  • comparison_operator: 这个参数确定了怎么和阈值进行比较,有6个可选:lt, le, eq, ne, ge, gt,默认是eq
  • statistic: 这个参数确定了使用什么数据去和 threshold 比较,有5种可选:max, min, avg, sum, count,默认是avg
  • period: 这个参数其实有两个作用,一个是确定了获取该监控指标的监控数据的时间范围,和下面的 evaluation_periods 配合使用,另外一个作用就是它确定了两个点之间的时间间隔,默认是60s
  • evaluation_periods: 表示连续的监控间隔数目。和 period 参数相乘,可以确定获取监控数据的时间范围,默认是1。
  • alarm-action:告警产生后的反应。
  • query: 该参数一般用于过滤到监控指标下的某个资源,默认是[]
1.4.3 Alarm 的状态
  • ALARM (告警状态):

      {"current": "alarm", "alarm_id": "742873f0-97f0-4d99-87da-b5f7c7829b7f", "reason": "Remaining as alarm due to 1 samples outside threshold, most recent: 0.138333333333", "previous": "alarm"}

  • OK (数据充足,未告警):

      {"current": "ok", "alarm_id": "742873f0-97f0-4d99-87da-b5f7c7829b7f", "reason": "Remaining as ok due to 1 samples inside threshold, most recent: 0.138333333333", "previous": "ok"}

  • Insufficient Data (默认状态 - 数据不足):

      {"current": "insufficient data", "alarm_id": "742873f0-97f0-4d99-87da-b5f7c7829b7f", "reason": "1 datapoints are unknown", "previous": "ok"}

1.4.4 Alarm Action

使用Ceilometer alarm-threshold/combination-create CLI 的如下属性来为不同状态的下的 Alarm 定义不同的 Action:

  • --ok-action 
  • --alarm-action 
  • --insufficient-data-action 

Ceilometer 支持两种Action:

  • 'log://':Alarm 被写入 Log 文件
  • Webhook URL: 这是一个 HTTP(S) endpoint 的URL,例如 'http://130.56.250.199:8080/alarm/instances_TOO_MANY'。Alarm 的内容会以 JSON 的格式被 POST 到该URL 中。

参考:http://blog.csdn.net/hackerain/article/details/38172941

2. Ceilometer 的数据处理

Ceilometer 的功能就是对上面各种概念的对象的处理:

 

功能名称 功能描述 提供功能Ceilometer 模块
Collect Meters 数据收集

ceilometer-agent-compute

ceilometer-agent-central

ceilometer-agent-notification

ceilometer-collector

Transform Meters 数据转换  
Publish Meters 数据发布
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值