使用 Performance Co-Pilot 分析工具包分析性能指标
- 解释
出于性能监控目的,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 获取容器映像,请转到 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
启动的服务的逗号分隔列表。默认服务为:
pmcd
、pmie
、pmlogger
、pmproxy
。可以通过此变量使用非默认的服务列表(例如,仅使用
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
配置为在引导时启动容器。为此,请按以下过程操作:
使用
podman generate systemd
命令为容器创建单元文件:#
podman generate systemd --nameCONTAINER_NAME > /etc/systemd/system/container-CONTAINER_NAME.service其中,CONTAINER_NAME 是从容器映像运行容器时使用的 PCP 容器名称。
在
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
如果设置为 1,
pmcd
守护程序将尝试重启动任何已退出的 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。要使用集中式监控系统部署多个收集器,请执行以下步骤。
在要从中收集指标的每个系统(客户端)上,使用
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在监控系统上,为每个客户端
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)。
在监控系统上,为每个客户端创建一个目录用于存储记录的日志:
#
mkdir /root/pcp-archives/CLIENT例如,对
slemicro_1
运行以下命令:#
mkdir /root/pcp-archives/slemicro_1在监控系统上,使用每个客户端的
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
文件”。要检查日志收集是否正常进行,请运行:
#
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
5 法律声明 #
版权所有 © 2006–2025 SUSE LLC 和贡献者。保留所有权利。
根据 GNU 自由文档许可证 (GNU Free Documentation License) 版本 1.2 或(根据您的选择)版本 1.3 中的条款,在此授予您复制、分发和/或修改本文档的权限;本版权声明和许可证附带不可变部分。许可版本 1.2 的副本包含在题为“GNU Free Documentation License”的部分。
有关 SUSE 商标,请参见 https://www.suse.com/company/legal/。所有其他第三方商标分别为相应所有者的财产。商标符号(®、™ 等)代表 SUSE 及其关联公司的商标。星号 (*) 代表第三方商标。
本指南力求涵盖所有细节,但这不能确保本指南准确无误。SUSE LLC 及其关联公司、作者和译者对于可能出现的错误或由此造成的后果皆不承担责任。