跳转到: 导航, 搜索

Ceilometer/blueprints/StandardPaaSEventFormat

简介

直到最近,OpenStack 的重点一直是基础设施层面的服务(计算、存储、网络),但目前正在开发大量的 PaaS 服务,并且在 OpenStack 系统上运行的应用程序数量也在不断增加。这些新的应用程序中的许多都需要进行计量,原因有很多:内部系统管理、许可管理、最终客户计费。Ceilometer 目前支持收集基础设施层面服务的计量信息。通常的机制是创建有针对性的代理,或使用现有的服务 API 来计量这些系统。虽然这种方法对于现有的服务集有效,但随着需要计量的 PaaS 和 SaaS 服务数量的增加,它将遇到一些问题。主要问题是,对于 OpenStack 中可能托管的数百(最终是数千)种服务,进行自定义集成将不可行。这份蓝图提出了一种标准化集成格式的方案,以便 Ceilometer 能够消耗任何符合规范的应用程序的计量数据,而无需进行任何自定义集成,甚至无需更改代码。

示例用例

数据库即服务

数据库即服务 (DBaaS),例如 Trove,具有一种架构,服务控制器代表客户管理特殊的 Nova 计算实例。从他们的角度来看,他们正在运行数据库实例,而不是计算实例。计量和计费将基于数据库运行的小时数,不一定基于托管实例的运行时间。这需要生成和存储一组独特的计量记录,以启用对单个数据库实例的使用跟踪和计费。

DNS 即服务

DNS 服务在与 DBaaS 类似的架构上运行。在这种情况下,需要测量的计量器是 DNS 区域的存在以及已服务的 DNS 查询数量。再次强调,这些是应用程序层面的计量器,与正在运行的主机实例没有直接关联。查询可以由各种主机提供,并且 DNS 区域的存在不依赖于特定的计算实例。DNS 服务必须跟踪应用程序层面的指标并报告出来,以便可以跟踪这些系统。

负载均衡即服务

负载均衡器是一个逻辑系统,由一些托管负载均衡软件的计算实例组成。需要测量的计量器包括负载均衡器实例的存在以及通过系统传输的数据量。再次强调,这与底层基础设施没有直接关联,但必须在应用程序层面报告。

需求

前面列出的用例表明,PaaS 和其他应用程序层面的计量具有自己的计量要求,与计算等基础设施层面组件类似但有所不同。每个应用程序或服务可能都有自己独特的需要跟踪和处理的计量器。由于潜在的服务/应用程序数量众多,如果没有某种标准的集成模型,将难以(如果不是不可能)支持这些服务。完整的集成模型包括事件格式、字段和元数据标准以及交付机制。这份蓝图仅解决了事件格式。以下是能够通用支持服务/应用程序层面计量的事件格式的要求

  1. 使用一种标准格式,可以使用常用的库轻松生成和消耗。
  2. 一致的使用记录结构,便于轻松解析
  3. 标准化的字段类型和名称,允许信息的使用者了解每个字段的含义,并便于数据处理。
  4. 支持报告各种类型的计量器以及处理它们所需的配套元数据。

事件格式

PaaS 事件和使用记录将共享相同的格式。下表提供了记录中包含的字段的详细信息。该格式源自基础设施层面服务(例如 Nova 和 Cinder)已经生成的服务管理器事件,因此总体格式以及与现有事件重叠的任何字段基本相同。添加了一些额外的元数据来帮助处理事件。目标是使事件尽可能地自我描述,并确保数据及其来源没有歧义。

字段 子字段 子字段2 类型 描述 必需 笔记
event_type 枚举 对于事件类型记录,这描述了实际发生的事件 对于事件,为 yes 取决于服务,默认为 create、exists、delete timestamp
timestamp DateTime 记录的时间戳
message_id 字符串 事件的唯一标识符
payload
version 字符串 事件格式的版本
audit_period_beginning DateTime 报告期开始的时间戳
audit_period_ending DateTime 报告期结束的时间戳
record_type 枚举 [event,quantity] 事件描述服务中的某种状态变化,数量描述使用指标值
tenant_id 字符串 标识服务实例的所有者
user_id 字符串 标识特定用户
service_id UUID 唯一标识一项服务
instance_id UUID 唯一标识服务的实例 假设实例级别报告
display_name 字符串 服务的文本描述 如果客户命名实例,则使用
instance_type_id 枚举 用于描述服务的变体 如果服务的变体具有不同的价格或需要在发票上单独列出,则需要
instance_type 字符串 服务变体的文本描述
availability zone 字符串 部署服务的地点 如果服务在 AZ 级别部署,则需要
region 字符串 部署服务的数据中心 如果服务在区域级别部署,则需要
state 枚举 记录生成时服务的状态 对于存在事件,需要
state_description 字符串 服务状态的文本描述
license_code 枚举 描述特定许可模式的值
metrics 数组
metric_name 字符串 此记录中表示的指标的唯一名称
metric_type 枚举 gauge、cumulative、delta 从 Ceilometer 描述指标的行为
metric_value Float 数量类型记录的指标值 对于数量,为 yes
metric_units 枚举 描述数量的单位

事件

上述事件格式可用于传递两种基本类型的事件:数量和状态事件

状态事件

这些事件描述了被计量服务的状态。它们与基础设施生成的状态事件非常相似。通常至少会有三种类型的事件:创建、存在和删除。以下是 DNS 服务中这些事件的示例。

dns.zone.create

在创建区域后发送此事件

{

"event_type":"dns.zone.create", "time_stamp":"2013-04-07 22:56:30.026191", "message_id": 52232791371,

"payload": { "instance_type":"type1", "availability_zone" :"az1", "instance_id" :"6accc078-81de-4567-894f-53af5653ac63", "audit_period_beginning":"2013-04-07 21:56:32.249876",  "state":"active",  "audit_period_ending":"2013-04-07 22:56:32.249712", "service_id":"1abbb078-81cd-4758-974e-35fa5653ac63",        "version":"1.0",  "tenant_id":"12345", "instance_type_id": 1, "display_name":"example100.com", "message_id": 52232791371, "user_id":"6789", "state_description":"happy DNS" }

}
dns.zone.exists

每小时为现有区域发送此事件一次

{

"event_type":"dns.zone.exists", "time_stamp":"2013-04-07 22:56:37.782573", "message_id": 52232791372,

"payload": { "instance_type":"type1", "availability_zone" :"az1", "instance_id" :"6accc078-81de-4567-894f-53af5653ac63", "audit_period_beginning":"2013-04-07 21:56:37.783215", "state":"active", "audit_period_ending":"2013-04-07 22:56:37.783153", "service_id":"1abbb078-81cd-4758-974e-35fa5653ac63",  "version":"1.0",  "tenant_id":"12345", "instance_type_id": 1, "display_name":"example100.com", "message_id": 52232791371, "user_id":"6789",   "state_description":"happy DNS" }

}
dns.zone.delete

在删除区域时发送此事件

{

"event_type":"dns.zone.delete", "time_stamp":"2013-04-07 22:56:37.787774", "message_id": 52232791373,

"payload": {"instance_type":"type1", "availability_zone" :"az1",  "instance_id" :"6accc078-81de-4567-894f-53af5653ac63",  "audit_period_beginning":"2013-04-07 21:56:37.788177",  "state":"active",        "audit_period_ending":"2013-04-07 22:56:37.788144", "service_id":"1abbb078-81cd-4758-974e-35fa5653ac63", "version":"1.0", "tenant_id":"12345", "instance_type_id": 1, "display_name":"example100.com",    "message_id": 52232791371, "user_id":"6789", "state_description":"happy DNS" }

}

数量事件

数量事件具有相同的总体格式,但此外还有一个名为 metrics 的部分,它是一个关于事件报告的计量器的信息的数组。每个计量器条目都有一个类型、单位、名称和值。由于它是一个数组,因此可以在一个事件中报告多个值。

dns.zone.usage

每小时发送一次,其中包含每个区域实例的使用情况

{

"event_type":"dns.zone.usage", "time_stamp":"2013-04-08 10:05:31.618074", "message_id": 52232791371,

"payload": {"metrics": { "metric_type":"delta", "metric_value": 42,  "metric_units":"hits", "metric_name":"queries" }, "instance_type":"type1", "availability_zone" :"az1", "instance_id" :"6accc078-81de-4567-894f-53af5653ac63", "audit_period_beginning":"2013-04-08 09:05:31.618204", "state":"active", "audit_period_ending":"2013-04-08 10:05:31.618191",  "service_id":"1abbb078-81cd-4758-974e-35fa5653ac63",       "version":"1.0", "tenant_id":"12345", "instance_type_id": 1, "display_name":"example100.com", "message_id": 52232791371, "user_id":"6789", "state_description":"happy DNS"    }

}


© 版权所有 2013 Hewlett-Packard Development Company, L.P.