配置 Watcher

本文档会持续更新,并反映 Watcher 服务的最新可用代码。

服务概述

Watcher 系统是一系列服务集合,旨在优化您的 IaaS 平台。根据配置的不同,Watcher 服务可能会与多个其他 OpenStack 服务进行交互。这包括

  • OpenStack Identity 服务 (keystone),用于请求身份验证和定位其他 OpenStack 服务。

  • OpenStack Telemetry 服务 (ceilometer),用于收集资源指标。

  • 时序数据库 (gnocchi),用于消费资源指标。

  • OpenStack Compute 服务 (nova) 与 Watcher 服务协同工作,并作为实例迁移的用户界面 API。

  • OpenStack Bare Metal 服务 (ironic) 与 Watcher 服务协同工作,并允许管理节点的电源状态。

  • OpenStack Block Storage 服务 (cinder) 与 Watcher 服务协同工作,并作为卷节点迁移的 API。

Watcher 服务包括以下组件

  • watcher-decision-engine:在您的 IaaS 的一部分上运行审计,并返回一个行动计划,以优化资源放置。

  • watcher-api:一个 RESTful API,通过 RPC 将应用程序请求发送到 watcher-decision-engine 进行处理。

  • watcher-applier:应用行动计划。

  • python-watcherclient:一个用于与 Watcher 服务交互的命令行界面 (CLI)。

  • watcher-dashboard:一个 Horizon 插件,用于与 Watcher 服务交互。

此外,Watcher 服务具有某些外部依赖项,这些依赖项与其他 OpenStack 服务非常相似

  • 一个用于存储审计和行动计划信息和状态的数据库。您可以设置数据库后端类型和位置。

  • 一个队列。用于传递消息的中央枢纽,例如 RabbitMQ

可选地,您可能希望使用以下相关项目以获得其他功能

  • watcher metering:一种替代方案,用于收集并将指标推送到 Telemetry 服务。

安装和配置先决条件

您可以配置 Watcher 服务在单独的节点或同一节点上运行。在本指南中,组件在一个节点上运行,通常是 Controller 节点。

本节介绍如何安装和配置这些服务。

它假定 Identity、Image、Compute 和 Networking 服务已经设置完毕。

为 Watcher 服务配置 Identity 服务

  1. 创建 Watcher 服务用户(例如 watcher)。该服务使用它与 Identity 服务进行身份验证。使用 KEYSTONE_SERVICE_PROJECT_NAME 项目(默认情况下在 devstack 中命名为 service),并授予用户 admin 角色

    $ keystone user-create --name=watcher --pass=WATCHER_PASSWORD \
      --email=watcher@example.com \
      --tenant=KEYSTONE_SERVICE_PROJECT_NAME
    $ keystone user-role-add --user=watcher \
      --tenant=KEYSTONE_SERVICE_PROJECT_NAME --role=admin
    

    或者(使用 python-openstackclient 1.8.0+)

    $ openstack user create  --password WATCHER_PASSWORD --enable \
      --email watcher@example.com watcher \
      --project=KEYSTONE_SERVICE_PROJECT_NAME
    $ openstack role add --project KEYSTONE_SERVICE_PROJECT_NAME \
      --user watcher admin
    
  2. 您必须在 Identity 服务中注册 Watcher 服务,以便其他 OpenStack 服务可以找到它。要注册该服务

    $ keystone service-create --name=watcher --type=infra-optim \
      --description="Infrastructure Optimization service"
    

    或者(使用 python-openstackclient 1.8.0+)

    $ openstack service create --name watcher infra-optim \
      --description="Infrastructure Optimization service"
    
  3. 通过将 YOUR_REGION 和 WATCHER_API_[PUBLIC|ADMIN|INTERNAL]_IP 替换为您的区域和 Watcher 服务的 API 节点 IP 地址(或 FQDN)来创建端点

    $ keystone endpoint-create \
    --service-id=the_service_id_above \
    --publicurl=http://WATCHER_API_PUBLIC_IP:9322 \
    --internalurl=http://WATCHER_API_INTERNAL_IP:9322 \
    --adminurl=http://WATCHER_API_ADMIN_IP:9322
    

    或者(使用 python-openstackclient 1.8.0+)

    $ openstack endpoint create --region YOUR_REGION
      watcher public http://WATCHER_API_PUBLIC_IP:9322
    
    $ openstack endpoint create --region YOUR_REGION
      watcher internal http://WATCHER_API_INTERNAL_IP:9322
    
    $ openstack endpoint create --region YOUR_REGION
      watcher admin http://WATCHER_API_ADMIN_IP:9322
    

为 Watcher 设置数据库

Watcher 服务将信息存储在数据库中。本指南使用其他 OpenStack 服务使用的 MySQL 数据库。

  1. 在 MySQL 中,创建一个可供 watcher 用户访问的 watcher 数据库。将 WATCHER_DBPASSWORD 替换为实际密码

    # mysql
    
    mysql> CREATE DATABASE watcher CHARACTER SET utf8;
    mysql> GRANT ALL PRIVILEGES ON watcher.* TO 'watcher'@'localhost' \
    IDENTIFIED BY 'WATCHER_DBPASSWORD';
    mysql> GRANT ALL PRIVILEGES ON watcher.* TO 'watcher'@'%' \
    IDENTIFIED BY 'WATCHER_DBPASSWORD';
    

配置 Watcher 服务

Watcher 服务通过其配置文件进行配置。该文件通常位于 /etc/watcher/watcher.conf

您可以使用以下命令轻松生成和更新名为 watcher.conf.sample 的示例配置文件

$ git clone https://opendev.org/openstack/watcher.git
$ cd watcher/
$ tox -e genconfig
$ vi etc/watcher/watcher.conf.sample

配置文件组织为以下部分

  • [DEFAULT] - 通用配置

  • [api] - API 服务器配置

  • [database] - SQL 驱动程序配置

  • [keystone_authtoken] - Keystone 身份验证插件配置

  • [watcher_clients_auth] - 客户端的 Keystone 身份验证配置

  • [watcher_applier] - Watcher Applier 模块配置

  • [watcher_decision_engine] - Watcher Decision Engine 模块配置

  • [oslo_messaging_rabbit] - Oslo Messaging RabbitMQ 驱动程序配置

  • [cinder_client] - Cinder 客户端配置

  • [glance_client] - Glance 客户端配置

  • [gnocchi_client] - Gnocchi 客户端配置

  • [ironic_client] - Ironic 客户端配置

  • [keystone_client] - Keystone 客户端配置

  • [nova_client] - Nova 客户端配置

  • [neutron_client] - Neutron 客户端配置

  • [placement_client] - Placement 客户端配置

Watcher 配置文件应命名为 watcher.conf。启动 Watcher 时,您可以使用 --config-file 指定要使用的其他配置文件。如果您指定配置文件,Watcher 将按以下顺序在以下目录中查找配置文件

  • ~/.watcher/

  • ~/

  • /etc/watcher/

  • /etc/

虽然此处提到了一些配置选项,但建议您查看所有 可用选项,以便根据您的需求配置 watcher 服务。

  1. Watcher 服务将信息存储在数据库中。本指南使用其他 OpenStack 服务使用的 MySQL 数据库。

    通过 connection 选项配置数据库的位置。在以下示例中,将 WATCHER_DBPASSWORD 替换为您的 watcher 用户的密码,并将 DB_IP 替换为 DB 服务器的 IP 地址

    [database]
    ...
    
    # The SQLAlchemy connection string used to connect to the
    # database (string value)
    #connection=<None>
    connection = mysql+pymysql://watcher:WATCHER_DBPASSWORD@DB_IP/watcher?charset=utf8
    
  2. 通过设置这些选项之一来配置 Watcher 服务以使用 RabbitMQ 消息代理。将 RABBIT_HOST 替换为 RabbitMQ 服务器的 IP 地址,将 RABBITMQ_USER 和 RABBITMQ_PASSWORD 替换为 RabbitMQ 服务器的登录凭据

    [DEFAULT]
    
    # The default exchange under which topics are scoped. May be
    # overridden by an exchange name specified in the transport_url
    # option. (string value)
    control_exchange = watcher
    
    # ...
    transport_url = rabbit://RABBITMQ_USER:RABBITMQ_PASSWORD@RABBIT_HOST
    
  3. Watcher API 将通过 keystonemiddleware 验证每个传入请求提供的令牌,这需要使用正确的 Identity 服务凭据配置 Watcher 服务。

    在下面的配置部分

    • 将 IDENTITY_IP 替换为 Identity 服务器的 IP

    • 将 WATCHER_PASSWORD 替换为您为 watcher 用户选择的密码

    • 将 KEYSTONE_SERVICE_PROJECT_NAME 替换为为 OpenStack 服务创建的项目名称(例如 service

      [keystone_authtoken]
      
      # Authentication type to load (unknown value)
      # Deprecated group/name - [DEFAULT]/auth_plugin
      #auth_type = <None>
      auth_type = password
      
      # Authentication URL (unknown value)
      #auth_url = <None>
      auth_url = http://IDENTITY_IP:5000
      
      # Username (unknown value)
      # Deprecated group/name - [DEFAULT]/username
      #username = <None>
      username=watcher
      
      # User's password (unknown value)
      #password = <None>
      password = WATCHER_PASSWORD
      
      # Domain ID containing project (unknown value)
      #project_domain_id = <None>
      project_domain_id = default
      
      # User's domain id (unknown value)
      #user_domain_id = <None>
      user_domain_id = default
      
      # Project name to scope to (unknown value)
      # Deprecated group/name - [DEFAULT]/tenant-name
      #project_name = <None>
      project_name = KEYSTONE_SERVICE_PROJECT_NAME
      
  4. Watcher 的决策引擎和 applier 通过这些项目的客户端与其他的 OpenStack 项目交互。为了实例化这些客户端,Watcher 需要使用正确的凭据从 Identity 服务请求新的会话。

    在下面的配置部分

    • 将 IDENTITY_IP 替换为 Identity 服务器的 IP

    • 将 WATCHER_PASSWORD 替换为您为 watcher 用户选择的密码

    • 将 KEYSTONE_SERVICE_PROJECT_NAME 替换为为 OpenStack 服务创建的项目名称(例如 service

      [watcher_clients_auth]
      
      # Authentication type to load (unknown value)
      # Deprecated group/name - [DEFAULT]/auth_plugin
      #auth_type = <None>
      auth_type = password
      
      # Authentication URL (unknown value)
      #auth_url = <None>
      auth_url = http://IDENTITY_IP:5000
      
      # Username (unknown value)
      # Deprecated group/name - [DEFAULT]/username
      #username = <None>
      username=watcher
      
      # User's password (unknown value)
      #password = <None>
      password = WATCHER_PASSWORD
      
      # Domain ID containing project (unknown value)
      #project_domain_id = <None>
      project_domain_id = default
      
      # User's domain id (unknown value)
      #user_domain_id = <None>
      user_domain_id = default
      
      # Project name to scope to (unknown value)
      # Deprecated group/name - [DEFAULT]/tenant-name
      #project_name = <None>
      project_name = KEYSTONE_SERVICE_PROJECT_NAME
      
  5. 如果需要,可以配置客户端使用特定版本。例如,要配置 Watcher 使用版本为 2.1 的 Nova 客户端,请使用

    [nova_client]
    
    # Version of Nova API to use in novaclient. (string value)
    #api_version = 2.56
    api_version = 2.1
    
  6. 创建 Watcher 服务数据库表

    $ watcher-db-manage --config-file /etc/watcher/watcher.conf create_schema
    
  7. 启动 Watcher 服务

    $ watcher-api &&  watcher-decision-engine && watcher-applier
    

配置 Nova compute

请检查您的 hypervisor 配置,以正确处理 实例迁移

配置 Measurements

您可以按照以下文档配置和安装 Ceilometer

  1. https://docs.openstack.org/ceilometer/latest

Watcher 提供的内置策略 ‘basic_consolidation’ 需要 Ceilometer 收集 “compute.node.cpu.percent” 和 “cpu” 指标。可用的指标取决于 OpenStack 管理的 hypervisor 和 OpenStack 版本。您可以在 OpenStack 网站上找到每个 hypervisor 和 OpenStack 版本的可用指标。您可以使用 ‘ceilometer meter-list’ 列出可用的计量器。

更多信息:https://docs.openstack.org/ceilometer/2025.2/admin/telemetry-measurements.html

Ceilometer 旨在从 OpenStack 服务和其他外部组件收集指标。如果您想添加新的计量器到当前存在的计量器中,您需要遵循以下文档

  1. https://docs.openstack.org/ceilometer/2025.2/contributor/measurements.html#new-measurements

Ceilometer collector 使用可插拔的存储系统,这意味着您可以选择任何您喜欢的数据库系统。最初的实现基于 MongoDB,但您可以使用任何您想要的技术创建自己的存储驱动程序。更多信息:https://wiki.openstack.org/wiki/Gnocchi

配置 Nova Notifications

Watcher 可以消费 Nova 服务生成的通知,以便实时构建或更新其与计算资源相关的集群数据模型。

Nova 发出未版本化(legacy)和版本化的通知到不同的主题。由于 legacy 通知将被弃用,Watcher 消费 Nova 版本化的通知。

  • 在文件 /etc/nova/nova.conf 中,[oslo_messaging_notifications] 部分中的 driver 值不能为 noop,并且 [notifications] 部分中的 notification_format 值应为 both 或 versioned

    [oslo_messaging_notifications]
    driver = messagingv2
    
    ...
    
    [notifications]
    notification_format = both
    

配置 Cinder Notifications

Watcher 还可以消费 Cinder 服务生成的通知,以便实时构建或更新其与存储资源相关的集群数据模型。

Cinder 在 notifications 主题上发出通知,在 openstack control exchange 中(如 Cinder conf 中所示)。

  • 在文件 /etc/cinder/cinder.conf 中,[oslo_messaging_notifications] 部分中的 driver 值不能为 noop。

    [oslo_messaging_notifications] driver = messagingv2

配置 Watcher 监听 Notifications

为了消费 Cinder 或 Nova 通知(或两者),Watcher 必须配置为监听 Cinder 和 Nova 发出的通知主题。

使用 notification_topics 配置选项来指示 Watcher 应该监听正确的主题。默认情况下,Cinder 在 openstack.notifications 上发出通知,而 Nova 在 nova.versioned_notifications 上发出通知。Watcher 配置文件应具有所需通知的主题,以下是 Cinder 和 Nova 的示例

[watcher_decision_engine]

...

notification_topics = nova.versioned_notifications,openstack.notifications

Workers

您可以为决策引擎和 Applier 定义工作者数量。

如果您想同时创建和运行更多的审计,您必须提高决策引擎使用的工作者数量

[watcher_decision_engine]

...

# The maximum number of threads that can be used to execute strategies
# (integer value)
#max_workers = 2

如果您想同时执行更多的推荐行动计划,您必须提高 Applier 使用的工作者数量

[watcher_applier]

...

# Number of workers for applier, default value is 1. (integer value)
# Minimum value: 1
#workers = 1