EfficientMetering/APIProposalv1
Ceilometer 外部 API
本页面定义了 Ceilometer 将为计费或评级引擎等其他系统提供的查询外部 API。
/!\ 本页为设计规范。有效的实现描述在 http://ceilometer.readthedocs.org/en/latest/api.html
设计
定义 API 时使用了以下标准
- 数据库只能通过 REST API 查询(即数据库模式不是受支持的 API,并且可以从一个版本到另一个版本以非向后兼容的方式更改)。
- 请求必须经过身份验证(与 Keystone 分开,或仅链接到会计类型的帐户)
- API 服务器必须能够是冗余的
- 请求允许
- 发现服务器可以提供的各种内容
- 列出提供计量数据的组件
- 列出给定组件的计量表
- 列出已知用户
- 列出已知项目
- 列出已知来源
- 列出已知的计量表类型
- 发现服务器可以提供的各种内容
- 获取原始事件数据,不进行聚合
- 按用户
- 按项目
- 按来源
- 按用户和项目
- 生成数据的聚合视图
- 在一段时间内对计量表类型的“volume”字段求和
- 按用户
- 按项目
- 按来源
- 在一段时间内对计量表类型的“volume”字段求和
- 在一段时间内对计量表类型的“duration”字段求和
- 按用户
- 按项目
- 按来源
注意:这里是其他项目的列表。其中一些项目可能更适合在 API 的使用者(实际为用户计费的系统)中处理。
- 列出可能没有持续时间的离散事件(实例创建、IP 分配等)
- 列出资源的原始事件数据(“特定实例发生了什么?”)
- 在一段时间内按计量表类型聚合事件数据以获取资源(“与此实例相关的成本是什么?”)
- 在一段时间内对特定资源的计量表类型的 volume 求和(“VIF 使用了多少总带宽?”)
- 在一段时间内对特定资源的计量表类型的 duration 求和(“实例运行了多长时间?”)
- 资源的元数据(例如实例的位置)
- 除了求和之外,还可以聚合平均值
注意:API 执行值的聚合,并且未将其存储在数据库中。为了提高性能,可以对其进行缓存,但缓存策略不在本蓝图的范围内。
注意:在福尔索姆设计会议上,设计用于更改 Keystone 中租户状态的 SET account_id 调用,目前更多地被视为一个缺陷,因为计费系统无论如何都需要与 Keystone API 通信才能理解帐户 ID。
限制
请注意,由于收集的数据的性质,/VOLUME 和 /DURATION 函数具有一些内在限制,即对于给定的实例 ID,可能需要将给定的计量表解释为实例 ID 随时间变化。以下示例尝试解释这一点。
示例
- t1:实例 A - 具有 1 个 CPU - 64G 内存 - 在区域 1 中运行
- t2:实例 A - 具有 2 个 CPU - 64G 内存 - 在区域 1 中运行
- t3:实例 A - 具有 2 个 CPU - 128G 内存 - 在区域 1 中运行
- t4:实例 A - 具有 2 个 CPU - 128G 内存 - 在区域 3 中运行
- t5:实例 A 已停止
从计费的角度来看,重要的是,即使实例 ID 保持不变,我们实际上有 4 个不同的时间段,这些时间段可能导致将 4 个不同的价格应用于同一个实例
- t1->t2:价格 1
- t2->t3:价格 2
- t3->t4:价格 3
- t4->t5:价格 4
完整的计费或评级引擎需要被告知这些事件已经发生,这样它就不会从给定计量表 volume 的总和中统一应用计费价格,因此我们建议它们不要依赖 /SUM 或 /DURATION 调用,而是获取完整的历史记录以提供详细的计费。
/SUM 或 /DURATION 调用是可以在简单场景中安全使用的摘要,例如
- 在简单的亚马逊类型计费模型中,实例无法更改区域、添加 CPU 或添加内存,
- 在仅需要简单使用情况统计信息来告知用户的私有云场景中,
- 在 horizon 插件中提供用量快速摘要。
Ceilometer 的意图是成为一个收集信息以供评级和计费引擎使用的中心点,而不是充当评级引擎。我们希望我们当前的 API 能够随着时间的推移发展,以简化评级引擎的请求,并且我们应该准备好接受对其进行扩展。但是,我认为我们目前缺乏评级经验来提出一个能够有效工作的通用解决方案,因此我建议我们推迟到我们获得经验后再进行。
REST API
笔记
- 所有结果都以 JSON 或 XML 格式提供。
- [] 表示可选信息
- date_time 假定使用 ISO 格式并使用 UTC
- [start_time 和 end_time] 是大多数请求的可选 date_times。之前已达成一致,该范围对于 start 来说是排他的,对于 end 来说是包含的。
| 动词 | URL | 参数 | 预期结果 |
| GET | v1 | - | 返回有关此特定 API 版本的详细信息。 |
| GET | v1/EXTENSIONS | - | 返回所有可用扩展的列表 |
| GET | v1/EXTENSIONS/<ALIAS> | - | 获取有关特定扩展的详细信息。扩展允许在不更改 API 版本的情况下在 API 中引入新功能,并且它们允许引入供应商特定的功能 |
| GET | v1/SOURCES | [start_time 和 end_time] | 返回已知来源的列表 |
| GET | v1/[SOURCES/<SOURCE>/]LIST | - | 返回服务器可以提供的有关主题的列表 |
| GET | v1/[SOURCES/<SOURCE>/]LIST/COMPONENTS | - | 返回提供计量数据的组件列表 |
| GET | v1/[SOURCES/<SOURCE>/]LIST/<COMPONENT>/METERS | - | 返回给定组件提供的计量表列表 |
| GET | v1/[SOURCES/<SOURCE>/]LIST/METERS | - | 返回已知的计量表类型列表 |
| GET | v1/[SOURCES/<SOURCE>/]LIST/RESOURCES | [start_time 和 end_time] | 返回已知资源_ID 类型的列表,以及该资源的最后一次出现时的元数据信息 |
| GET | v1/[SOURCES/<SOURCE>/]USERS | [start_time 和 end_time] | 返回已知 USERS_ID 的列表 |
| GET | v1/[SOURCES/<SOURCE>/]USERS/<USER_ID> | [start_time 和 end_time] | 返回给定用户的原始事件列表 |
| GET | v1/[SOURCES/<SOURCE>/]USERS/<USER_ID>/<METER> | [start_time 和 end_time] | 返回给定用户和给定计量表的原始事件列表 |
| GET | v1/[SOURCES/<SOURCE>/]USERS/<USER_ID>/<METER>/VOLUME | [start_time 和 end_time] | 返回给定用户和计量表的 meter_volume 总和 |
| GET | v1/[SOURCES/<SOURCE>/]USERS/<USER_ID>/<METER>/DURATION | [start_time 和 end_time] | 返回给定用户和计量表的 meter_duration 总和 |
| GET | v1/[SOURCES/<SOURCE>/]USERS/<USER_ID>/RESOURCES | [start_time 和 end_time] | 返回给定用户的资源列表,以及该资源的最后一次出现时的元数据信息 |
| GET | v1/[SOURCES/<SOURCE>/]USERS/<USER_ID>/RESOURCES/<RESOURCE_ID>/ | [start_time 和 end_time] | 返回给定用户和给定资源的事件列表 |
| GET | v1/[SOURCES/<SOURCE>/]USERS/<USER_ID>/RESOURCES/<RESOURCE_ID>/<METER> | [start_time 和 end_time] | 返回给定用户、资源和计量表的事件列表 |
| GET | v1/[SOURCES/<SOURCE>/]USERS/<USER_ID>/RESOURCES/<RESOURCE_ID>/<METER>/VOLUME | [start_time 和 end_time] | 返回给定用户、资源和计量表的 meter_volume 总和 |
| GET | v1/[SOURCES/<SOURCE>/]USERS/<USER_ID>/RESOURCES/<RESOURCE_ID>/<METER>/DURATION | [start_time 和 end_time] | 返回给定用户、资源和计量表的 meter_duration 总和 |
| GET | v1/[SOURCES/<SOURCE>/]PROJECTS | [start_time 和 end_time] | 返回已知 PROJECT_ID 的列表 |
| GET | v1/[SOURCES/<SOURCE>/]PROJECTS/<PROJECT_ID> | [start_time 和 end_time] | 返回给定项目的原始事件列表 |
| GET | v1/[SOURCES/<SOURCE>/]PROJECTS/<PROJECT_ID>/<METER> | [start_time 和 end_time] | 返回给定项目和给定计量表的原始事件列表 |
| GET | v1/[SOURCES/<SOURCE>/]PROJECTS/<PROJECT_ID>/<METER>/VOLUME | [start_time 和 end_time] | 返回给定项目和计量表的 meter_volume 总和 |
| GET | v1/[SOURCES/<SOURCE>/]PROJECTS/<PROJECT_ID>/<METER>/DURATION | [start_time 和 end_time] | 返回给定项目和计量表的 meter_duration 总和 |
| GET | v1/[SOURCES/<SOURCE>/]PROJECTS/<PROJECT_ID>/RESOURCES | [start_time 和 end_time] | 返回给定项目的资源列表,以及该资源的最后一次出现时的元数据信息 |
| GET | v1/[SOURCES/<SOURCE>/]PROJECTS/<PROJECT_ID>/RESOURCES/<RESOURCE_ID>/ | [start_time 和 end_time] | 返回给定项目和给定资源的事件列表 |
| GET | v1/[SOURCES/<SOURCE>/]PROJECTS/<PROJECT_ID>/RESOURCES/<RESOURCE_ID>/<METER> | [start_time 和 end_time] | 返回给定项目、资源和计量表的事件列表 |
| GET | v1/[SOURCES/<SOURCE>/]PROJECTS/<PROJECT_ID>/RESOURCES/<RESOURCE_ID>/<METER>/VOLUME | [start_time 和 end_time] | 返回项目、资源和计量表的 meter_volume 总和 |
| GET | v1/[SOURCES/<SOURCE>/]PROJECTS/<PROJECT_ID>/RESOURCES/<RESOURCE_ID>/<METER>/DURATION | [start_time 和 end_time] | 返回项目、资源和计量表的 meter_duration 总和 |