跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / 使用 Performance Co-Pilot 分析工具包分析性能指标

使用 Performance Co-Pilot 分析工具包分析性能指标

出版日期:2025-03-06
解释

出于性能监控目的,SUSE Linux Enterprise Micro 提供了一个容器映像,用于在容器中运行 Performance Co-Pilot (PCP) 分析工具包。

原因

您想要监控系统性能。本文提供了有关如何配置和使用该工具包的信息。

工作量

读完本文大约需要 40 分钟。

目标

您可以使用符合需求的配置启动 PCP 容器。

要求
  • 一个正在运行的 SLE Micro 实例

1 Performance Co-Pilot 分析工具包

该工具包中的工具可以实时收集或从 PCP 存档日志收集性能信息并对其进行处理。

性能数据由性能指标域代理收集,并传递给 pmcd 守护程序。该守护程序协调性能统计信息的收集和导出,以响应 PCP 监控工具的请求。然后使用 pmlogger 来记录指标。有关细节,请参见 PCP 文档

1.1 获取 PCP 容器映像

PCP 容器映像基于 BCI-Init 容器,该容器利用 systemd 来管理 PCP 服务。

可以使用 Podman 或者从 Cockpit Web 管理控制台提取容器映像。要使用 Podman 提取映像,请运行以下命令:

# podman pull registry.suse.com/suse/pcp:latest

要使用 Cockpit 获取容器映像,请转到 Podman 容器,单击获取新映像,并搜索 pcp。然后在 registry.suse.com 中选择并下载适用于 SLE 15 SP4 的映像。

2 运行 PCP 容器

以下命令显示了为运行 PCP 容器而至少需要使用的选项:

# podman run -d  \
  --systemd always \
  -pHOST_IP:HOST_PORT:CONTAINER_PORT \
 -v HOST_DIR:/var/log/pcp/pmlogger \
  PCP_CONTAINER_IMAGE

其中各选项的含义如下:

-d

容器在没有 tty 的情况下以分离模式运行。

--systemd always

systemd 模式下运行容器。需要在 PCP 容器中运行的所有服务由容器中的 systemd 自动启动。

--privileged

容器以扩展的特权运行。如果您的系统启用了 SELinux,请使用此选项,否则收集的指标是不完整的。

-v HOST_DIR:/var/log/pcp/pmlogger

创建绑定挂载,以便将 pmlogger 存档写入主机上的 HOST_DIR。默认情况下,pmlogger 将收集的指标存储在 /var/log/pcp/pmlogger 中。

PCP_CONTAINER_IMAGE

下载的 PCP 容器映像。

podman run 命令的其他有用选项如下:

其他选项
-p HOST_IP:HOST_PORT:CONTAINER_PORT

通过将容器端口映射到主机端口来发布容器端口。如果未指定 HOST_IP,则端口将映射到本地主机。如果省略 HOST_PORT 值,则使用随机端口号。默认情况下,pmcd 守护程序会侦听并公开 PMAPI 以接收端口 44321 上的指标,因此我们建议将此端口映射到主机上的相同端口号。默认情况下,pmproxy 守护程序侦听并公开 REST PMWEBAPI 以访问端口 44322 端口上的指标,因此建议将此端口映射到相同的主机端口号。

--net host

容器使用主机的网络。使用此选项可从主机的网络接口收集指标。

-e

使用该选项可设置以下环境变量:

PCP_SERVICES

容器中 systemd 启动的服务的逗号分隔列表。

默认服务为:pmcdpmiepmloggerpmproxy

可以通过此变量使用非默认的服务列表(例如,仅使用 pmlogger)来运行容器:

# podman run -d \
  --name pmlogger \
  --systemd always \
  -e PCP_SERVICES=pmlogger  \
  -v pcp-archives:/var/log/pcp/pmlogger  \
  registry.suse.com/suse/pcp:latest
HOST_MOUNT

容器内部指向主机根文件系统的绑定挂载点的路径。未设置默认值。

REDIS_SERVERS

指定与 Redis 服务器的连接。在非群集设置中,请提供逗号分隔的主机规格列表。在群集设置中,请提供任一群集主机,系统会自动发现群集中的其他主机。默认值为:localhost:6379

如果需要使用其他配置,而不是环境变量提供的配置,请按照第 3 节 “配置 PCP 服务”中所述继续操作。

2.1 引导时自动启动 PCP 容器

运行 PCP 容器后,可将 systemd 配置为在引导时启动容器。为此,请按以下过程操作:

  1. 使用 podman generate systemd 命令为容器创建单元文件:

    # podman generate systemd --nameCONTAINER_NAME > /etc/systemd/system/container-CONTAINER_NAME.service

    其中,CONTAINER_NAME 是从容器映像运行容器时使用的 PCP 容器名称。

  2. systemd 中启用服务:

    # systemctl enable container-CONTAINER_NAME

3 配置 PCP 服务

在 PCP 容器内部运行的所有服务的默认配置可能不符合您的需要。如果需要创建无法被环境变量覆盖的自定义配置,请为 PCP 服务创建配置文件,并使用绑定挂载点将其传递给 PCP,如下所示:

# podman run -d \
  --nameCONTAINER_NAME \
 --systemd always \
 -v $HOST_CONFIG:CONTAINER_CONFIG_PATH:z \
  -v HOST_LOGS_PATH:/var/log/pcp/pmlogger  \
  registry.suse.com/suse/pcp:latest

其中:

CONTAINER_NAME

可选的容器名称。

HOST_CONFIG

在主机上创建的配置的绝对路径。您可以选择所需的任何文件名。

CONTAINER_CONFIG_PATH

容器内部特定配置文件的绝对路径。后续相应章节将介绍每个可用的配置文件。

HOST_LOGS_PATH

一个目录,应是容器日志的绑定挂载点。

例如,以下命令运行名为 pcp 的容器,其中包含主机上的 pmcd 配置文件以及主机上的 pcp-archives 日志目录:

# podman run -d \
  --name pcp  \
  --systemd always \
  -v $(pwd)/pcp-archives:/var/log/pcp/pmlogger \
  -v $(pwd)/pmcd:/etc/sysconfig/pmcd \
registry.suse.com/suse/pcp:latest

3.1 自定义 pmcd 守护程序配置

pmcd 守护程序配置存储在 /etc/sysconfig/pmcd 文件中。该文件存储了用于修改 pmcd 守护程序行为的环境变量。

可将以下变量添加到 /etc/sysconfig/pmcd 文件以配置 pmcd 守护程序:

PMCD_LOCAL

定义远程主机是否可以连接到 pmcd 守护程序。如果设置为 0,则允许与守护程序建立远程连接。如果设置为 1,则守护程序仅侦听本地主机。默认值为 0

PMCD_MAXPENDING

定义与代理建立的最大等待中连接计数。默认值为 5

PMCD_ROOT_AGENT

如果启用了 pmdaroot(值设置为 1),则添加新的 PDMA 不会触发其他 PMDA 的重启动。如果未启用 pmdaroot,则 pmcd 要求在添加新的 PMDA 后重启动所有 PMDA。默认值为 1

PMCD_RESTART_AGENTS

如果设置为 1pmcd 守护程序将尝试重启动任何已退出的 PMDA。请仅在启用了 pmdaroot 时才启用此选项,因为 pmcd 本身无权重启动 PMDA。

PMCD_WAIT_TIMEOUT

定义 pmcd 可以等待接受连接的最长时间(以秒为单位)。在此时间过后,会将连接报告为失败。默认值为 60

PCP_NSS_INIT_MODE

定义在使用安全连接时,pmcd 以哪种模式初始化 NSS 证书数据库。默认值为 readonly.可将模式设置为 readwrite,但如果初始化失败,将使用默认值作为回退模式。

示例如下:

PMCD_LOCAL=0
      PMCD_MAXPENDING=5
      PMCD_ROOT_AGENT=1
      PMCD_RESTART_AGENTS=1
      PMCD_WAIT_TIMEOUT=70
      PCP_NSS_INIT_MODE=readwrite

3.2 自定义 pmlogger 配置

pmlogger 的自定义配置存储在以下配置文件中:

  • /etc/sysconfig/pmlogger

  • /etc/pcp/pmlogger/control.d/local

3.2.1 /etc/sysconfig/pmlogger 文件

可使用以下属性来配置 pmlogger

PMLOGGER_LOCAL

定义 pmlogger 是否允许来自远程主机的连接。如果设置为 1,则 pmlogger 只允许来自本地主机的连接。

PMLOGGER_MAXPENDING

定义最大等待中连接计数。默认值为 5。

PMLOGGER_INTERVAL

定义 pmlogger 使用的默认采样间隔。默认值为 60 s。请记住,可以通过 pmlogger 命令行覆盖此值。

PMLOGGER_CHECK_SKIP_LOGCONF

如果将此选项设置为 yes,在 pmlogger 配置来自 pmlogconf 的情况下,会禁用 pmlogger 配置的重新生成和检查。默认行为是重新生成配置文件,并在每次启动 pmlogger 时检查更改。

示例如下:

PMLOGGER_LOCAL=1
PMLOGGER_MAXPENDING=5
PMLOGGER_INTERVAL=10
PMLOGGER_CHECK_SKIP_LOGCONF=yes

3.2.2 /etc/pcp/pmlogger/control.d/local 文件

文件 /etc/pcp/pmlogger/control.d/local 存储主机的规格,即应记录的指标、日志记录频率(默认值为 24 小时)和 pmlogger 选项。例如:

# === VARIABLE ASSIGNMENTS ===
#
# DO NOT REMOVE OR EDIT THE FOLLOWING LINE
$version=1.1

# Uncomment one of the lines below to enable/disable compression behaviour
# that is different to the pmlogger_daily default.
# Value is days before compressing archives, 0 is immediate compression,
# "never" or "forever" suppresses compression.
#
#$PCP_COMPRESSAFTER=0
#$PCP_COMPRESSAFTER=3
#$PCP_COMPRESSAFTER=never

# === LOGGER CONTROL SPECIFICATIONS ===
#
#Host           P?  S?  directory                       args

# local primary logger
LOCALHOSTNAME   y   n   PCP_ARCHIVE_DIR/LOCALHOSTNAME   -r -T24h10m -c config.default -v 100Mb
注意
注意:默认值指向本地主机

如果在其他计算机而不是运行 pmcd 的计算机(客户端)上的容器中运行 pmlogger,请更改以下行以指向客户端:

# local primary logger
CLIENT_HOSTNAME   y   n   PCP_ARCHIVE_DIR/CLIENT_HOSTNAME   -r -T24h10m -c config.default -v 100Mb

例如,对于 slemicro_1 主机名,该行应如下所示:

# local primary logger
slemicro_1   y   n   PCP_ARCHIVE_DIR/slemicro_1   -r -T24h10m -c config.default -v 100Mb

4 管理 PCP 指标

4.1 列出 PCP 指标

在容器中,可以使用 pminfo 命令列出指标。例如,要列出所有可用的性能指标,请运行:

# pminfo

可以通过指定指标前缀来列出一组相关指标:

# pminfoMETRIC_PREFIX

例如,要列出与内核相关的所有指标,请使用:

# pminfo disk

disk.dev.r_await
disk.dm.await
disk.dm.r_await
disk.md.await
disk.md.r_await
...

还可以指定其他字符串来缩小指标列表的范围,例如:

# piminfo disk.dev

disk.dev.read
disk.dev.write
disk.dev.total
disk.dev.blkread
disk.dev.blkwrite
disk.dev.blktotal
...

要获取特定指标的联机帮助文本,请使用 -t 选项加上指标,例如:

# pminfo -t kernel.cpu.util.user

kernel.cpu.util.user [percentage of user time across all CPUs, including guest CPU time]

要显示特定指标的说明文本,请使用 -T 选项加上指标,例如:

# pminfo -T kernel.cpu.util.user

Help:
percentage of user time across all CPUs, including guest CPU time

4.2 检查本地指标

启动 PCP 容器后,可以通过在容器内部运行以下命令来校验是否正确记录了指标:

# pcp

Performance Co-Pilot configuration on localhost:

 platform: Linux localhost 5.3.18-150300.59.68-default #1 SMP Wed May 4 11:29:09 UTC 2022 (ea30951) x86_64
 hardware: 1 cpu, 1 disk, 1 node, 1726MB RAM
 timezone: UTC
 services: pmcd pmproxy
     pmcd: Version 5.2.2-1, 9 agents, 4 clients
     pmda: root pmcd proc pmproxy xfs linux mmv kvm jbd2
 pmlogger: primary logger: /var/log/pcp/pmlogger/localhost/20220607.09.24
     pmie: primary engine: /var/log/pcp/pmie/localhost/pmie.log

现在检查日志是否已写入正确的目标:

# lsPATH_TO_PMLOGGER_LOGS

在本例中,PATH_TO_PMLOGGER_LOGS 应是 /var/log/pcp/pmlogger/localhost/

4.3 从远程系统记录指标

您可以部署收集器容器,用于从其他远程系统(而不是运行 pmlogger 容器的系统)收集指标。每个远程收集器系统都需要 pmcd 守护程序和一组 pmda。要使用集中式监控系统部署多个收集器,请执行以下步骤。

  1. 在要从中收集指标的每个系统(客户端)上,使用 pmcd 守护程序运行容器:

    # podman run -d \
        --name pcp-pmcd \
        --privileged \
        --net host \
        --systemd always \
        -e PCP_SERVICES=pmcd \
        -e HOST_MOUNT=/host \
        -v /:/host:ro,rslave \
        registry.suse.com/suse/pcp:latest
  2. 在监控系统上,为每个客户端 control.CLIENT 创建包含以下内容的 pmlogger 配置文件:

    $version=1.1
    
    CLIENT_HOSTNAME n n PCP_ARCHIVE_DIR/CLIENT -N -r -T24h10m -c config.default -v 100Mb

    请记住,CLIENT_HOSTNAME 必须在 DNS 中可解析。可以改用 IP 地址或完全限定的域名 (FQDN)。

  3. 在监控系统上,为每个客户端创建一个目录用于存储记录的日志:

    # mkdir /root/pcp-archives/CLIENT

    例如,对 slemicro_1 运行以下命令:

    # mkdir /root/pcp-archives/slemicro_1
  4. 在监控系统上,使用每个客户端的 pmlogger 运行一个容器:

    # podman run -d \
        --name pcp-pmlogger-CLIENT \
     --systemd always \
     -e PCP_SERVICES=pmlogger \
     -v /root/pcp-archives/CLIENT:/var/log/pcp/pmlogger:z \
        -v $(pwd)/control.CLIENT:/etc/pcp/pmlogger/control.d/local:z \
        registry.suse.com/suse/pcp:latest

    例如,对名为 slemicro_1 的客户端运行以下命令:

    # podman run -d \
        --name pcp-pmlogger-slemicro_1 \
        --systemd always \
        -e PCP_SERVICES=pmlogger \
        -v /root/pcp-archives:/var/log/pcp/pmlogger:z \
        -v $(pwd)/control.slemicro_1:/etc/pcp/pmlogger/control.d/local:z \
        registry.suse.com/suse/pcp:latest
    注意
    注意

    第二个绑定挂载点指向 步骤 2 中创建的配置文件,并替换默认的 pmlogger 配置。如果您未创建此绑定挂载点,pmlogger 将使用默认的 /etc/pcp/pmlogger/control.d/local 文件,并且从客户端记录日志将会失败,因为默认配置指向本地主机。有关配置文件的细节,请参见 第 3.2.2 节 “/etc/pcp/pmlogger/control.d/local 文件”

  5. 要检查日志收集是否正常进行,请运行:

    # ls -l pcp-archives/CLIENT/CLIENT

    例如:

    # ls -l pcp-archives/slemicro_1/slemicro_1
    
    total 1076
    -rw-r--r--. 1 systemd-network systemd-network 876372 Jun  8 11:24 20220608.10.58.0
    -rw-r--r--. 1 systemd-network systemd-network    312 Jun  8 11:22 20220608.10.58.index
    -rw-r--r--. 1 systemd-network systemd-network 184486 Jun  8 10:58 20220608.10.58.meta
    -rw-r--r--. 1 systemd-network systemd-network    246 Jun  8 10:58 Latest
    -rw-r--r--. 1 systemd-network systemd-network  24595 Jun  8 10:58 pmlogger.log