引入
Event分析:CloudKitty需要加上Event分析能力才能使计费更精确(达到秒级计费)。
背景
CloudKitty介绍
在OpenStack所有组件中,Ceilometer负责收集虚拟资源的详细使用数据,充当Metering的角色。CloudKitty从Ceilometer端获取计量数据,然后根据事先定义好的计费规则对这些使用数据进行Rating,为最终的billing提供数据支撑。
在一个计费周期内,只要从Ceilormeter中查询到资源的计量数据,就认为资源存在,按一个周期计费。
存在问题
对于静态资源(虚拟机实例、镜像、云硬盘等),应根据其生命周期,按照使用时长计费。
例如:在一个计费周期内,云主机在create之前的时间段内应该计费为0,;被resize前后时间段内应该按照不同的单价计费;被delete后应该停止计费;
但是,原生的CloudKitty只对Ceilometer的sample进行分析,这样就导致:
- 虚拟资源的计费周期不能准确与其生存周期对应
- 虚拟资源的状态变化不能及时触发计费策略的变化
- 不支持VM开机状态和关机状态分别应用不同的计费策略(目前我们是在Ceilormeter中将一些状态的资源过滤掉)
解决方法
缩短计费周期 : 尽可能减小计费误差。
Event分析 : 通过event可以知道资源的状态变化,能使计费更精确(达到秒级计费)。
缩短计费周期
优点
- 不需要修改代码,直接修改配置即可。
缺点
- 计费周期不能无线缩短,当计费周期过小会导致无法在一个计费周期内完成对云环境中所有资源的计费。
- 无法达到秒级计费。
Event分析
- 计费策略:
flavor-A(2C4G)为5元每小时,flavor-B(4C8G)为10元每小时。计费周期为1小时1次。
- 场景:
①在某日13时15分10秒用flavor-A创建了一台虚拟机
②13时45分13秒对其做了变更flavor的操作(变更为flavor-B)
③14时10分59秒关机
④14时35分20秒开机
⑤最后在14时49分13秒删除了该虚拟机
对应的,ceilometer端生成的event如下:
①compute.instance.create
②compute.instance.resize
③compute.instance.power_off
④compute.instance.power_on
⑤compute.instance.delete
- 原生CloudKitty生成的计费记录:
Begin | End | Unit | Price (per hour) | Rate |
---|---|---|---|---|
2017-10-25 13:00:00 | 2017-10-25 14:00:00 | instance:flavor-B | 10 | 10 |
2017-10-25 14:00:00 | 2017-10-25 15:00:00 | instance:flavor-B | 10 | 10 |
- 增加event分析支持后的CloudKitty生成的计费记录:
Begin | End | Unit | Price (per hour) | Rate | comment |
---|---|---|---|---|---|
2017-10-25 13:15:10 | 2017-10-25 13:45:13 | instance:flavor-A | 5 | 2.50 | begin: instance.create end: instance.resize |
2017-10-25 13:45:13 | 2017-10-25 14:00:00 | instance:flavor-B | 10 | 2.46 | begin: instance.resize end: period_cutting_event |
2017-10-25 14:00:00 | 2017-10-25 14:10:59 | instance:flavor-B | 10 | 1.83 | begin: period_cutting_event end: instance.power_off |
2017-10-25 14:10:59 | 2017-10-25 14:35:20 | instance:flavor-B | 10 | 0 | begin: instance.power_off end: instance.power_on |
2017-10-25 14:35:20 | 2017-10-25 14:49:13 | instance:flavor-B | 10 | 2.31 | begin: instance.power_on end: instance.delete |
比较改造前后计费记录的变化可知,增加了event分析支持后:
- 计费精度能精确到秒级
- 使针对虚拟资源不同状态应用不同计费策略的处理方式成为可能
优点
- 真正秒级计费。按资源的生存周期精确计费。
- 一些消息需要补全修改。
问题
- 一些事件包含信息不全,需要修改相关服务的事件通知内容
总结
- 对于event分析,社区已经有人提交了Patch,可以用来参考实现我们自己的逻辑。
https://blueprints.launchpad.net/cloudkitty/+spec/rating-for-second-level
https://review.openstack.org/#/c/382127/
- 只是达到了计费结果精确到秒级,不是秒级的实时计费。计费结果还是要到每个计费周期节点后来生成。
References
- 【云社区分享】Cloudkitty – OpenStack计费服务