Red Hat Training

A Red Hat training course is available for RHEL 8

第 5 章 使用 RHEL 系统角色监控性能

作为系统管理员,您可以使用 metrics RHEL 系统角色和任何 Ansible Automation Platform 控制节点来监控系统的性能。

5.1. RHEL 系统角色简介

RHEL 系统角色是 Ansible 角色和模块的集合。RHEL 系统角色提供了一个配置界面,用于远程管理多个 RHEL 系统。这个界面允许在多个 RHEL 版本间管理系统配置,以及处理新的主发行版本。

在 Red Hat Enterprise Linux 8 中,该接口目前由以下角色组成:

  • kdump
  • network
  • selinux
  • storage
  • certificate
  • kernel_settings
  • logging
  • metrics
  • nbde_client 和 nbde_server
  • timesync
  • tlog

所有这些角色都由 AppStream 存储库中可用的 rhel-system-roles 软件包提供。

其它资源

5.2. RHEL 系统角色术语

您可以在本文档中找到以下术语:

系统角色术语

Ansible playbook
Playbook 是 Ansible 的配置、部署和编配语言。它们可以描述您希望远程系统强制使用的策略,或者在一般的 IT 进程中选择一组步骤。
控制节点
安装了 Ansible 的任何机器。您可以从任何控制节点运行命令和 playbook,调用 /usr/bin/ansible 或 /usr/bin/ansible-playbook。您可以使用任意安装了 Python 的计算机作为控制节点 - 笔记本电脑、共享桌面和服务器都可以运行 Ansible。但是,您不能使用 Windows 机器作为控制节点。您可以拥有多个控制节点。
清单(Inventory)
受管节点列表。清单文件有时也称为"hostfile"。您的清单可以为每个受管节点指定像 IP 地址等信息。清单也可以管理受管节点,创建并嵌套组以更轻松地进行扩展。如需了解更多有关清单的信息,请参阅使用清单一 节。
受管节点
使用 Ansible 管理的网络设备、服务器或两者。受管节点有时也称为 "hosts(主机)"。Ansible 未安装到受管节点上。

5.3. 在系统中安装 RHEL 系统角色

要使用 RHEL 系统角色,请安装所需的软件包。

先决条件

流程

  1. 在您要用作控制节点的系统中安装该 rhel-system-roles 软件包:

    # yum install rhel-system-roles

    如果您没有 Red Hat Ansible Engine 订阅,可以使用 Red Hat Enterprise Linux 订阅提供的有限版本的 Red Hat Ansible Engine。在这种情况下,请按照以下步骤操作:

    1. 启用 RHEL Ansible Engine 存储库:

      # subscription-manager refresh
      
      # subscription-manager repos --enable ansible-2-for-rhel-8-x86_64-rpms
    2. 安装 Ansible Engine:

      # yum install ansible

因此,您可以创建一个 Ansible playbook。

其它资源

5.4. 应用一个角色

以下流程描述了如何应用特定角色。

先决条件

  • 确定在您要用作控制节点的系统中安装了 rhel-system-roles 软件包:

    # yum install rhel-system-roles
  • 您需要 ansible 软件包来运行使用 RHEL 系统角色的 playbook。确保启用了 Ansible Engine 软件仓库,并在您要用作控制节点的系统中安装 ansible 软件包。

    • 如果您没有 Red Hat Ansible Engine 订阅,可以使用 Red Hat Enterprise Linux 订阅提供的有限版本的 Red Hat Ansible Engine。在这种情况下,请按照以下步骤操作:

      1. 启用 RHEL Ansible Engine 存储库:

        # subscription-manager refresh
        # subscription-manager repos --enable ansible-2-for-rhel-8-x86_64-rpms
      2. 安装 Ansible Engine:

        # yum install ansible
    • 如果您有 Red Hat Ansible Engine 订阅,请按照以下所述步骤操作 如何下载和安装 Red Hat Ansible Engine?
  • 确保您能够创建 Ansible 清单。

    清单表示主机、主机组,以及 Ansible playbook 使用的一些配置参数。

    playbook 通常为人类可读,并以 iniyamljson 和其他文件格式定义。

  • 确保您能够创建 Ansible playbook。

    Playbook 代表 Ansible 的配置、部署和编配语言。通过使用 playbook,您可以声明和管理远程机器的配置,部署多个远程机器,编配任何手动排序进程的步骤。

    playbook 是一个或多个 plays 的列表。每个 play 都可以包括 Ansible 变量、任务或角色。

    playbook 是人类可读的,使用 yaml 格式定义。

流程

  1. 创建所需的 Ansible 清单,使其包含您要管理的主机和组。以下是一个示例,它使用一组名为 webservers 的主机名为 inventory.ini 的文件:

    [webservers]
    host1
    host2
    host3
  2. 创建一个 Ansible playbook,包括所需角色。以下示例演示了如何通过 playbook 的 roles: 选项使用角色:

    以下示例演示了如何通过给定 roles: 选项使用角色 play:

    ---
    - hosts: webservers
      roles:
         - rhel-system-roles.network
         - rhel-system-roles.timesync
    注意

    每个角色都包括 README 文件,该文件记录如何使用角色和支持的参数值。您还可以在角色的文档目录中找到特定角色的示例 playbook。这些文档目录默认由 rhel-system-roles 软件包提供,并可在以下位置找到:

    /usr/share/doc/rhel-system-roles/SUBSYSTEM/

    SUBSYSTEM 替换为所需角色的名称,如 selinuxkdumpnetworktimesyncstorage

  3. 要在特定主机上执行 playbook,您必须执行以下任一操作:

    • 编辑 playbook 以使用 hosts: host1[,host2,…​]hosts: all 并执行该命令:

      # ansible-playbook name.of.the.playbook
    • 编辑清单,以确保在组中定义了您要使用的主机,并执行该命令:

      # ansible-playbook -i name.of.the.inventory name.of.the.playbook
    • 指定执行 ansible-playbook 命令时的所有主机:

      # ansible-playbook -i host1,host2,... name.of.the.playbook
      重要

      请注意,-i 标志指定了所有可用主机的清单。如果您有多个目标主机,但希望选择要针对其运行 playbook 的主机,您可以在 playbook 中添加变量,以便能够选择主机。例如:

      Ansible Playbook | example-playbook.yml:
      
      - hosts: "{{ target_host }}"
        roles:
           - rhel-system-roles.network
           - rhel-system-roles.timesync

      Playbook 执行命令:

      # ansible-playbook -i host1,..hostn -e target_host=host5 example-playbook.yml

5.5. 指标系统角色简介

RHEL 系统角色是 Ansible 角色和模块的集合,可为远程管理多个 RHEL 系统提供一致的配置界面。指标系统角色为本地系统配置性能分析服务,并选择性地包含要由本地系统监控的远程系统列表。借助 metrics 系统角色,您可以使用 pcp 来监控系统性能,而无需单独配置pcp,因为 playbook 处理 pcp 设置和部署。

表 5.1. 指标系统角色变量

角色变量描述用法示例

metrics_monitored_hosts

目标主机要分析的远程主机列表。这些主机将在目标主机上记录指标,以确保每个主机的 /var/log 中有足够的磁盘空间。

metrics_monitored_hosts: ["webserver.example.com", "database.example.com"]

metrics_retention_days

在删除前配置性能数据保留的天数。

metrics_retention_days: 14

metrics_graph_service

一个布尔值标记,允许主机设置有服务通过 pcpgrafana 进行性能数据视觉化。默认设置为 false。

metrics_graph_service: false

metrics_query_service

一个布尔值标记,允许主机设置时间序列查询服务,以便通过 redis 查询记录的 pcp 指标。默认设置为 false。

metrics_query_service: false

metrics_provider

指定要用于提供指标的指标收集器。目前, pcp 是唯一支持的指标提供程序。

metrics_provider: "pcp"

注意

有关使用的参数 metrics_connections 以及有关 metrics 系统角色的额外信息,请查看 /usr/share/ansible/roles/rhel-system-roles.metrics/README.md 文件。

5.6. 使用指标系统角色以可视化方式监控本地系统

此流程描述了如何在同时置备数据视觉化时使用 metrics RHEL 系统角色监控您的本地系统 grafana

先决条件

  • 您已在要监控的机器上安装了 Red Hat Ansible Engine。
  • 您需要在要监控的机器中安装 rhel-system-roles 软件包。

流程

  1. 通过 localhost 将以下内容添加到清单中,在 /etc/ansible/hosts Ansible 清单中配置:

    localhost ansible_connection=local
  2. 使用以下内容创建一个 Ansible playbook:

    ---
    - hosts: localhost
      vars:
        metrics_graph_service: yes
      roles:
        - rhel-system-roles.metrics
  3. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml
    注意

    因为 metrics_graph_service 布尔值被设置为 value="yes", grafana 它会被自动安装并置备并将 pcp 添加为数据源。

  4. 要查看您机器上收集的指标的视觉化,请访问 Grafana grafana Web UI 中的 Web 界面。

5.7. 使用 metrics 系统角色设置监控其自身的独立系统

此流程描述了如何使用 metrics 系统角色设置一组机器来监控其自身。

先决条件

  • 您已在要用来运行 playbook 的机器上安装了 Red Hat Ansible Engine。
  • 已安装要用来运行 playbook 的机器上的 rhel-system-roles 软件包。

流程

  1. 将您要通过 playbook 监控的机器的名称或 IP 添加到 /etc/ansible/hosts Ansible 清单文件中,并使用括号括起的标识组名称:

    [remotes]
    webserver.example.com
    database.example.com
  2. 使用以下内容创建一个 Ansible playbook:

    ---
    - hosts: remotes
      vars:
        metrics_retention_days: 0
      roles:
        - rhel-system-roles.metrics
  3. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml

5.8. 使用 metrics 系统角色通过本地机器集中监控机器的数量

此流程描述了如何使用 metrics 系统角色设置本地机器来集中监控机器数量,同时通过 grafana 进行数据视觉化,通过 redis 查询数据。

先决条件

  • 您已在要用来运行 playbook 的机器上安装了 Red Hat Ansible Engine。
  • 已安装要用来运行 playbook 的机器上的 rhel-system-roles 软件包。

流程

  1. 使用以下内容创建一个 Ansible playbook:

    ---
    - hosts: localhost
      vars:
        metrics_graph_service: yes
        metrics_query_service: yes
        metrics_retention_days: 10
        metrics_monitored_hosts: ["database.example.com", "webserver.example.com"]
      roles:
        - rhel-system-roles.metrics
  2. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml
    注意

    因为 metrics_graph_servicemetrics_query_service 被设置为 value="yes",grafana 会被自动安装,被置备为带有 pcp 作为 pcp 数据源索引到 redis,从而可以使用 pcp 查询语言对数据进行复杂的查询。

  3. 要查看机器集中收集的指标的图形表示,并查询数据,请访问 grafana Web 界面,如访问 Grafana web UI 所述。

5.9. 使用 metrics 系统角色监控系统时设置身份验证

PCP 通过 Simple Authentication Security Layer(SASL)框架支持 scram-sha-256 验证机制。metrics RHEL 系统角色使用 scram-sha-256 身份验证机制自动执行设置身份验证的步骤。这个步骤描述了如何使用 metrics RHEL 系统角色设置身份验证。

先决条件

  • 您已在要用来运行 playbook 的机器上安装了 Red Hat Ansible Engine。
  • 已安装要用来运行 playbook 的机器上的 rhel-system-roles 软件包。

流程

  1. 在您要为其设置身份验证的 Ansible playbook 中包含以下变量:

    ---
      vars:
        metrics_username: your_username
        metrics_password: your_password
  2. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml

验证步骤

  • 验证 sasl 配置:

    # pminfo -f -h "pcp://127.0.0.1?username=your_username" disk.dev.read
    Password:
    disk.dev.read
    inst [0 or "sda"] value 19540

5.10. 使用 metrics 系统角色为 SQL Server 配置和启用指标集合

这个步骤描述了如何使用 metrics RHEL 系统角色通过本地系统中的 pcp 为 Microsoft SQL Server 自动配置和启用指标集合。

先决条件

  • 您已在要监控的机器上安装了 Red Hat Ansible Engine。
  • 您需要在要监控的机器中安装 rhel-system-roles 软件包。
  • 您已安装了用于红帽企业 Linux 的 Microsoft SQL Server 并建立了与 SQL 服务器的"可信"连接。
  • 您已安装了适用于红帽企业 Linux 的 SQL Server 的 Microsoft ODBC 驱动程序。

流程

  1. 通过 localhost 将以下内容添加到清单中,在 /etc/ansible/hosts Ansible 清单中配置:

    localhost ansible_connection=local
  2. 创建一个包含以下内容的 Ansible playbook:

    ---
    - hosts: localhost
      roles:
        - role: rhel-system-roles.metrics
          vars:
            metrics_from_sql: yes
  3. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml

验证步骤

  • 使用 pcp 命令验证 SQL Server PMDA 代理(mssql)是否已加载并正在运行:

    # pcp
    platform: Linux rhel82-2.local 4.18.0-167.el8.x86_64 #1 SMP Sun Dec 15 01:24:23 UTC 2019 x86_64
     hardware: 2 cpus, 1 disk, 1 node, 2770MB RAM
     timezone: PDT+7
     services: pmcd pmproxy
         pmcd: Version 5.0.2-1, 12 agents, 4 clients
         pmda: root pmcd proc pmproxy xfs linux nfsclient mmv kvm mssql
               jbd2 dm
     pmlogger: primary logger: /var/log/pcp/pmlogger/rhel82-2.local/20200326.16.31
         pmie: primary engine: /var/log/pcp/pmie/rhel82-2.local/pmie.log


[1] 本文档会随 rhel-system-roles 软件包自动安装。