数据处理和管道

数据处理的机制称为管道。在配置层面,管道描述了数据源与数据发布相应接收端之间的耦合关系。此功能由通知代理处理。

源是数据的生产者:样本事件。实际上,它是一组通知处理程序,为一组匹配的计量器和事件类型发出数据点。

每个源配置封装了名称匹配和映射到一个或多个接收端以进行发布。

另一方面,接收端是数据的消费者,提供用于发布来自相关源的数据的逻辑。

实际上,接收端描述了一个或多个发布者的列表。

管道配置

通知代理支持两个管道:一个处理样本,另一个处理事件。可以通过在 [notifications] 部分设置 pipelines 选项来启用和禁用管道。

默认情况下,每个管道的实际配置存储在单独的配置文件中:pipeline.yamlevent_pipeline.yaml。配置文件位置可以通过 Ceilometer 配置选项 中列出的 pipeline_cfg_fileevent_pipeline_cfg_file 选项设置。

计量器管道定义如下

---
sources:
  - name: 'source name'
    meters:
      - 'meter filter'
    sinks:
      - 'sink name'
sinks:
  - name: 'sink name'
    publishers:
      - 'list of publishers'

有几种方法可以定义管道源的计量器列表。有效的计量器列表可以在 测量 中找到。可以定义所有计量器,或者仅包含或排除的计量器,源应与之配合使用

  • 要包含所有计量器,请使用 * 通配符。强烈建议仅选择您打算使用的计量器,以避免使计量数据库充斥着未使用的数据。

  • 要定义计量器列表,请使用以下两种方法之一

    • 要定义包含的计量器列表,请使用 meter_name 语法。

    • 要定义排除的计量器列表,请使用 !meter_name 语法。

注意

OpenStack 遥测服务在管道之间没有重复检查,如果您将计量器添加到多个管道,则假定重复是故意的,并且可以根据指定的接收端多次存储。

上述定义方法可以用于以下组合

  • 仅使用通配符。

  • 使用包含的计量器列表。

  • 使用排除的计量器列表。

  • 使用通配符和排除的计量器列表。

注意

以上变体中至少应包含一个在计量器部分。包含的计量器和排除的计量器不能在同一个管道中共存。通配符和包含的计量器不能在同一个管道定义部分中共存。

发布者部分包含发布者列表,样本数据应发送到该列表。

类似地,事件管道定义如下

---
sources:
  - name: 'source name'
    events:
      - 'event filter'
    sinks:
      - 'sink name'
sinks:
  - name: 'sink name'
    publishers:
      - 'list of publishers'

事件过滤器使用与计量器管道相同的过滤逻辑。

发布者

遥测服务提供了几种传输方法,用于将收集的数据传输到外部系统。此数据的消费者多种多样,例如监控系统,对于这些系统,数据丢失是可以接受的,以及计费系统,这些系统需要可靠的数据传输。遥测提供满足两种系统需求的方法。

发布者组件使得通过消息总线将数据保存到持久存储,或将其发送到一个或多个外部消费者成为可能。一个链可以包含多个发布者。

为了解决这个问题,可以为遥测服务中的每个数据点配置多发布者,允许将相同的技术计量器或事件多次发布到多个目标,每个目标可能使用不同的传输方式。

支持以下发布者类型

gnocchi (默认)

启用 gnocchi 发布者时,将测量和资源信息推送到 gnocchi 以进行优化的时序存储。gnocchi 必须在身份服务中注册,因为 Ceilometer 通过身份服务发现确切的路径。

有关如何启用和配置 gnocchi 的更多详细信息,请参阅其 官方文档页面

prometheus

可以使用以下方式将计量数据发送到 Prometheus 的 pushgateway

prometheus://pushgateway-host:9091/metrics/job/openstack-telemetry

使用此发布者,由于 Prometheus Pushgateway 的设计,时间戳不会发送到 Prometheus。所有时间戳都在 Prometheus 抓取 Pushgateway 中的指标时设置,而不是在 OpenStack 服务上轮询指标时设置。

为了获得看起来像现实(但增加了 Prometheus 抓取机制的延迟)的时间序列。pushgateway 的 scrape_interval 必须低于 Ceilometer 轮询间隔的倍数。

您可以在 此处 了解更多信息

由于此原因,不建议将此发布者用于计费目的,因为 Prometheus 中的时间戳不会完全准确。

notifier

notifier 发布者可以指定为 notifier://?option1=value1&option2=value2 的形式。它通过 AMQP 使用 oslo.messaging 发送数据。任何消费者都可以订阅发布的主题以进行进一步处理。

可用的自定义选项如下

per_meter_topic

此参数的值为 1。它用于将样本发布到额外的 metering_topic.sample_name 主题队列,而不仅仅是默认的 metering_topic 队列。

policy

用于配置发布者发送样本失败的情况下的行为,可能的预定义值是

default

用于等待和阻塞,直到样本已发送。

drop

用于丢弃发送失败的样本。

queue

用于创建一个内存队列,并在下一个样本发布期间重试发送队列中的样本(队列长度可以使用 max_queue_length 配置,默认值为 1024)。

topic

要发布到的队列的主题名称。设置此选项将覆盖由 metering_topicevent_topic 选项定义的默认主题。可以使用此选项来支持多个消费者。

udp

此发布者可以指定为 udp://<host>:<port>/ 的形式。它通过 UDP 发送计量数据。

file

文件发布者可以指定为 file://path?option1=value1&option2=value2 的形式。此发布者将计量数据记录到文件中。

注意

如果未指定文件名和位置,file 发布者不会记录任何计量器,而是在配置的日志文件中记录警告消息。

以下选项适用于 file 发布者

max_bytes

当此选项大于零时,将导致轮换。当指定的大小即将被超过时,文件将被关闭,并且将静默地打开一个新文件以进行输出。如果其值为零,则永远不会发生轮换。

backup_count

如果此值为非零,则会将扩展名附加到旧日志的文件名,如“ .1”、“ .2”,依此类推,直到达到指定的数值。写入的文件和包含最新数据的的文件始终是指定的不带任何扩展名的文件。

json

如果存在此选项,将强制 ceilometer 以 json 格式写入文件。

http

遥测服务支持将样本发送到外部 HTTP 目标。样本在发送时不会进行任何修改。要将此选项设置为通知代理的目标,请在管道定义文件中将 http:// 设置为发布者端点。HTTP 目标应与发布者声明一起设置。例如,可以传递其他配置选项:https://:80/?option1=value1&option2=value2

可用的选项如下

timeout

HTTP 请求超时前的秒数。

max_retries

重试请求的次数,然后失败。

batch

如果为 false,发布者将单独发送每个样本和事件,无论通知代理是否配置为批量处理。

verify_ssl

如果为 false,则禁用 ssl 证书验证。

默认发布者是 gnocchi,未指定任何其他选项。样本 publishers 部分在 /etc/ceilometer/pipeline.yaml 中如下所示

publishers:
    - gnocchi://
    - udp://10.0.0.2:1234
    - notifier://?policy=drop&max_queue_length=512&topic=custom_target