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 堆栈,以产生实例工作负载。
流程
访问 openstack 客户端 pod:
$ oc rsh openstackclient检索自动扩展组 heat 堆栈的
stack_id:$ openstack stack show stack1 -c id +-------+--------------------------------------+ | Field | Value | +-------+--------------------------------------+ | id | 1ae77e51-ba09-452c-bc09-385f0791a366 | +-------+--------------------------------------+返回指标增长率,以百分比计算的值。增加率返回为 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 | +-------------------------------------------------------------------------+-------+您可以通过在查询中添加 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 堆栈,以产生实例工作负载。
流程
访问 openstack 客户端 pod:
$ oc rsh openstackclient检索自动扩展组 heat 堆栈的 ID:
$ openstack stack show stack1 -c id -c stack_status +--------------+--------------------------------------+ | Field | Value | +--------------+--------------------------------------+ | id | 0d6e19a9-2e1c-4728-b9ed-320da60c3c9d | | stack_status | CREATE_COMPLETE | +--------------+--------------------------------------+将堆栈 ID 的值设置为环境变量:
$ export STACK_ID=$(openstack stack show stack1 -c id -f value)检索您要返回数据的工作负载实例的 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' |为其中一个返回的实例工作负载名称设置实例 ID:
$ INSTANCE_ID=94a776a6-ab74-41ec-9c21-26d3ca0a0138验证已存储了实例资源 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 | +--------------------------------------+-----------------------------------------------------------------------------------------------------+------+--------------+显示收集的 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 |通过查看实例工作负载的已配置类别,检索应用到工作负载实例的 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返回指标增长率,以百分比计算的值。增加率返回为 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 | +--------------------------------------+-----------------------------------------------------------------------------------------------------+--------------------+在查询中添加 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 | +--------------------------------------+-----------------------------------------------------------------------------------------------------+--------------------+