5.4. 使用 CPU 遥测值在使用速率功能时进行自动扩展阈值


使用 OS::Heat::Autoscaling heat 编配模板(HOT)并为 CPU 设置阈值时,该值以纳秒表示,这是根据分配给实例工作负载的虚拟 CPU 数量的动态值。在查询 prometheus 时,您可以使用 rate 功能,以百分比形式计算和表达 CPU nanosecond 值。

5.4.1. 将 CPU 遥测值计算为百分比

CPU 遥测以纳秒为单位,以 CPU 使用率的形式存储在 Prometheus 中。使用 CPU 遥测定义自动扩展阈值时,可以将值表示为 CPU 使用率百分比,因为在定义阈值时更自然。当定义用作自动扩展组一部分的扩展策略时,您可以将阈值定义为百分比,并以百分比的形式计算 CPU 使用率,而不是以纳秒为单位。

  • 将指标的增长率除以 1,000,000,000。
  • 根据 vCPU 数量来划分答案。
  • 将回答乘以 100 以获得百分比。

使用此公式在 PromQL 查询中计算这个值:" (rate (ceilometer_cpu{server_group=~<stack_id> configured'}[150s]))/ 1000000000 / <number_of_vCPUs> * 100"。

  • 将 <server_name_prefix> 替换为服务器名称前缀的名称。
  • 将 <number_of_vCPUs> 替换为 vCPU 数量。

5.4.2. 将实例工作负载 vCPU 显示为百分比

您可以使用 openstack metric query 命令将 CPU 遥测数据显示为百分比而不是实例的 nanosecond 值。

先决条件

  • 使用自动扩展组资源创建 heat 堆栈,以产生实例工作负载。

流程

  1. 访问 openstack 客户端 pod:

    $ oc rsh openstackclient
  2. 检索自动扩展组 heat 堆栈的 stack_id

    $ openstack stack show stack1 -c id
    +-------+--------------------------------------+
    | Field | Value                                |
    +-------+--------------------------------------+
    | id    | 1ae77e51-ba09-452c-bc09-385f0791a366 |
    +-------+--------------------------------------+
  3. 返回指标增长率,以百分比计算的值。增加率返回为 CPU 时间的纳秒值,其指标在给定窗口中增加。您需要将这个数字除以 1000000000 为单位,以秒为单位获取值。然后,您可以通过将该值乘以 100 来将该值转换为一个百分比。最后,您可以将总值除以分配给实例的类别提供的 vCPU 数量,在本示例中为 1 个 vCPU,提供一个以百分比表示的值。使用 stack_id 作为查询中 'server_group' 标签的值,以仅从堆栈中获取结果:

    $ openstack metric query "rate(ceilometer_cpu{server_group='1ae77e51-ba09-452c-bc09-385f0791a366'}[150s])/1000000000*100/1" -c resource_name -c value
    +-------------------------------------------------------------------------+-------+
    | resource_name                                                           | value |
    +-------------------------------------------------------------------------+-------+
    | st-ih4tya6-bf63mo4vvyqp-pvdwdmvzov5c-vnf-x4f535xcvjyp:instance-00000003 | 0.525 |
    +-------------------------------------------------------------------------+-------+
  4. 您可以通过在查询中添加 offset 关键字来查看历史值。以下给出了与前一步类似的输出,但过去有数据 10 分钟:

    $ openstack metric query "rate(ceilometer_cpu{server_group='1ae77e51-ba09-452c-bc09-385f0791a366'}[150s] offset 10m)/1000000000*100/1" -c resource_name -c value
    +-------------------------------------------------------------------------+-------------------+
    | resource_name                                                           | value          	  |
    +-------------------------------------------------------------------------+-------------------+
    | st-ih4tya6-3ul7w6w66st7-mmvkxuwghjxl-vnf-dj7k7665csuv:instance-00000002 | 38.40833333333333 |
    +-------------------------------------------------------------------------+-------------------+

5.4.3. 为实例工作负载检索可用的遥测

检索实例工作负载的可用遥测,并以百分比表示 vCPU 使用率。

先决条件

  • 使用自动扩展组资源创建 heat 堆栈,以产生实例工作负载。

流程

  1. 访问 openstack 客户端 pod:

    $ oc rsh openstackclient
  2. 检索自动扩展组 heat 堆栈的 ID:

    $ openstack stack show stack1 -c id -c stack_status
    +--------------+--------------------------------------+
    | Field        | Value                                |
    +--------------+--------------------------------------+
    | id           | 0d6e19a9-2e1c-4728-b9ed-320da60c3c9d |
    | stack_status | CREATE_COMPLETE                      |
    +--------------+--------------------------------------+
  3. 将堆栈 ID 的值设置为环境变量:

    $ export STACK_ID=$(openstack stack show stack1 -c id -f value)
  4. 检索您要返回数据的工作负载实例的 ID。您可以使用服务器列表长形式,并过滤属于自动扩展组的实例:

    $ openstack server list --long --fit-width -c ID -c Name -c Properties | grep "metering.server_group='$STACK_ID'"
    | 94a776a6-ab74-41ec-9c21-26d3ca0a0138 | autoscaling_server_stack1-autoscalinggroup-l3qthrzpad67-nonm7balfxrn-sx6oebhyi3qo | metering.server_group='168364ae-afe2-4275-af28-aae01ee63b00' |
  5. 为其中一个返回的实例工作负载名称设置实例 ID:

    $ INSTANCE_ID=94a776a6-ab74-41ec-9c21-26d3ca0a0138
  6. 验证已存储了实例资源 ID 的指标。如果没有可用的指标,则没有足够的时间自实例创建后经过了。如果已经足够时间,您可以通过执行运行实例的 Compute 节点上的 podman logs ceilometer_agent_compute 来检查数据收集服务的日志,您可以通过执行 oc logs prometheus-metric-storage-0 -c prometheus 来检查时间序列数据库服务 Prometheus 的日志:

    $ openstack metric query "ceilometer_cpu{resource='$INSTANCE_ID'}" -c resource -c resource_name -c value -c unit
    +--------------------------------------+-----------------------------------------------------------------------------------------------------+------+--------------+
    | resource                             | resource_name                                                                                       | unit | value        |
    +--------------------------------------+-----------------------------------------------------------------------------------------------------+------+--------------+
    | a19f11ba-7834-4143-bf83-766af8199f04 | autoscaling_server_stack1-autoscalinggroup-5yzjn6ow4x6v-gmu2apozwluw-t7nqx63tybxh:instance-0000003c | ns   | 204290000000 |
    +--------------------------------------+-----------------------------------------------------------------------------------------------------+------+--------------+
  7. 显示收集的 ceilometer 指标:

    $ openstack metric list | grep ceilometer
    | ceilometer_cpu                            |
    | ceilometer_disk_device_allocation         |
    | ceilometer_disk_device_capacity           |
    | ceilometer_disk_device_read_bytes         |
    | ceilometer_disk_device_read_latency       |
    | ceilometer_disk_device_read_requests      |
    | ceilometer_disk_device_usage              |
    | ceilometer_disk_device_write_bytes        |
    | ceilometer_disk_device_write_latency      |
    | ceilometer_disk_device_write_requests     |
    | ceilometer_image_size                     |
    | ceilometer_memory_usage                   |
    | ceilometer_network_incoming_bytes         |
    | ceilometer_network_incoming_bytes_delta   |
    | ceilometer_network_incoming_packets       |
    | ceilometer_network_incoming_packets_drop  |
    | ceilometer_network_incoming_packets_error |
    | ceilometer_network_outgoing_bytes         |
    | ceilometer_network_outgoing_bytes_delta   |
    | ceilometer_network_outgoing_packets       |
    | ceilometer_network_outgoing_packets_drop  |
    | ceilometer_network_outgoing_packets_error |
  8. 通过查看实例工作负载的已配置类别,检索应用到工作负载实例的 vCPU 内核数:

    $ openstack server show $INSTANCE_ID -cflavor -f value
    m1.small (692533fe-0912-417e-b706-5d085449db53)
    
    $ openstack flavor show 692533fe-0912-417e-b706-5d085449db53 -c vcpus -f value
    1
  9. 返回指标增长率,以百分比计算的值。增加率返回为 CPU 时间的纳秒值,其指标在给定窗口中增加。您可以将该数字分成 1000000000,以获得数值(以秒为单位)。然后,该值通过将 100 的倍数转换为一个百分比。最后,您可以将总值除以分配给实例的类别提供的 vCPU 数量,在本示例中为 1 个 vCPU,提供一个以 CPU 时间表示的值:

    $ openstack metric query "rate(ceilometer_cpu{resource=~'$INSTANCE_ID'}[150s])/1000000000*100/1" -c resource_name -c value -c resource
    +--------------------------------------+-----------------------------------------------------------------------------------------------------+--------------------+
    | resource                             | resource_name                                                                                       | value              |
    +--------------------------------------+-----------------------------------------------------------------------------------------------------+--------------------+
    | a19f11ba-7834-4143-bf83-766af8199f04 | autoscaling_server_stack1-autoscalinggroup-5yzjn6ow4x6v-gmu2apozwluw-t7nqx63tybxh:instance-0000003c | 0.6166666666666667 |
    +--------------------------------------+-----------------------------------------------------------------------------------------------------+--------------------+
  10. 在查询中添加 offset 关键字以查看历史结果。以下命令提供与前一步类似的输出,但过去的数据 10 分钟:

    $ openstack metric query "rate(ceilometer_cpu{resource=~'$INSTANCE_ID'}[150s] offset 10m)/1000000000*100/1" -c resource_name -c value -c resource
    +--------------------------------------+-----------------------------------------------------------------------------------------------------+--------------------+
    | resource                             | resource_name                                                                                       | value              |
    +--------------------------------------+-----------------------------------------------------------------------------------------------------+--------------------+
    | a19f11ba-7834-4143-bf83-766af8199f04 | autoscaling_server_stack1-autoscalinggroup-5yzjn6ow4x6v-gmu2apozwluw-t7nqx63tybxh:instance-0000003c | 0.6083333333333333 |
    +--------------------------------------+-----------------------------------------------------------------------------------------------------+--------------------+
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部