PowerFlex:PFMP_SUPPORT — 支持捆绑包收集实用程序
Résumé: pfmp_support — 收集 PowerFlex Manager诊断数据并将其打包到支持包中
Instructions
pfmp_support [选项]
描述
pfmp_support是一个诊断实用程序,从 PowerFlex Manager或 PowerFlex Manager安装程序主机收集调试信息,并将其归档到压缩捆绑包中,以供支持人员分析。
该实用程序从多个来源收集数据,包括:
- Kubernetes 诊断数据、配置和日志
- Helm 版本信息
- Docker 和容器运行时数据
- PowerFlex Manager安装程序日志
- 操作系统配置、日志和运行时状态
- 硬件资源清册
从多个 Kubernetes 群集节点收集数据时,应从至少一个节点收集标准捆绑包(--skip-kubernetes-shared not specified),其中 kubectl 和 helm 可用,并且可以访问 Kubernetes 控制平面。在后续节点上 --skip-kubernetes-shared 可用于减小收集的数据的大小。
生成的捆绑包是单个压缩归档(默认为 tar/gz),可传输到 PowerFlex 支持以进行进一步分析。
在给定时间,只能在主机上运行一个 pfmp_support 实例。如果没有足够的可用空间用于其输出,它将拒绝运行(除非显式跳过空间检查)。
选项
一般选项
-
-A DIR,--installer-root-path=DIR
使用 DIR 作为 PowerFlex Manager安装程序的基本目录。在收集 PowerFlex 安装程序数据和安装程序容器 (
atlantic_installer) 未运行。默认:自动检测,或/var。 -
-d OUT_DIR, --output-dir=OUT_DIR
将生成的捆绑包存储在目录 OUT_DIR 下。Default:
<WORK_DIR>/powerflex-pfmpsupport(参见 --work-dir)。 -
-h, --help
显示帮助消息并退出。与 --tech 结合使用时,还会显示技术人员选项。
-
-J, --xz
对收集的捆绑包使用 tar/xz 格式,而不是默认的 tar/gz。如果系统的
tar(1)不支持--use-compress-program或xz(1)未找到。 -
-n NAMESPACE, --namespace=NAMESPACE
从特定于应用程序的 Kubernetes 命名空间 NAMESPACE 收集其他数据。Default:
powerflex。 -
-N、--skip-space-check
在数据收集之前跳过可用磁盘空间验证。
-
-P PATH,--collect-path=PATH
收集附加路径 PATH。仅接受绝对路径。接受通配符;应使用通配符进行引号。可以多次指定此选项以收集多个路径。
-
-q, --quiet, --silent
禁止在标准输出上显示消息。
-
-s、--skip-kubernetes-shared
跳过共享(群集范围)Kubernetes 数据的收集。仍会收集每个节点的 Kubernetes 数据和主机数据。可用于多节点集合以减小大小;应从至少一个节点收集群集数据。
-
-w WORK_DIR, --work-dir=WORK_DIR
将目录WORK_DIR用于临时文件。Default:
/tmp。 -
-x FILE,--output-file=FILE
将收集的捆绑包存储为名为 FILE 的文件。相应的文件名后缀 (
.tgz、.zip等)会自动添加。如果 FILE 为-(破折号),将捆绑包写入标准输出(意味着 --quiet)。将捆绑包写入标准输出时,磁盘上不会创建捆绑包文件。Default:pfmpSupport。 -
-z、--zip
对收集的捆绑包使用 zip 格式,而不是默认的 tar/gz。在以下情况下被忽略
zip(1)在系统上找不到。 -
--overwrite-output-file
覆盖输出文件(如果已存在)。当显式指定输出文件或目录(通过 -x 或 -d)时,默认行为是拒绝覆盖;此选项将覆盖该值。
-
--技术
在帮助消息输出中包括技术人员选项。
技术人员选项
以下选项仅供支持技术人员使用,并且仅在指定了 --tech时才会显示在帮助消息中。
-
--keep-work-dir
在创建捆绑包后保留生成的临时工作目录(通常会自动清理)。
-
--old-pod-logs
从本地 rsyslog 存储收集较旧的 Kubernetes Pod 日志。当省略时,当前 (
kubectl logs) 和之前的 (kubectl logs --previous) 仍会收集容器日志。
捆绑包结构
输出捆绑包是单个压缩归档。
- 捆绑包顶层目录是收集的系统的主机名。
- 常规主机命令输出进入
server/目录。文件名为<command>+<arguments>+ 后缀 (.txt默认)。空格替换为_,去掉非字母数字字符。
例子:server/ip_-s_addr.txt - output of ip -s addr - kubectl、helm 和 docker 命令输出进入各自的子目录。它们按范围进一步组织,
<namespace>/<pod>/<container>,如适用。
命令名称、范围和输出格式相关参数将被剥离。文件名为<subcommand>+<arguments>+ 后缀 (.txt默认)。空格替换为_,去掉非字母数字字符。
kubectl exec 命令输出存储在exec/pod 的子目录。
例子:kubectl/version.txt- 输出kubectl versionkubectl/all-namespaces/get_pods.yaml-- 输出kubectl -o=yaml get --all-namespaces podskubectl/powerflex/asmui-7d6944dcb8-zqqtk/asmui/logs_--previous.txt- 输出kubectl logs -n powerflex --container asmui --previous asmui-7d6944dcb8-zqqtkkubectl/powerflex/nats-server-box-6d685b4b7d-cf278/nats-box/exec/nats_stream_report.txt- 输出kubectl exec -n powerflex --container nats-box nats-server-box-6d685b4b7d-cf278 -- nats stream reporthelm/powerflex/get_all_asmmanager.txt- 输出helm get -n powerflex all asmmanagerdocker/ps_-a.txt- 输出docker ps -a
- 从 Pod 容器中提取的文件放置在容器目录下的容器内文件系统路径中。
例子:kubectl/powerflex/thin-deployer-5657659bc7-gzbq4/thin-deployer/opt/Dell/ASM/deployments/8aaa809298a9efe10198aa58c8874f35/deployment.log- 复印件/opt/Dell/ASM/deployments/8aaa809298a9efe10198aa58c8874f35/deployment.log从内部提取thin-deployer的容器thin-deployer-5657659bc7-gzbq4Pod - 主机文件系统文件位于其文件系统路径中相对于捆绑包根目录的位置。
例子:etc/os-release - copy of /etc/os-releasevar/log/messages - copy of /var/log/messagesproc/cpuinfo - copy of /proc/cpuinfovar/lib/rancher/rke2/agent/logs/kubelet.log - copy of /var/lib/rancher/rke2/agent/logs/kubelet.log
- 隐藏文件(以点为前缀)通过删除前导点来“取消隐藏”。
- 实用程序执行日志,
pfmp_support.log,直接放置在主机名>/根目录下<。
捆绑包目录树结构:
<hostname>/
|-- pfmp_support.log Utility execution log
|-- server/ General command output directory
| |-- ip_-s_addr.txt
| |-- uptime.txt
| |-- uname_-a.txt
| |-- ps_-elF.txt
| |-- dmesg_-T.txt
| +-- ... (one file per collected command)
|
|-- kubectl/ kubectl command output directory
| |-- version.txt Non-namespace-specific commands
| |-- ...
| |-- all-namespaces/ Cross-namespace commands
| | |-- get_pods.txt
| | |-- get_pods.yaml
| | +-- ...
| +-- <namespace>/ Per-namespace Kubernetes data
| +-- <pod>/ Per-pod data
| +-- <container>/ Per-container data
| |-- logs.txt Current container logs
| |-- exec/ Commands executed within container (if any)
| | +-- ...
| |-- <dir>/ Files extracted from container (if any)
| +-- ...
|-- helm/ helm command output directory
|-- docker/ docker command output directory
|
|-- etc/ Host files
| |-- os-release
| |-- sysconfig/
| |-- network/
| +-- ...
|-- var/
| |-- log/
| | |-- messages
| | +-- ...
| |-- lib/rancher/rke2/
| +-- ...
|-- proc/
| |-- cpuinfo
| |-- meminfo
| +-- ...
|-- sys/
|-- ...
|
|-- powerflex-pfmpsupport-extra/ Extra diagnostic data (if present)
+-- powerflex-pfmpsupport-backup/ Backed-up configuration files (if any)
磁盘空间
临时文件和生成的捆绑包的磁盘空间需求可能会有很大不同。
实用程序尝试最大程度地减少临时空间使用量;它仅限于命令输出和收集的虚拟文件系统 (/proc 和 /sys) 文件。
为了最大限度减少 PowerFlex Manager主机上的磁盘空间使用量,可以使用 --output-file=- 从远程主机流式传输捆绑包。流式传输时,捆绑包文件直接写入标准输出 (stdout);它不会在磁盘上创建。
在收集数据之前,应用工具会估计临时工作目录和输出捆绑包所需的磁盘空间。
如果估计的所需空间超过相关文件系统上的可用空间,则实用程序会终止并显示错误。可以使用 --skip-space-check 绕过此检查。
工作目录和输出目录可以驻留在不同的文件系统上;每个都是独立检查的。
估计的空间需求将写入实用程序的日志文件, pfmp_support.log。
退出状态
| 0 | 成功完成 |
| 1 | 错误(参数无效、空间不足、另一个实例已在运行、捆绑包生成失败、捕获到信号等) |
文件
<WORK_DIR>/pfmp_support.log |
执行日志(也包含在捆绑包中) |
<WORK_DIR>/powerflex-pfmpsupport-tmp/ |
临时工作目录(成功后清理) |
/tmp/powerflex-pfmpsupport/pfmpSupport.tgz |
默认输出捆绑包位置 |
<WORK_DIR>/powerflex-pfmpsupport-extra/
/tmp/powerflex-pfmpsupport-extra/ |
可选的额外诊断数据目录 |
/tmp/powerflex-pfmpsupport-backup/ |
临时备份已修改的配置文件(自动创建) |
环境
前提条件
- 该实用程序必须以 root 用户(或具有足够权限的用户身份读取系统文件、执行诊断命令、与 Kubernetes 群集交互以及访问
/proc、/sys等)。 - 标准实用程序:
tar、gzip、stat、find、awk、sed、getopt(1)(增强),nice。 - 可选:
zip(对于--zip),xz(对于--xz)。
并发
一次只能运行一个 pfmp_support 实例。该实用程序通过以下方式检查现有的正在运行的实例: pidof(1) 如果找到,则终止。
信号处理
实用程序陷阱 INT、 EXIT以及 TERM 数据收集期间的信号。收到信号后,它会:
- 恢复所有备份的配置文件。
- 清理临时目录。
- 退出,状态为 1。
将保留执行日志,并将其路径打印为标准错误。
例子
收集标准支持包:
pfmp_support
从 Kubernetes 群集中的多个节点收集捆绑包。
- 在一个节点上
kubectl和helm访问、收集所有 Kubernetes 数据:pfmp_support - 在后续节点上,跳过共享的 Kubernetes 数据:
pfmp_support --skip-kubernetes-shared
通过 SSH 连接流式传输捆绑包,而无需在远程 PowerFlex Manager主机上创建捆绑包文件:
ssh <host> 'pfmp_support --output-file=-' > pfmpSupport-<host>.tgz
使用不同的工作目录以避免填满 /tmp管理此进程:
pfmp_support --work-dir=/var/tmp
在捆绑包中包含自定义路径:
pfmp_support --collect-path=/opt/custom/app/logs --collect-path='/var/log/app*'