Collector 配置

常用选项

所有 collector 共有的选项都指定在配置文件中的 [collect] 部分。可用的选项如下

  • collector:默认值为 gnocchi。要加载的 collector 的名称。必须是 [gnocchi, prometheus] 中的一个。

  • period:默认值为 3600。收集周期的持续时间(秒)。

  • wait_periods:默认值为 2。在当前时间戳之前等待的周期数。这样做是为了避免遗漏尚未从数据源检索到的一些数据。

  • metrics_conf:默认值为 /etc/cloudkitty/metrics.yml。度量收集配置文件路径。有关详细信息,请参阅下面的“度量收集”部分。

  • scope_key:默认值为 project_id。可以找到范围的键。范围定义了数据收集如何在处理器之间分割。

特定 Collector 的选项

特定 collector 的选项必须在 cloudkitty.confcollector_{collector_name} 部分中指定。

Gnocchi

部分:collector_gnocchi

  • gnocchi_auth_type:默认值为 keystone。定义 gnocchi collector 应该使用哪种身份验证方法。必须是 basic(用于 gnocchi 基本身份验证)或 keystone(用于经典 keystone 身份验证)之一。如果选择 keystone,则可以在 auth_section 参数指向的部分中指定凭据。

  • gnocchi_user:仅用于 gnocchi 基本身份验证。gnocchi 用户。

  • gnocchi_endpoint:仅用于 gnocchi 基本身份验证。gnocchi 端点。

  • interface:默认值为 internalURL。仅用于 keystone 身份验证。用于 keystone URL 发现的接口。

  • region_name:默认值为 RegionOne。仅用于 keystone 身份验证。区域名称。

Prometheus

部分 collector_prometheus

  • prometheus_url:Prometheus HTTP API URL。

  • prometheus_user:用于 HTTP 基本身份验证。用户名。

  • prometheus_password:用于 HTTP 基本身份验证。密码。

  • cafile:允许自定义证书颁发机构文件的选项。

  • insecure:显式允许不受信任的 HTTPS 连接的选项。

度量收集

cloudkitty 中的度量收集具有高度可配置性。为了使主配置文件尽可能简洁,度量收集配置在 yaml 文件中进行。此文件的路径默认为 /etc/cloudkitty/metrics.yml,但可以配置

[collect]
metrics_conf = /my/custom/path.yml

最小配置

此配置文件具有以下格式

metrics: # top-level key
  metric_one: # metric name
    unit: squirrel
    groupby: # attributes by which metrics should be grouped
      - id
    metadata: # additional attributes to retrieve
      - color

在文件的顶层,需要一个 metrics 键。它包含要收集的度量的字典,字典的每个键都是数据源中度量的名称(例如 volume.sizeimage.size)。

对于每个度量,需要以下属性

  • unit:度量在转换后将存储的单位。这只是对人类的指示,对度量收集、转换或评级没有任何影响。

  • groupby:一个列表,用于指定在收集时应根据哪些属性对度量进行分组。这些将允许在通过 v2 API 检索时重新分组数据。一个典型的用例是在收集时根据 ID、项目 ID、域 ID 和用户 ID 对数据进行分组,但在检索时仅根据用户 ID 进行分组。

  • metadata:一个列表,用于指定应为给定度量收集的其他属性。这些可用于评级规则,并将在月度报告中显示。但是,无法对这些属性进行分组。如果需要对 metadata 属性进行分组,请将其移动到 groupby 列表中。

注意

scope_key 会自动添加到 groupby 中。

可选参数

单位转换

如果需要转换收集到的数量(例如,从 MiB 转换为 GiB),可以使用 factoroffset 选项。 factor 默认值为 1,offset 默认值为 0。这些选项用于使用以下公式计算最终结果:qty = collected_qty * factor + offset

注意

factoroffset 可以是浮点数、整数或分数。

默认配置文件中的示例,将 image.size 度量从 B 转换为 MiB

metrics:
  image.size:
    groupby:
      - id
    metadata:
      - disk_format
    unit: MiB # Final unit
    factor: 1/1048576 # Dividing by 1024 * 1024

注意

这里我们什么都不添加,因此不需要指定 offset

数量突变

也可以使用 mutate 选项来改变收集到的数量。此参数接受五个值

  • NONE:这是默认值。收集到的数据未修改。

  • CEIL:qty 将向上舍入到最接近的整数。

  • FLOOR:qty 将向下舍入到最接近的整数。

  • NUMBOOL:如果收集到的 qty 等于 0,则保持为 0。否则,将其设置为 1。

  • NOTNUMBOOL:如果收集到的 qty 等于 0,则将其设置为 1。否则,将其设置为 0。

  • MAP:将任意值映射到通过 mutate_map 选项(字典)定义的新值。如果在 mutate_map 中找不到该值,则将其设置为 0。如果未定义或为空,则所有值都设置为 0。

警告

数量突变在转换后进行。示例

factor: 10
mutate: CEIL

因此,上述配置会将 9.9 转换为 99(9.9 -> 99 -> 99),而不是转换为 100(9.9 -> 10 -> 100)

NUMBOOL 转换的典型用例是使用 gnocchi collector 收集实例正常运行时间:为了知道实例是正在运行还是暂停,可以使用 cpu 度量。当实例暂停时,此度量为 0。因此,qty 被突变为 NUMBOOL,因为 cpu 度量始终代表一个实例。然后根据实例元数据定义评级规则。示例

metrics:
  cpu:
    unit: instance
    mutate: NUMBOOL
    groupby:
      - id
    metadata:
      - flavor_id

当状态类度量值为 0 表示可计费状态时,NOTNUMBOOL 突变器很有用。例如,以下 Prometheus 度量在实例处于 ACTIVE 状态时值为 0,但在 ERROR 状态下为 4

metrics:
  openstack_nova_server_status:
    unit: instance
    mutate: NOTNUMBOOL
    groupby:
      - id
    metadata:
      - flavor_id

当应计费多个状态时,MAP 突变器很有用。例如,以下 Prometheus 度量在实例处于 ACTIVE 状态时值为 0,但操作员可能希望对其他非零状态进行评级

metrics:
  openstack_nova_server_status:
    unit: instance
    mutate: MAP
    mutate_map:
      0.0: 1.0  # ACTIVE
      11.0: 1.0 # SHUTOFF
      12.0: 1.0 # SUSPENDED
      16.0: 1.0 # PAUSED
    groupby:
      - id
    metadata:
      - flavor_id

显示名称

有时,您希望使用另一个名称来表示度量,无论是为了稍微缩短它还是使其更明确。例如,前一节中的 cpu 度量可以称为 instance。这就是 alt_name 选项的作用

metrics:
  cpu:
    unit: instance
    alt_name: instance
    mutate: NUMBOOL
    groupby:
      - id
    metadata:
      - flavor_id

度量描述

有时,您希望使用更具描述性的属性来显示有关配置评级类型的更多详细信息。例如,为了提供有关云中配置的操作系统许可或其他软件许可的评级的更多详细信息。为此,我们有 description 选项,它是一个字符串类型的字段(最多 64 kB),可用于提供有关度量评级的更多信息。配置后,此选项将作为评级元数据持久保存,并且可通过 summary GET API 获得。

metrics:
  instance-status:
    unit: license-hours
    alt_name: license-hours
    description: |
                 Operating system licenses are charged as follows: (i)
                 Linux distro will not be charged; (ii) All Windows up to
                 version 8 are charged .01 every hour, and other versions
                 .5; (iii) Any other operating systems will be charged .02
    groupby:
      - id
      - operating_system_name
      - operating_system_distro
      - operating_system_version
      - flavor_id
      - flavor_name
      - cores
      - ram
    metadata: []

一个度量中的多个评级

除了常见配置之外,collector 还接受每个度量的评级类型定义的列表。使用评级类型定义的列表允许操作员对通过相同度量收集的相同资源类型的不同方面进行评级,否则操作员需要在 collector 中创建多个度量才能在 CloudKitty 中创建多个评级类型。

metrics:
  instance.metric:
    - unit: instance
      alt_name: flavor
      mutate: NUMBOOL
      groupby:
        - id
      metadata:
        - flavor_id
    - unit: instance
      alt_name: operating_system_license
      mutate: NUMBOOL
      groupby:
        - id
      metadata:
        - os_license

特定 Collector 的配置

某些 collector 需要额外的选项。这些必须通过 extra_args 选项指定。有些选项具有默认值,其他选项必须系统地指定。每个 collector 的额外参数如下所述。

Gnocchi

注意

为了从 Gnocchi 检索度量,Cloudkitty 使用动态聚合端点。它构建以下格式的 operation:(aggregate RE_AGGREGATION_METHOD (metric METRIC_NAME AGGREGATION_METHOD))。这意味着“检索类型为 AGGREGATION_METHOD 的所有聚合,用于名为 METRIC_NAME 的度量,并使用 RE_AGGREGATION_METHOD 重新聚合它们”。

默认情况下,重新聚合方法默认为聚合方法。

将重新聚合方法设置为与聚合方法不同的值在聚合的粒度与 CloudKitty 的收集周期不匹配时很有用,或者在使用 rate: 聚合时,因为您可能不希望对速率进行速率计算,而是对速率求和或最大值。

  • resource_type:没有默认值。当前度量绑定的资源类型。

  • resource_key:默认值为 id。包含唯一资源标识符的属性。这是一个高级选项,除非您知道自己在做什么,否则不要修改它。

  • aggregation_method:默认值为 max。从 gnocchi 检索度量时使用的聚合方法。必须是 minmaxmeanrate:minrate:maxrate:mean 中的一个。

  • re_aggregation_method:默认值为 aggregation_method。从 gnocchi 检索度量时使用的重新聚合方法。

  • force_granularity:默认值为 0。如果 > 0,此粒度将用于度量聚合。否则,将使用可用的最低粒度(这意味着覆盖最长时间段的粒度)。

  • use_all_resource_revisions:默认值为 True。此选项在使用通过 https://github .com/gnocchixyz/gnocchi/pull/1059 引入的补丁的 Gnocchi 时很有用。该补丁可能导致查询根据资源的修订版本返回每个粒度(时间跨度)的多个条目。当使用 Cloudkitty 的“mutate”选项时,这可能会有问题。此选项允许操作员丢弃从 Gnocchi 返回的所有数据点,但 CloudKitty 查询的粒度的最后一个数据点。默认行为得以保留,这意味着 CloudKitty 始终使用所有返回的数据点。

  • custom_query: 提供了一种机制,允许操作员自定义针对 Gnocchi 执行的聚合查询。默认情况下,我们使用以下 (aggregate RE_AGGREGATION_METHOD (metric METRIC_NAME AGGREGATION_METHOD))。因此,此选项使操作员能够充分利用 Gnocchi 中可用的操作,例如任何算术运算、逻辑运算等。在使用自定义聚合查询时,您可以保留占位符 RE_AGGREGATION_METHODAGGREGATION_METHODMETRIC_NAME:它们将在运行时被指标配置中的值替换。

    一个示例用例是应该始终增长值的指标,例如 RadosGW 使用数据。RadosGW 上的使用数据修剪会影响使用数据,这可能导致 Gnocchi 中数据序列出现交换(意味着序列的右侧值小于左侧值)。因此,为了处理这种情况,可以例如使用以下自定义查询:(div (+ (aggregate RE_AGGREGATION_METHOD (metric METRIC_NAME AGGREGATION_METHOD)) (abs (aggregate RE_AGGREGATION_METHOD (metric METRIC_NAME AGGREGATION_METHOD)))) 2):此自定义查询将在序列值交换时返回 0

Prometheus

  • aggregation_method: 默认值为 max。从 prometheus 检索度量时使用的聚合方法。必须是 avgminmaxsumcountstddevstdvar 中的一个。

  • query_function: 可选参数。在 aggregation_methodrange_function 改变数据后,应用于瞬时向量的函数。必须是 absceilexpfloorlnlog2log10roundsqrt 中的一个。有关这些函数的更多信息,您可以查看 此页面

  • query_prefix: 可选参数。要添加到 CloudKitty 生成的 Prometheus 查询中的任意前缀,用空格分隔。

  • query_suffix: 可选参数。要添加到 CloudKitty 生成的 Prometheus 查询中的任意后缀,用空格分隔。

  • range_function: 可选参数。要应用于隐式 {aggregation_method}_over_time 的函数。必须是 changesdeltaderivideltairangeiraterate 中的一个。有关这些函数的更多信息,您可以查看 此页面

这里有一个使用 PromQL 向量匹配 的评级示例

metrics:
  libvirt_domain_openstack_info:
  - alt_name: cpu
    unit: vCPU
    groupby:
    - project_id
    metadata:
    - instance_name
    - domain
    extra_args:
      query_suffix: "* on (domain) group_left() libvirt_domain_vcpu_maximum"

以及生成的 PromQL

max(
   max_over_time(
      libvirt_domain_openstack_info{project_id="<PROJECT_ID>"}
      [1h]
   )
) by (
   project_id,
   instance_name,
   domain
) * on (domain)
group_left()
libvirt_domain_vcpu_maximum