活动

除了计量器之外,Telemetry 服务还会收集在 OpenStack 环境中触发的事件。本节提供了 Telemetry 服务中事件格式的简要概述。

虽然一个样本代表时间序列中的单个数值数据点,但事件是一个更广泛的概念,它代表资源在某个时间点的状态。可以使用各种数据类型来描述该状态,包括非数值数据,例如实例的风味。通常,事件代表 OpenStack 系统中执行的任何操作。

事件配置

默认情况下,Ceilometer 会从其他 OpenStack 服务接收到的消息中构建事件数据。

注意

在 Ocata 之前的版本中,建议在启用 Telemetry 服务中的事件时,将 disable_non_metric_meters 设置为 True。 Telemetry 服务历史上将事件表示为计量数据,如果同时启用事件和非计量器,则可能导致数据重复。

事件结构

Telemetry 服务捕获的事件由五个关键属性表示

event_type

一个点字符串,定义了发生的事件,例如 "compute.instance.resize.start"

message_id

事件的 UUID。

生成

事件在系统中发生的的时间戳。

traits

一个扁平化的键值对映射,用于描述事件。事件的 traits 包含事件的大部分详细信息。Traits 是有类型的,可以是字符串、整数、浮点数或日期时间。

raw

主要用于审计目的,完整的事件消息可以存储(未索引)以供将来评估。

事件索引

OpenStack 中通知的一般理念是发出任何人可能需要的所有数据,并让消费者过滤掉他们不感兴趣的内容。为了使处理更简单高效,这些通知在 Ceilometer 中作为事件存储和处理。通知负载,它可以是一个任意复杂的 JSON 数据结构,被转换为一组扁平化的键值对。此转换由配置文件指定。

注意

事件格式旨在实现高效处理和查询。可以通过配置 store_raw 选项来启用完整通知的存储以用于审计目的。

事件转换

从通知到事件的转换由 ceilometer.conf 配置文件中的 definitions_cfg_file 定义的配置文件驱动。

这包括描述如何将通知主体中的字段映射到 Traits,以及用于执行任何程序化转换(拆分字符串、强制大小写)的可选插件。

将通知映射到事件是按 event_type 定义的,event_type 可以使用通配符。如果通知中存在相应的字段且非空,则会将 Traits 添加到事件中。

注意

包含在 Telemetry 服务中的默认定义文件包含已知通知和有用 traits 的列表。可以根据用户需求修改提供的映射,以包含更多或更少的数据。

如果不存在定义文件,将记录警告,但将假定一个空定义集。默认情况下,任何在定义文件中没有相应事件定义的通知都将被转换为具有一组最小 traits 的事件。可以通过在 ceilometer.conf 文件中设置 drop_unmatched_notifications 选项来更改此行为。如果将其设置为 True,则任何未映射的通知都将被丢弃。

将添加到所有事件的基本 traits 集(所有类型均为 TEXT)是:service(通知的发布者)、tenant_id 和 request_id。这些不必在事件定义中指定,它们会自动添加,但可以为给定的 event_type 覆盖它们的定义。

事件定义格式

事件定义文件采用 YAML 格式。它由事件定义的列表组成,这些定义是映射。顺序很重要,定义列表将反向扫描以找到与通知的 event_type 匹配的定义。将使用该定义来生成事件。反向排序是因为通常希望拥有更通用的通配符定义(例如 compute.instance.*),其中包含所有这些事件的通用 traits,然后是几个更具体的事件定义,这些定义具有所有上述 traits,以及一些额外的 traits。

每个事件定义都是一个具有两个键的映射

event_type

这是一个列表(或一个字符串,该字符串将被视为 1 个元素列表),该列表包含此定义将处理的 event_types。可以使用 unix shell glob 语法进行通配符匹配。以 ! 开头的排除列表将从匹配中排除任何列出的类型。如果仅列出排除项,则该定义将匹配不与排除项匹配的任何内容。

traits

这是一个映射,键是 trait 名称,值是 trait 定义。

每个 trait 定义都是一个具有以下键的映射

fields

用于提取此 trait 的通知中的字段的路径规范。可以编写规范以匹配多个可能的字段。默认情况下,该值将是第一个这样的字段。可以使用点语法 (payload.host) 指定路径。还支持方括号语法 (payload[host])。在任何一种情况下,如果用于字段的键包含特殊字符,例如 .,则需要用引号(单引号或双引号)括起来:payload.image_meta.`org.openstack__1__architecture`。字段规范中使用的语法是 JSONPath 的变体

type

(可选) 此 trait 的数据类型。有效选项是:textintfloatdatetime。如果未指定,则默认为 text

插件

(可选) 用于在通知字段中执行简单的程序化转换。

将事件传递到外部接收器

您可以配置 Telemetry 服务将事件传递到外部接收器。这些接收器可以在 /etc/ceilometer/event_pipeline.yaml 文件中进行配置。