Performance Co-Pilot 7.2.2 配置参数详解
Performance Co-Pilot 7.2.2 配置体系全景解读:/etc/pcp.conf 全局路径、pmcd/pmlogger/pmie/pmproxy 四大守护进程参数逐项详解、采样间隔三级覆盖闭环实测、访问控制规则语法、派生指标加载机制与排障实录,附生产配置模板。
Performance Co-Pilot 7.2.2 配置参数详解
目标:把 Performance Co-Pilot(PCP)7.2.2 的整套配置体系讲透——全局路径文件
/etc/pcp.conf、pmcd 采集守护进程、pmlogger 归档器、pmie 推理引擎、pmproxy Web 代理四大组件的配置文件逐项解读,采样间隔三级覆盖机制的闭环实测,访问控制([access])规则,派生指标(derived metrics)的加载机制与排障实录,最后给出生产配置模板。本篇所有配置文件原文与命令输出均来自真实服务器实测。
一、环境信息
本篇在一台已完成 PCP 安装的服务器上实测(安装过程见 《Ubuntu 22.04 安装 Performance Co-Pilot 7.2.2 指南》),环境信息如下:
| 项目 | 值 |
|---|---|
| 主机名 | pcp-server |
| 操作系统 | Ubuntu 22.04.5 LTS |
| PCP 版本 | 7.2.2(Packagecloud 官方仓库,7.2.2-1) |
| 核心服务 | pmcd / pmlogger / pmie / pmproxy 全部 active |
| pmcd 监听端口 | TCP 44321(默认) |
| pmproxy 监听端口 | TCP 8139(经 pmproxy.options 的 -p 修改,默认 44322) |
| 键值库 | redis-server active(供 pmproxy [keys] 时序索引使用) |
四大服务状态实测:
root@pcp-server:~# systemctl is-active pmcd
active
root@pcp-server:~# systemctl is-active pmlogger
active
root@pcp-server:~# systemctl is-active pmie
active
root@pcp-server:~# systemctl is-active pmproxy
active
PCP 的"每日归档治理"依赖 systemd timer 定时任务,实测排班:
root@pcp-server:~# systemctl list-timers --all | grep -E "pmlogger|pmie"
Sun 2026-11-01 09:20:00 UTC 13min left Sun 2026-11-01 08:50:30 UTC 15min ago pmlogger_check.timer pmlogger_check.service
Sun 2026-11-01 09:20:10 UTC 13min left Sun 2026-11-01 08:50:30 UTC 15min ago pmlogger_farm_check.timer pmlogger_farm_check.service
Sun 2026-11-01 09:28:00 UTC 21min left Sun 2026-11-01 08:58:34 UTC 7min ago pmie_check.timer pmie_check.service
Sun 2026-11-01 09:28:10 UTC 21min left Sun 2026-11-01 08:58:34 UTC 7min ago pmie_farm_check.timer pmie_farm_check.service
Mon 2026-11-02 00:08:00 UTC 15h left n/a n/a pmie_daily.timer pmie_daily.service
Mon 2026-11-02 00:10:00 UTC 15h left n/a n/a pmlogger_daily.timer pmlogger_daily.service
解读:pmlogger_check 实测按 OnCalendar=*-*-* *:20:00 与 *:50:00 每小时两次"巡检拉起",pmie_check 同机制错峰在 *:28:00 / *:58:00(两者均有 OnBootSec=1min 开机首跑;守护进程挂了会自动重启,并在启动时重新生成配置);pmlogger_daily(每天 00:10)与 pmie_daily(每天 00:08)负责归档合并、压缩、裁剪等每日治理。pmlogger_daily.timer 的定义实测为 OnCalendar=*-*-* 00:10:00。
二、前置条件
- PCP 已安装且核心服务运行:配置体系围绕
/etc/pcp/下的文件展开,未安装时这些目录不存在。最小验证:
root@pcp-server:~# pminfo -f pmcd.version
pmcd.version
value "7.2.2"
- root 权限:
/etc/pcp/下配置文件属主为 root,修改与重启服务都需要 root。 - 理解 PCP 进程模型(详见 《Performance Co-Pilot 介绍与选型指南》第三章):pmcd 是指标汇聚中枢,pmlogger/pmie 是 pmcd 的两个"消费者"(分别负责归档与规则评估),pmproxy 把 pmcd 能力开放为 REST API。四个进程的配置相互独立,改哪个进程的配置就重启哪个进程。
三、参数查看与修改方式
PCP 的配置分散在四类载体上,先建立"改哪里、怎么生效、怎么验证"的全局地图:
| 配置载体 | 位置 | 作用 | 生效方式 |
|---|---|---|---|
| 全局路径文件 | /etc/pcp.conf | 定义所有 PCP_* 路径与全局变量 | 保存即生效(各程序启动时读取) |
| 守护进程命令行选项 | /etc/pcp/<svc>/<svc>.options | pmcd/pmproxy 的启动参数 | systemctl restart <svc> |
| 守护进程配置文件 | /etc/pcp/<svc>/ 下(pmcd.conf、control、pmproxy.conf 等) | 各进程专属配置 | systemctl restart <svc> |
| 运行时动态参数 | pmcd 的 pmcd.* 指标 | 不重启在线改参 | pmstore 即时生效 |
查看配置文件路径的权威方法:所有路径集中定义在 /etc/pcp.conf,不要凭记忆找文件:
root@pcp-server:~# grep -E "PMCDCONF|PMCDRCLOCAL|OPTIONS|CONTROL" /etc/pcp.conf
PCP_PMCDCONF_PATH=/etc/pcp/pmcd/pmcd.conf
PCP_PMCDOPTIONS_PATH=/etc/pcp/pmcd/pmcd.options
PCP_PMCDRCLOCAL_PATH=/usr/lib/pcp/services/local
PCP_PMPROXYOPTIONS_PATH=/etc/pcp/pmproxy/pmproxy.options
PCP_PMIECONTROL_PATH=/etc/pcp/pmie/control
PCP_PMSNAPCONTROL_PATH=/etc/pcp/pmsnap/control
PCP_PMLOGGERCONTROL_PATH=/etc/pcp/pmlogger/control
查看运行参数的方法:PCP 把大量守护进程自身状态暴露为指标,用 pminfo 直接查:
root@pcp-server:~# pminfo -f pmcd.numagents pmcd.numclients pmcd.pmie.numrules
pmcd.numagents
value 11
pmcd.numclients
value 5
pmcd.pmie.numrules
inst [0 or "primary"] value 26
inst [11836 or "11836"] value 26
pmcd.numagents 是当前注册的 PMDA 数量(11 个,与 pmcd.conf 行数一致);pmcd.pmie.numrules 显示 pmie 已加载 26 条规则(实例名即 pmie 进程 PID)。
运行时改参(不重启):部分参数支持 pmstore 在线修改,实测把 pmcd 的 IPC 超时从默认 5 秒改为 10 秒再改回:
root@pcp-server:~# pminfo -f pmcd.control.timeout
pmcd.control.timeout
value 5
root@pcp-server:~# pmstore pmcd.control.timeout 10
pmcd.control.timeout old value=5 new value=10
root@pcp-server:~# pminfo -f pmcd.control.timeout
pmcd.control.timeout
value 10
root@pcp-server:~# pmstore pmcd.control.timeout 5
pmcd.control.timeout old value=10 new value=5
pmstore 回显同时给出 old/new 值,改后 pminfo 复核确认生效。注意 pmstore 属于写操作,受 [access] 访问控制约束(见 5.2 节)。
配置生成工具:pmlogger 与 pmie 的指标级配置(config.default)不是手写的,分别由 pmlogconf、pmieconf 生成与维护(见 5.3、5.4 节)。
四、参数总览
PCP 7.2.2 实测环境的配置文件全景:
| 文件 | 归属 | 内容 |
|---|---|---|
/etc/pcp.conf | 全局 | 70+ 个 PCP_* 路径/程序/版本变量 |
/etc/pcp/pmcd/pmcd.options | pmcd | 启动命令行选项(超时、PDU 上限、访问接口等) |
/etc/pcp/pmcd/pmcd.conf | pmcd | PMDA 注册表 + [access] 访问控制 |
/etc/pcp/pmlogger/control | pmlogger | 全局变量($PCP_CULLAFTER 等)+ 主机记录规格表 |
/etc/pcp/pmlogger/control.d/local | pmlogger | 本机主记录器规格行(发行版默认放这里) |
/etc/default/pmlogger | pmlogger | systemd 环境变量(PMLOGGER_LOCAL、PMLOGGER_INTERVAL 等) |
/var/lib/pcp/config/pmlogger/config.default | pmlogger | 记录哪些指标、各组间隔(pmlogconf 生成,153 个组指令) |
/etc/pcp/pmie/control 与 control.d/local | pmie | 主机规格表(同 control 格式) |
/var/lib/pcp/config/pmie/config.default | pmie | 规则库(pmieconf 生成,26 条规则) |
/etc/pcp/pmproxy/pmproxy.conf | pmproxy | ini 格式:REST 开关、键值库、时序检索参数 |
/etc/pcp/pmproxy/pmproxy.options | pmproxy | 启动命令行选项(端口等) |
/etc/pcp/derived/*.conf | pmcd | 派生指标表达式(经符号链接由 pmcd 加载) |
💡 技术拓展:
control类文件(pmlogger/pmie 共用格式)的目录机制——主文件${PCP_PMLOGGERCONTROL_PATH}与其.d目录(control.d/)下的所有文件在求值前自动拼接。发行版把默认规格放control.d/local,站点自定义放control.d/<站点名>,升级包时不覆盖本地修改。这与 systemd 的unit.d/drop-in 思路一致。
五、核心参数分类详解
5.1 全局路径文件 /etc/pcp.conf
/etc/pcp.conf 是 PCP 的"注册表":所有守护进程、管理脚本、客户端库启动时都从这里取路径与程序位置。实测本机关键变量(完整文件 70+ 行,此处节选有运维含义的部分):
root@pcp-server:~# grep -E "^PCP_" /etc/pcp.conf | grep -E "VERSION|ARCHIVE|LOG_DIR|VAR_DIR|USER|GROUP|AWK|PMCDCONF"
PCP_PMCDCONF_PATH=/etc/pcp/pmcd/pmcd.conf
PCP_VAR_DIR=/var/lib/pcp
PCP_LOG_DIR=/var/log/pcp
PCP_ARCHIVE_DIR=/var/log/pcp/pmlogger
PCP_REMOTE_ARCHIVE_DIR=/var/log/pcp/pmproxy
PCP_ARCHIVE_VERSION=3
PCP_AWK_PROG="/usr/bin/gawk --posix"
PCP_VERSION=7.2.2
PCP_USER=pcp
PCP_GROUP=pcp
逐项解读:
PCP_ARCHIVE_DIR=/var/log/pcp/pmlogger:归档落盘根目录,control.d/local规格行里的PCP_ARCHIVE_DIR/LOCALHOSTNAME就是它展开后的/var/log/pcp/pmlogger/pcp-server/。PCP_REMOTE_ARCHIVE_DIR=/var/log/pcp/pmproxy:其他主机经 pmproxy 推送过来的归档存放处(配合 5.3 节 logpush)。PCP_ARCHIVE_VERSION=3:新建归档使用第 3 版格式(自描述、支持增量标签),升级 PCP 不会改写历史归档。PCP_USER/PCP_GROUP=pcp:四个守护进程全部以pcp用户身份运行(实测 pmie 进程属主即pcp),排查"权限拒绝"类问题先看这里。PCP_VERSION=7.2.2:与pminfo -f pmcd.version一致,脚本做版本判断可grep此文件而非起进程。
⚠️ 修改建议:这个文件发行版升级时会被包管理器覆盖,且绝大多数变量是路径常量,没有改的必要;确需覆盖个别行为(如归档目录)时,优先用各守护进程自己的配置文件,而不是动 /etc/pcp.conf。
5.2 pmcd:采集守护进程
pmcd 的配置分三层:启动选项(pmcd.options)、PMDA 注册与访问控制(pmcd.conf)、运行时动态参数(pmcd.* 指标)。
5.2.1 pmcd.options:启动命令行选项
实测文件内容(发行版默认全部注释,即用内置默认值;节选):
# command-line options to pmcd, uncomment/edit lines as required
# longer IPC timeout delay for slow agents (default 5)
# -t 10
# or suppress timeouts
# -t 0
# longer timeout for slow agent startup (default 3)
# -q 10
# disable service advertising (comment out to enable)
-A
# maximum incoming PDU size (bytes, default 64K)
# -L 16384
# maximum number of contexts per PMAPI client (default 64)
# -C 128
# maximum number of metrics per pmFetch (default 32K)
# -M 40000
# assume identity of some user other than "pcp"
# -U root
参数速查(默认值取自文件内注释与 man 手册,实测本机未启用任何选项):
| 选项 | 默认值 | 含义 | 何时需要改 |
|---|---|---|---|
-i <addr> | 全部接口 | 只监听指定网卡地址 | 多网卡服务器限制 pmcd 只对内网口服务 |
-t <sec> | 5 | 对 PMDA 取数的 IPC 超时秒数 | 慢速自定义 PMDA(如查数据库的 agent)报 timeout 时调大 |
-q <sec> | 3 | PMDA 启动握手超时 | agent 初始化慢(Java/Python 类)时调大 |
-L <bytes> | 64K | 单个 PDU 上限 | 一次 fetch 大量实例报 PDU 超限时调大 |
-C <n> | 64 | 每个客户端的上下文上限 | 大量并发分析连接时调大 |
-M <n> | 32K | 单次 pmFetch 指标数上限 | 工具批量拉取整树指标报超限 |
-l <file> | 内置 | 改日志位置 | 日志需要单独收集时 |
-A | 本机启用 | 关闭 mDNS 服务通告 | 安全基线要求不广播 PCP 服务时保留注释状态即可(默认就是 -A 生效) |
实测确认本机 pmcd 仅带默认注入的 -A(无其他选项):
root@pcp-server:~# ps -ef | grep [p]mcd | head -2
pcp 26378 1 0 09:09 ? 00:00:00 /usr/lib/pcp/bin/pmcd -A
改完 pmcd.options 后 systemctl restart pmcd 生效;pmlogger/pmie 会自动重连(实测重启 pmcd 后 pminfo -f pmcd.version 立即恢复,见 5.6 节排障过程)。
5.2.2 pmcd.conf:PMDA 注册表与访问控制
实测全文(去掉注释表头):
# Name Id IPC IPC Params File/Cmd
root 1 pipe binary /var/lib/pcp/pmdas/root/pmdaroot
pmcd 2 dso pmcd_init /var/lib/pcp/pmdas/pmcd/pmda_pmcd.so
pmimport 43 dso pmimport_init /var/lib/pcp/pmdas/pmimport/pmda_pmimport.so
proc 3 pipe binary /var/lib/pcp/pmdas/proc/pmdaproc -d 3
xfs 11 pipe binary /var/lib/pcp/pmdas/xfs/pmdaxfs -d 11
linux 60 pipe binary /var/lib/pcp/pmdas/linux/pmdalinux
mmv 70 dso mmv_init /var/lib/pcp/pmdas/mmv/pmda_mmv.so
pmproxy 4 dso pmproxy_init /var/lib/pcp/pmdas/mmv/pmda_mmv.so
jbd2 122 dso jbd2_init /var/lib/pcp/pmdas/jbd2/pmda_jbd2.so
cifs 121 dso cifs_init /var/lib/pcp/pmdas/cifs/pmda_cifs.so
kvm 95 pipe binary /var/lib/pcp/pmdas/kvm/pmdakvm -d 95
[access]
disallow ".*" : store;
disallow ":*" : store;
allow "local:*" : all;
逐列解读注册表:
- Name/Id:PMDA 域名与数字编号,指标 PMNS 名字首段即 Name(
kernel.*、disk.*属 linux=60,pmcd.*属 pmcd=2)。Id 是全局唯一常量,自研 PMDA 需在官方 wiki 注册避免冲突。 - IPC:
pipe为独立进程(崩溃可被 pmcd 拉起,适合易出错的第三方 agent);dso为动态库内嵌 pmcd(零 IPC 开销、性能最好,发行版内置 agent 多用 dso)。 - File/Cmd:agent 的可执行文件/so 路径,
-d 3表示把 domain 编号传给独立进程 agent。
[access] 访问控制语义(实测本机默认策略):
| 规则 | 含义 |
|---|---|
disallow ".*" : store; | 主机模式 .*(匹配任意主机)禁止 store(写指标) |
disallow ":*" : store; | 空主机段 + 任意用户,兜底禁止 store |
allow "local:*" : all; | 主机 local(本机,即 pminfo -h local: 的同一主机规格写法)任意用户全权限 |
⚠️ 主机规格语法(实测排障归纳,详见第七章 Q2):规则冒号前整体是主机模式,只接受精确主机名/IP、local、unix 或结尾带 * 的通配;user@host 写法、CIDR 网段、IP 中段通配均不被接受,其中非法通配还会直接导致 pmcd 启动失败。
也就是说 5.2.3 的 pmstore 只能在服务器本机执行;远程连接受首两条 disallow 约束、默认无写权限。规则可写多条、自上而下匹配。
安装/卸载 PMDA 不改这个文件,用注册脚本:cd /var/lib/pcp/pmdas/<name> && ./Install(需要 root),实测 pmcd.numagents 会随之变化。
5.2.3 运行时动态参数
pmcd 自身暴露一组可写指标,pmstore 在线调整、pminfo 复核(实测见第三章)。常用的有:
| 指标 | 默认 | 作用 |
|---|---|---|
pmcd.control.timeout | 5 | IPC 取数超时(对应 -t),改后立即生效、重启进程后回到选项值 |
pmcd.agent.status | — | 各 PMDA 状态(按实例列出,排障第一入口) |
pmcd.pmlogger.archive/host/port | — | 当前活跃归档器实例(pmdumplog 的标签记录里可见其值) |
pmcd.pmie.numrules | — | pmie 已加载规则数 |
排障第一入口 pmcd.agent.status 实测(value 0 即该 PMDA 正常):
root@pcp-server:~# pminfo -f pmcd.agent.status | head -6
pmcd.agent.status
inst [1 or "root"] value 0
inst [2 or "pmcd"] value 0
inst [3 or "proc"] value 0
inst [4 or "pmproxy"] value 0
实测归档器自描述信息(来自归档标签记录,pmdumplog -m 首段):
09:02:17.565476795 5 metrics
2.3.3 (pmcd.pmlogger.host): inst [20472 or "20472"] value "pcp-server"
2.3.0 (pmcd.pmlogger.port): inst [20472 or "20472"] value 4330
2.3.2 (pmcd.pmlogger.archive): inst [20472 or "20472"] value "/var/log/pcp/pmlogger/pcp-server/20261101.09.02"
2.0.23 (pmcd.pid): value 17311
2.0.24 (pmcd.seqnum): value 12
每条归档都记录了"谁(host)、经哪个端口、写到哪个文件、pmcd 是哪个 PID",这是 PCP 归档可自证溯源的设计。
5.3 pmlogger:归档器配置体系
pmlogger 的配置是四层叠加:control 全局变量 → control.d 主机规格 → /etc/default 环境变量 → config.default 指标组。理解优先级是本章重点(5.3.5 有闭环实测)。
5.3.1 control:全局变量与主机规格表
实测 /etc/pcp/pmlogger/control 的变量段(去掉注释后的有效行):
$version=1.1
文件内注释给出的可调变量(默认全部注释,即用 pmlogger_daily 内置默认):
# Uncomment one of the lines below to enable/disable culling behaviour
# that is different to the pmlogger_daily default [14].
#$PCP_CULLAFTER=0
#$PCP_CULLAFTER=3
#$PCP_CULLAFTER=never
# Uncomment one of the lines below to enable/disable compression behaviour
# that is different to the pmlogger_daily default.
#$PCP_COMPRESSAFTER=0
#$PCP_COMPRESSAFTER=3
#$PCP_COMPRESSAFTER=never
$PCP_CULLAFTER:归档保留天数,超期删除;默认 14 天,0为归档写完当天立即裁剪,never永不清理。$PCP_COMPRESSAFTER:几天前归档转.gz压缩;默认按 pmlogger_daily 内置策略,never不压缩。- 规格表列格式(文件头注释实测原文归纳):
Host P? S? Directory Args——P 是否主记录器、S 是否走 pmsocks、Directory 归档目录、Args 传给 pmlogger 的参数。LOCALHOSTNAME是占位符,第一列展开为local:、目录列展开为主机名。
5.3.2 control.d/local:本机主记录器规格行
实测发行版默认(/etc/pcp/pmlogger/control.d/local):
LOCALHOSTNAME y n PCP_ARCHIVE_DIR/LOCALHOSTNAME -r -T24h10m -c config.default -v 100Mb
参数行逐项解读(语义取自 pmlogger --help 实测):
| 参数 | 含义 |
|---|---|
-r | 归档按时间滚动:每天 00:00 切新归档,配合 pmlogger_daily 合并 |
-T24h10m | 本归档存活 24 小时 10 分钟后主动结束(给 daily 治理留 10 分钟余量) |
-c config.default | 使用配置文件 config.default(相对归档目录解析,实际为 /var/lib/pcp/config/pmlogger/config.default) |
-v 100Mb | 单个归档卷超过 100MB 即切换下一卷(.0、.1、.2…) |
同一文件里还有一条注释掉的远程推送模板(7.x 起 logpush 形态):
#LOCALHOSTNAME y n +PCP_ARCHIVE_DIR/LOCALHOSTNAME -r -T24h10m -c config.default -v 100Mb http://<remotehost>:44322
目录列加 + 前缀表示本机不保留归档、直接推送到远端 pmproxy(7.2.2 支持 HTTPS 与 Basic Auth)。做"多机集中归档"时,中心机把各 agent 主机加进自己的 control 表即可反向拉取;两种拓扑二选一。
5.3.3 /etc/default/pmlogger:systemd 环境变量
实测有效行与注释默认值:
PMLOGGER_LOCAL=1
# PMLOGGER_MAXPENDING=5
# PMLOGGER_INTERVAL=60
# PMLOGGER_CHECK_SKIP_LOGCONF=yes
# PMLOGGER_CHECK_SKIP_JANITOR=yes
# PMLOGGER_JANITOR_ARGS='-V'
PMLOGGER_LOCAL=1:只接受本机连接(0 允许远程 pmlogger 客户端);删掉该变量则放开。PMLOGGER_MAXPENDING:待连接队列长度,默认 5。PMLOGGER_INTERVAL=60:默认采样间隔(秒)。注释明确:默认 60 秒,装了 pcp-zeroconf 则 10 秒;优先级低于 control 参数行的-t,更低于 config 文件里的显式间隔组。PMLOGGER_CHECK_SKIP_LOGCONF:置yes后pmlogger_check不再每次重生成 config.default(PMDA 配置稳定时可省 CPU 与意外变更)。PMLOGGER_CHECK_SKIP_JANITOR/PMLOGGER_JANITOR_ARGS:控制巡检脚本对"游离归档进程/文件"的清理行为。
5.3.4 config.default:指标组与间隔(pmlogconf 生成)
实测文件头与两个典型组(/var/lib/pcp/config/pmlogger/config.default,共 1500+ 行):
#pmlogconf 2.0
#
# pmlogger(1) config file created and updated by pmlogconf
# Auto-generated by pmlogconf on: Sun Nov 1 07:58:12 2026
#
# DO NOT UPDATE THE INITIAL SECTION OF THIS FILE.
# Any changes may be lost the next time pmlogconf is used
# on this file.
#
#+ groupdir /var/lib/pcp/config/pmlogconf
#
#+ cpu/summary:y:default:
## utilization (usr, sys, idle, ...) over all CPUs
log advisory on default {
kernel.all.cpu
}
实测全文含 153 个 #+ 组指令,格式 #+ <组名>:<y|n|x>:<间隔>:——第三列 y 启用、n 禁用、x 表示该组在本机不适用(如未装 apache 时 apache/*:x::)。实测间隔列取值分布:default 66 组、once 14 组、60 seconds 2 组、5 minutes 1 组,其余 70 组间隔为空(禁用/不适用组);另有手工追加的显式 1 second 组。
四种间隔关键字语义:
| 写法 | 含义 |
|---|---|
log advisory on default { ... } | 用"默认间隔"(即 60 秒,或被 -t/PMLOGGER_INTERVAL 改写后的值) |
log advisory on 5 minutes { ... } | 该组固定 300 秒(如 proc.memory.size 等进程内存组) |
log advisory on once { ... } | 只在归档开头记录一次(适合 hinv.* 硬件清单类不变化指标) |
log advisory on 1 second { ... } | 显式固定 1 秒,任何默认间隔设置都不影响它 |
实测本机文件尾部的手工追加区(注释明示这是唯一安全的手改位置):
# It is safe to make additions from here on ...
#
log advisory on 1 second {
kernel.all.load
mem.util.free
}
#----
[access]
disallow .* : all;
disallow :* : all;
allow local:* : enquire;
文件尾部还有一个 [access] 段:这是 pmlogger 进程自身的访问控制(与 pmcd.conf 的 [access] 无关),限制谁能连到这个记录器。
用 pmlogconf -g 查询某组的当前状态(实测):
root@pcp-server:~# pmlogconf -g cpu/summary /var/lib/pcp/config/pmlogger/config.default
#+ /var/lib/pcp/config/pmlogconf/cpu/summary:y:default:
含义:cpu/summary 组启用、走默认间隔。pmlogconf 的 -r 选项可强制重新探测所有组(装新 PMDA 后配置未更新时用)。
5.3.5 采样间隔三级覆盖:闭环实测
PCP 的间隔优先级:config.default 显式间隔组 > control 参数行 -t > /etc/default/pmlogger 的 PMLOGGER_INTERVAL > 内置默认 60 秒。三档逐一实测,验证手段统一用 pmlogger 启动时写入 /var/log/pcp/pmlogger/pcp-server/pmlogger.log 的摘要行(每组"实际生效间隔 + 字节量 + 折算日增"):
第一档:默认 60 秒(发行版开箱状态):
} logged every 60 sec: 36836 bytes or 50.59 Mbytes/day
} logged every 300 sec: 748 bytes or 0.21 Mbytes/day
} logged every 1 sec: 116 bytes or 9.56 Mbytes/day
第二档:PMLOGGER_INTERVAL=30(在 /etc/default/pmlogger 追加一行后 systemctl restart pmlogger):
} logged every 30 sec: 36836 bytes or 101.17 Mbytes/day
} logged every 300 sec: 708 bytes or 0.19 Mbytes/day
} logged every 1 sec: 116 bytes or 9.56 Mbytes/day
default 组从 60 秒变 30 秒、日增从 50.59 翻倍到 101.17 MB;300 秒组与 1 秒组纹丝不动——证明环境变量只改写 advisory on default 的"默认"值。
第三档:control.d/local 参数行加 -t 10sec(同时删除 PMLOGGER_INTERVAL 行,重启 pmlogger):
LOCALHOSTNAME y n PCP_ARCHIVE_DIR/LOCALHOSTNAME -r -T24h10m -t 10sec -c config.default -v 100Mb
} logged every 10 sec: 36836 bytes or 303.52 Mbytes/day
} logged every 300 sec: 724 bytes or 0.20 Mbytes/day
} logged every 1 sec: 116 bytes or 9.56 Mbytes/day
-t 10sec 压过了环境变量档;显式组依旧恒定。恢复默认再重启,摘要行回到第一档 60 秒输出,闭环完成。
磁盘量换算(实测数据):默认 60 秒全量约 50 MB/天/主机;加一个 1 秒组(2 个指标)约 9.6 MB/天;若整体提到 10 秒则 303 MB/天。生产上"全默认 + 关键指标单独 1~5 秒组"是性价比最高的形态。
⚠️ 验证间隔时不要用 pmval -a <归档> 直接看:pmval 对归档默认按 1 秒重采样,任何间隔都会显示 interval 1.00 sec,造成"配置没生效"的假象。正确方法要么给 pmval 显式 -t <期望间隔>,要么用 pmdumplog <归档> | grep -c "<指标名>" 数记录条数(本实测用摘要行 + 记录计数双重确认)。
5.3.6 pmlogger_daily:每日归档治理
timer 每天 00:10 执行的脚本实测位于 /usr/lib/pcp/bin/pmlogger_daily,其用法(实测 -? 输出节选):
Usage: pmlogger_daily [options]
Options:
-c FILE, --control=FILE
pmlogger control file
-E, --expunge expunge metrics with metadata inconsistencies when merging archives
-k TIME, --discard=TIME
remove archives after TIME (format DD[:HH[:MM]])
-d fssize, --disk=fssize
set maximum disk usage for archives for each pmlogger instance
-K compress, but no other changes
-m ADDRs, --mail=ADDRs
send daily NOTICES entries to email addresses
-N, --showme perform a dry run, showing what would be done
-n, --noerror always exit with status 0 (for systemd services)
-P, --noproxy do not process archives pushed via pmproxy(1)
-Q, --proxyonly only process archives pushed via pmproxy(1)
-r, --norewrite do not process archives with pmlogrewrite(1)
要点:-k 就是 $PCP_CULLAFTER 的命令行形态;-N 干跑最安全(先看清会动哪些归档再接管默认 timer);-d 给每个记录器实例设归档磁盘配额。日常治理(合并昨日归档、压缩、裁剪、通知 pmlogger_check 拉起新实例)都在这一步完成——实测归档目录中已可见压缩后的历史卷(如 20261101.07.58.0.gz、.index 保持明文以便快速检索)。
5.4 pmie:推理引擎配置
pmie 用与 pmlogger 相同的 control/control.d 主机规格机制,规则库则由 pmieconf 生成。
5.4.1 control.d/local 与运行形态
实测 /etc/pcp/pmie/control.d/local 有效行:
LOCALHOSTNAME y n PCP_LOG_DIR/pmie/LOCALHOSTNAME/pmie.log -c config.default
对照实际进程命令行(实测 ps -ef):
pcp 11836 1 0 08:08 ? 00:00:00 /usr/bin/pmie -b -m pmie_check -F -P -l /var/log/pcp/pmie/pcp-server/pmie.log -c config.default
-P(主推理引擎)、-F(systemd 就绪通知)、-m pmie_check(标注由巡检脚本拉起)都是 pmie_check 包装注入的;-c config.default 即规则文件。
5.4.2 规则语法与内置规则实例
实测 /var/lib/pcp/config/pmie/config.default 中的高负载规则全文:
// 1 cpu.load_average
delta = 2 min;
cpu.load_average =
some_host (
// threshold scales with the number of CPUs (works better for
// large systems) and there is an absolute lower bound,
// especially for small systems
kernel.all.load #'1 minute' > hinv.ncpu * 3
&& kernel.all.load #'1 minute' > 4
) -> syslog 10 min "High 1-minute load average" " %vload@%h";
逐要素解读:
delta = 2 min;:该规则每 2 分钟评估一次(规则级频率,与采样间隔独立)。some_host (...):多主机归档/查询时任一主机满足即触发;本机场景等价单条件。kernel.all.load #'1 minute':实例选择符——只取"1 分钟"实例;hinv.ncpu * 3让阈值随核数伸缩(本机 6 核即 18),&& > 4给小机器兜底绝对下限。-> syslog 10 min "..." "%vload@%h":动作写 syslog,10 分钟抑制窗口防告警风暴;%vload输出变量值、%h输出主机名。
5.4.3 pmieconf:规则管理 CLI
实测 pmieconf -? 用法(节选):
Usage: pmieconf [options] [ command [args...] ]
Commands:
1. help [ { . | all | global | <rule> | <group> } [<variable>] ]
2. rules [ enabled | disabled ]
3. groups
4. status
5. enable { . | all | <rule> | <group> }
(后续还有 disable、modify 子命令。)实测当前启用规则 24 条,节选:
root@pcp-server:~# pmieconf rules enabled | head -6
cpu.context_switch [High aggregate context switch rate]
cpu.load_average [High 1-minute load average]
cpu.system [Busy executing in system mode]
cpu.util [High average processor utilization]
dmthin.data_high_util [dmthin pool data is filling up]
dmthin.metadata_high_util [dmthin pool metadata is filling up]
改单条规则阈值用 pmieconf modify <rule> <变量> <值>(三个位置参数,实测用法行:8. modify { . | all | global | <rule> | <group> } <variable> <value>)。变量名与当前值用 pmieconf list 查,实测:
root@pcp-server:~# pmieconf list cpu.load_average | tail -3
vars: enabled = yes
per_cpu_load = 3
min_load = 4
即 5.4.2 规则里 hinv.ncpu * 3 与 > 4 两个阈值的真身。把绝对下限改 8:pmieconf modify cpu.load_average min_load 8,改完 pmie_check 下一轮巡检(实测 :28/:58)或 systemctl restart pmie 生效;pmcd.pmie.numrules 可验证规则数。pmieconf status 实测:
root@pcp-server:~# pmieconf status
verbose: off
enabled rules: 24 of 45
pmie configuration file: /etc/pcp/pmie/config.default
pmie processes (PIDs) using this file: (none found)
⚠️ 注意后两行的"名实差":status 报的默认路径 /etc/pcp/pmie/config.default 在本机并不存在(实测 ls 报 No such file),真实规则文件在 /var/lib/pcp/config/pmie/config.default(control 行 -c config.default 按 pmie 规则目录解析);路径不一致时 status 的 PID 探测也会落空显示 (none found),不代表 pmie 没在跑(以 ps -ef | grep [p]mie 为准,见 5.4.1)。显式指定真实文件即可对上,实测:
root@pcp-server:~# pmieconf -f /var/lib/pcp/config/pmie/config.default status
verbose: off
enabled rules: 25 of 45
pmie configuration file: /var/lib/pcp/config/pmie/config.default
pmie process (PID) using this file: 11836
(PID 11836 正是 5.4.1 实测的 pmie 进程;规则计数以文件内 enabled = yes 标记为准。)
5.4.4 自定义规则一次性评估实测
调试规则不必重启守护进程,pmie -c <文件> 前台跑。实测 /tmp/demo.pmie:
loadcheck = some_host ( kernel.all.load #'1 minute' >= 0 ) -> print "1-min load: %v";
root@pcp-server:~# pmie -c /tmp/demo.pmie -t 1sec -T 2sec
Sun Nov 1 09:07:52 2026: 1-min load: 3.53
Sun Nov 1 09:07:53 2026: 1-min load: 3.53
Sun Nov 1 09:07:54 2026: 1-min load: 3.32
[Sun Nov 1 09:07:54] pmie(21588) Info: evaluator exiting
-t 1sec -T 2sec 表示 1 秒间隔评估、2 秒后退出,三条输出即三次评估命中(条件 >= 0 恒真,用于验证语法与取值链路)。-C 选项可只解析不执行(语法检查)。
5.5 pmproxy:REST API 与时序检索
5.5.1 pmproxy.conf 各段详解
实测 /etc/pcp/pmproxy/pmproxy.conf 有效配置(ini 格式):
[pmproxy]
pcp.enabled = true
http.enabled = true
resp.enabled = false
secure.enabled = true
[http]
Access-Control-Allow-Headers = X-Grafana-Device-ID
[keys]
enabled = true
servers = localhost:6379
[discover]
enabled = true
exclude.metrics = proc.*,acct.*
exclude.indoms = 3.9,3.40,79.7
[pmsearch]
enabled = true
count = 10
[pmseries]
enabled = true
cursor.count = 256
stream.expire = 86400
stream.maxlen = 8640
[pmlogger]
enabled = true
| 段 | 关键项 | 含义 |
|---|---|---|
[pmproxy] | pcp.enabled | PCP 原生协议客户端接入(pmproxy 兼作 pmcd 的 Web 前置) |
http.enabled | REST API 开关 | |
resp.enabled | RESP 协议代理(文件内注释原文 "RESP proxying (key server serialisation protocol)",即把 pmproxy 作为键值库序列化协议的代理),本机为 false | |
secure.enabled | SSL/TLS 协议封装支持(注释原文 "support SSL/TLS protocol wrapping"),证书/私钥在同文件的 certificates/private_key 注释项中配置 | |
[keys] | servers | 时序索引写入的键值库地址。实测本机 redis-server active,/proc/net/tcp 可见 0100007F:18EB(127.0.0.1:6379)LISTEN,且 pmproxy 已与其建立 ESTABLISHED 连接 |
[discover] | exclude.metrics | 自动发现时跳过高基数指标(进程级 proc.* 实例太多会撑爆索引) |
[pmseries] | stream.expire = 86400 | 时序流键 24 小时过期 |
stream.maxlen = 8640 | 单流保留条目上限 | |
[pmlogger] | enabled = true | 接收远程主机 logpush 推送的归档(存到 PCP_REMOTE_ARCHIVE_DIR) |
5.5.2 pmproxy.options:端口与监听
实测 /etc/pcp/pmproxy/pmproxy.options 启用了两行:
# serve REST API on TCP port 8139
-p 8139
# disable service advertising (comment out to enable)
-A
-p 把默认 44322 改到 8139(本机 REST 服务对外端口);其余选项(-i 限定接口、-L PDU 上限、-U 运行身份、-x 应急日志)保持注释默认。
5.5.3 REST API 实测
/metrics 端点输出 OpenMetrics 文本(实测节选):
root@pcp-server:~# curl -s "http://localhost:8139/metrics?name=kernel.all.load"
# PCP5 kernel.all.load 60.2.0 float 60.2 instant none
# HELP kernel_all_load 1, 5 and 15 minute load average
# TYPE kernel_all_load gauge
kernel_all_load{instid="1",instname="1 minute",hostname="pcp-server",agent="linux",domainname="localdomain",machineid="ddef1ec03ec94561a0468c1c9ce61c75"} 3.02
kernel_all_load{instid="5",instname="5 minute",hostname="pcp-server",agent="linux",domainname="localdomain",machineid="ddef1ec03ec94561a0468c1c9ce61c75"} 2.03
kernel_all_load{instid="15",instname="15 minute",hostname="pcp-server",agent="linux",domainname="localdomain",machineid="ddef1ec03ec94561a0468c1c9ce61c75"} 1.73
每个指标实例一行,标签自动带上 hostname、agent、machineid,可直接喂给 Prometheus 生态抓取。
/series/* 端点走时序索引(实测):
root@pcp-server:~# curl -s "http://localhost:8139/series/metrics?match=kernel.all.load"
["kernel.all.load"]
⚠️ 过滤参数是 match=(glob 模式),不是 name=:实测 ?name=kernel.all.load 不做过滤、返回全部指标名列表(数千条),?match= 才命中单条——这是对接自研面板时最容易踩的坑。
根路径探测(实测):curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8139/ 返回 400(响应体为 400 Bad Request 的 HTML 错误页),属预期行为——pmproxy 没有首页,一切请求须走 /metrics、/series/...、/search/... 等具体端点。
5.6 派生指标(derived metrics):表达式合成新指标
派生指标允许用已有指标的四则运算合成新指标,由 pmcd 加载后即注册为 PMNS 中的普通指标,各客户端命令一视同仁地查询(实测 pminfo 取值与 pmval 连续采样均正常)。这是 PCP 版的"虚拟指标",对标 Prometheus recording rules。
5.6.1 加载机制(实测确认的真实目录)
发行版把派生指标源文件放在 /etc/pcp/derived/,但 pmcd 实际加载目录是 /var/lib/pcp/config/derived/,前者靠符号链接挂过去。实测:
root@pcp-server:~# ls /etc/pcp/derived/
cpu-util.conf demo.conf denki.conf iostat.conf mssql.conf openmetrics.conf proc.conf
root@pcp-server:~# ls -l /var/lib/pcp/config/derived/
total 0
lrwxrwxrwx 1 root root 30 Oct 7 03:08 cpu-util.conf -> /etc/pcp/derived/cpu-util.conf
lrwxrwxrwx 1 root root 26 Nov 1 08:54 demo.conf -> /etc/pcp/derived/demo.conf
lrwxrwxrwx 1 root root 27 Oct 7 03:08 denki.conf -> /etc/pcp/derived/denki.conf
lrwxrwxrwx 1 root root 28 Oct 7 03:08 iostat.conf -> /etc/pcp/derived/iostat.conf
lrwxrwxrwx 1 root root 27 Oct 7 03:08 mssql.conf -> /etc/pcp/derived/mssql.conf
lrwxrwxrwx 1 root root 33 Oct 7 03:08 openmetrics.conf -> /etc/pcp/derived/openmetrics.conf
lrwxrwxrwx 1 root root 26 Oct 7 03:08 proc.conf -> /etc/pcp/derived/proc.conf
加载时机是 pmcd 启动:新增/修改文件后必须 ln -sf(新文件)并 systemctl restart pmcd 才会注册。
5.6.2 自定义指标实测
实测 /etc/pcp/derived/demo.conf:
demo.load_pct = (100 * kernel.all.load) / hinv.ncpu
demo.load_pct(oneline) = load averages as percentage of CPU count
demo.x2 = kernel.all.load * 2
demo.x2(oneline) = doubled load, all instances
语法:<域>.<名> = <表达式> 定义指标;<名>(oneline) = <文本> 挂单行帮助(属性名只认 oneline、units 等固定集合)。表达式里 kernel.all.load 是多实例指标,结果按实例展开。验证(本机 6 核):
root@pcp-server:~# pminfo -f demo.load_pct demo.x2
demo.load_pct
inst [1 or "1 minute"] value 39.33333079020182
inst [5 or "5 minute"] value 30.16666666666667
inst [15 or "15 minute"] value 27.66666666666667
demo.x2
inst [1 or "1 minute"] value 4.7199998
inst [5 or "5 minute"] value 3.6199999
inst [15 or "15 minute"] value 3.3199999
demo.load_pct 即"负载折算 CPU 占用百分比"(1 分钟负载 2.36/6 核 ≈ 39.3%),比裸 load 更可比。
5.6.3 排障实录:三个真实报错
派生指标报错不进 pmcd.log,进 journald,用 journalctl -u pmcd 看。三个实测踩坑:
① 帮助属性写错——把 (oneline) 写成 (help):
Nov 01 09:09:18 pcp-server pmcd[25391]: [/var/lib/pcp/config/derived/bad.conf:2] Error: pmLoadDerivedConfig: attribute (help) is unknown for metric (bad.a)
Nov 01 09:09:18 pcp-server pmcd[25391]: bad.a(help) = text help
解决:属性名用 oneline(单行帮助)或 units(单位)。
② 表达式里用 pmie 式实例选择符——#'1 minute' 在 derived 语法中不支持:
Nov 01 09:09:22 pcp-server pmcd[25886]: [/var/lib/pcp/config/derived/bad.conf:1] Error: pmRegisterDerived(bad.b, ...) syntax error
Nov 01 09:09:22 pcp-server pmcd[25886]: Illegal character
解决:derived 表达式对全部实例做算术(如 demo.x2 直接乘 2),"只取 1 分钟实例"这类需求放到消费端(pmie 规则、pmrep 实例过滤)做。
③ 文件放对目录仍不加载——只把文件写进 /etc/pcp/derived/ 而未建符号链接,pminfo demo.* 始终查不到。解决:
root@pcp-server:~# ln -sf /etc/pcp/derived/demo.conf /var/lib/pcp/config/derived/demo.conf
root@pcp-server:~# systemctl restart pmcd
root@pcp-server:~# pminfo -f demo.load_pct | head -3
demo.load_pct
inst [1 or "1 minute"] value 49
六、生产配置模板
以下模板针对"单台服务器长期归档 + 本地告警 + REST 对外"的典型形态,标注内存/磁盘/场景预算,全部键值与默认值均经本篇实测核对。
1)归档(pmlogger)——/etc/pcp/pmlogger/control.d/local 保持发行版默认行即可:
LOCALHOSTNAME y n PCP_ARCHIVE_DIR/LOCALHOSTNAME -r -T24h10m -c config.default -v 100Mb
/etc/pcp/pmlogger/control 显式声明保留策略(覆盖默认 14 天):
$PCP_CULLAFTER=30
$PCP_COMPRESSAFTER=1
/etc/default/pmlogger 保持默认间隔(60 秒),高敏指标在 config.default 尾部安全区单加显式组:
log advisory on 5 second {
disk.dev.read
disk.dev.write
}
磁盘预算(实测换算):默认全量 50.6 MB/天;1 秒组每指标约 4.8 MB/天;30 天保留 + 1 天压缩,单主机约 2 GB 封顶。内存开销可忽略:实测 pmlogger 进程 RSS 8268 KB、pmie 进程 RSS 7108 KB(ps -o pid,rss,cmd 回显)。
2)告警(pmie)——保留内置规则(实测 24 条启用),按机器角色微调阈值(变量名先用 pmieconf list 确认):
pmieconf modify cpu.load_average min_load 8 # 高负载绝对下限 4 → 8
systemctl restart pmie
pminfo -f pmcd.pmie.numrules # 验证规则数不变(改阈值不增删规则)
3)访问控制(pmcd.conf [access])——默认策略已是安全基线(远程禁写、本机全权);确需对某台管理机放开 pmstore 时,主机规格用精确 IP 或主机名(实测 allow "127.0.0.1" : store; 可被正常加载;CIDR、user@host、IP 中段通配均非法,见第七章 Q8):
[access]
disallow ".*" : store;
disallow ":*" : store;
allow "local:*" : all;
allow "10.89.58.100" : store;
⚠️ 改完先用 pmcd -f 前台试跑一次(报错直接打到终端),确认无非法行再 systemctl restart pmcd——非法通配会让服务启动失败(实测实录见 Q8)。
4)REST(pmproxy)——保持 [keys] servers = localhost:6379 与 [discover] exclude.metrics = proc.*,acct.*(高基数排除是时序索引不爆内存的关键);对外端口用 pmproxy.options 的 -p 固定。
七、常见问题
Q1:改了 pmcd.options / pmproxy.options 不生效?
A:options 文件只在进程启动时读取,必须 systemctl restart pmcd(或 pmproxy)。用 ps -ef | grep [p]mcd 核对进程命令行是否带上新选项(实测见 5.2.1)。
Q2:远程主机执行 pmstore 被拒?
A:默认 [access] 前两条对所有主机模式 disallow store(实测原文见 5.2.2),这是设计行为。确需远程写按第六章模板 3 用精确 IP/主机名放开单条规则,或登录目标机本机执行。
Q3:pmie -c -t 1sec -T 2sec demo.pmie 报 extra filenames cannot be given after using -c?
A:-c 需要紧跟配置文件参数,上面写法把 -t 当成了 -c 的值、demo.pmie 成了多余文件名。正确写法(实测通过):pmie -c /tmp/demo.pmie -t 1sec -T 2sec。
Q4:/series/metrics?name=xxx 返回几千条全量指标,过滤失效?
A:pmseries REST 的过滤参数是 match=(glob),name= 不参与过滤。实测对比:?name=kernel.all.load 返回全量列表,?match=kernel.all.load 返回 ["kernel.all.load"](见 5.5.3)。
Q5:用 pmval 查归档,显示 interval 1.00 sec,是不是间隔配置没生效?
A:不是。pmval 对归档默认按 1 秒重采样,与归档真实间隔无关。验证真实间隔用 pmdumplog <归档> | grep -c "<指标>" 数记录数除以时间跨度,或看 pmlogger.log 的 logged every N sec 摘要行(实测方法见 5.3.5)。
Q6:派生指标文件写好了 pminfo 查不到?
A:按 5.6.3 三连查:① 文件必须在 /var/lib/pcp/config/derived/ 有符号链接;② systemctl restart pmcd;③ journalctl -u pmcd 看加载报错(语法错误不会让 pmcd 起不来,只静默跳过该文件)。
Q7:手工编辑 config.default 后担心被覆盖?
A:文件头注释明确"DO NOT UPDATE THE INITIAL SECTION"——pmlogconf 重生成时初始段(含所有 #+ 组)会被重建;尾部 # It is safe to make additions from here on ... 之后的内容(含手工显式间隔组与 [access])实测在重生成后保留(用 pmlogconf -c <副本文件> 重生成副本验证,手工 1 秒组原样保留在第 1836 行)。自定义组一律加在安全区。
Q8:往 [access] 加了一条规则后 pmcd 起不来,还提示 Start request repeated too quickly?
A:这是本篇实测踩过的坑,两类报错要分清。非法通配是致命的——主机模式里 * 不在结尾或 IP 带中段通配,pmcd 直接启动失败:
Nov 01 09:16:26 pcp-server pmcd[30322]: Error: Bad IP address wildcard, pcp-admin@10\.89\..*
Nov 01 09:16:26 pcp-server pmcd[30322]: pmcd config[line 21]: Warning: access control error for host 'pcp-admin@10\.89\..*': Invalid argument
Nov 01 09:24:22 pcp-server pmcd[35823]: Error: Wildcard in host pattern ".*@localhost" is not at the end
而 无法解析的主机(如 CIDR 10.89.0.0/16)是非致命的——只警告 the following access control specification will be ignored 并跳过该条,服务照常起。致命失败连续触发 systemd 重启限流后,改回正确配置还需先清计数:
root@pcp-server:~# systemctl reset-failed pmcd
root@pcp-server:~# systemctl restart pmcd
root@pcp-server:~# systemctl is-active pmcd
active
规避方法即第六章模板 3 的 ⚠️:改 [access] 后先 pmcd -f 前台试跑,报错立即可见,再重启服务。
八、参考链接
- pcp.conf(5)、pmcd(1)、pmcd.conf(5)(man 手册页;Ubuntu 包默认不装 man,可在线查 man7.org 对应页)
- pmlogger(1)、pmlogger.control(5)、pmlogger_daily(1)、pmlogconf(1)
- pmie(1)、pmieconf(1)、pmie.expression(5)、pmie.action(5)
- pmproxy(1)、pmproxy.conf(5)、pmseries(1)
- PCP 官方文档:https://pcp.readthedocs.io/
- PCP man 手册页合集:https://man7.org/linux/man-pages/dir_by_project.html#PCP
- 派生指标官方说明(pmcd.h / pmRegisterDerived(3))
- 本专栏部署篇:《Ubuntu 22.04 安装 Performance Co-Pilot 7.2.2 指南》
- 本专栏选型篇:《Performance Co-Pilot 介绍与选型指南》
- 本专栏 CLI 工具篇:《Performance Co-Pilot 7.2.2 常用 CLI 命令与工具详解》