PowerFlex:GET_INFO — 支持捆绑包收集实用程序
摘要: get_info.sh — 从 PowerFlex 主机收集诊断信息并将其打包到支持包中
说明
get_info.sh [选项]
描述
get_info.sh是一个诊断实用程序,从 PowerFlex(以前称为 ScaleIO)主机收集调试信息并将其归档到压缩包中,以供支持人员进行分析。
该实用程序从多个来源收集数据,包括:
- PowerFlex 组件日志、配置和跟踪文件
- MDM/SCLI 查询输出和内部调试转储
- PowerFlex 组件内部诊断
- 操作系统配置、日志和运行时状态
- 硬件资源清册(存储控制器、网络设备、NVMe、NVDIMM 等)
- 核心转储(现有,可根据需要生成)
- 诊断数据收集器 (diag_coll) 统计信息
生成的捆绑包是单个压缩归档(默认为 tar/gz),可传输到 PowerFlex 支持以进行进一步分析。
在给定时间,只能在主机上运行一个 get_info.sh 实例。如果没有足够的可用空间用于其输出,它将拒绝运行(除非显式跳过空间检查)。
选项
一般选项
-
-a、--all
收集所有数据。这相当于指定 --mdm-repository、--collect-cores、--max-cores=2、--valgrind-cores 和 --analyse-diag-coll。
-
-A, --analyse-diag-coll
分析诊断数据收集器 (diag coll) 数据。
-
-b[组件], --collect-cores[=组件]
收集用户空间组件的空格分隔列表的现有核心转储。默认值(当省略 COMPONENTS 时):所有用户域组件。
注意:两者之间不得有空格-b和组件。对于长格式,使用=示例:
-b'mdm sds'--collect-cores='mdm sds' -
-d OUT_DIR, --output-dir=OUT_DIR
将生成的捆绑包存储在目录 OUT_DIR 下。Default:
<WORK_DIR>/scaleio-getinfo(参见 --work-dir)。 -
-f, --skip-mdm-login
跳过对 PowerFlex MDM 登录凭据的查询。当用户已手动登录时,此选项很有用。
-
-h, --help
显示帮助消息并退出。与 --tech 结合使用时,还会显示技术人员选项。
-
-J, --xz
对收集的捆绑包使用 tar/xz 格式,而不是默认的 tar/gz。如果系统的
tar(1)不支持--use-compress-program或xz(1)未找到。 -
-k NUM , --max-cores=NUM
从每个组件收集最多 NUM 核心文件。默认:所有核心文件。表示 --collect-cores。
-
-l, --light
生成轻型捆绑包。收集核心时,仅收集最新一代编号的日志文件,并且不包括组件可执行文件/库。使用此选项会降低可支持性,因此不建议使用它。
-
-m NUM , --max-traces=NUM
从每个组件收集最多 NUM PowerFlex 跟踪文件。默认:所有文件。
-
-N、--skip-space-check
在数据收集之前跳过可用磁盘空间验证。
-
-P PATH,--collect-path=PATH
收集附加路径 PATH。仅接受绝对路径。接受通配符;应使用通配符进行引号。可以多次指定此选项以收集多个路径。
-
-q, --quiet, --silent
禁止在标准输出上显示消息。
-
-r、--mdm-repository
收集 MDM 存储库文件。
-
-s、--skip-sdbg
跳过 SDBG(诊断调试器)输出的收集。
-
-S, --pause-core-generation
在数据收集期间暂停 PowerFlex 组件的核心生成。收集完成后,将还原原始配置。
-
-w WORK_DIR, --work-dir=WORK_DIR
将目录WORK_DIR用于临时文件。Default:
/tmp。 -
-x FILE,--output-file=FILE
将收集的捆绑包存储为名为 FILE 的文件。相应的文件名后缀 (
.tgz、.zip等)会自动添加。如果 FILE 为-(破折号),将捆绑包写入标准输出(意味着 --quiet)。将捆绑包写入标准输出时,磁盘上不会创建捆绑包文件。Default:getInfoDump。 -
-z、--zip
对收集的捆绑包使用 zip 格式,而不是默认的 tar/gz。在以下情况下被忽略
zip(1)在系统上找不到。 -
--mdm-port=PORT
使用 SCLI 命令的端口 PORT连接到 MDM。默认:scli 默认行为。
-
--overwrite-output-file
覆盖输出文件(如果已存在)。当显式指定输出文件或目录(通过 -x 或 -d)时,默认行为是拒绝覆盖;此选项将覆盖该值。
-
--技术
在帮助消息输出中包括技术人员选项。
MDM 登录选项
以下选项将传递给 SCLI --login 命令验证每个 SP 是处于正常模式还是修复模式。它们的行为和默认值由 SCLI 管理。
-
-n, --use-nonsecure-communication
在非安全模式下连接到 MDM。
-
-pPASSWORD,--password=PASSWORD
使用 PASSWORD 进行 PowerFlex MDM 登录。Default: SCLI 默认行为。
-
-u USERNAME,--username=USERNAME
使用 USERNAME进行 PowerFlex MDM 登录。默认:scli 默认行为。
-
--ldap-authentication
使用基于 LDAP 的身份验证登录到 PowerFlexMDM。
-
--management-system-ip=ADDRESS
在 ADDRESS 上连接到 SSO/M&O 以进行 PowerFlex 登录。默认:scli 默认行为。
-
--p12-password=密码
使用 PASSWORD 加密 PowerFlex 登录 PKCS#12 文件。默认:scli 默认行为。
-
--p12-path=FILE
将 PowerFlex 登录 PKCS#12 文件存储为 FILE。默认:scli 默认行为。
技术人员选项
以下选项仅供支持技术人员使用,并且仅在指定了 --tech时才会显示在帮助消息中。
-c[组件], --generate-cores[=组件]
生成核心文件(通过 gcore(1)) 用于用户域 COMPONENTS 的空格分隔列表的正在运行的进程。默认:所有用户领域组件。暗示 --collect-executables。需要 gdb 和 gcore。
-c 和组件。对于长格式,使用 =。
示例:
-c'mdm sds'
--generate-cores='mdm sds'
-
-C CORE_FILE, --reference-core-file=CORE_FILE
收集与CORE_FILE上次修改时间 (mtime) 相关的产品日志和核心,而不是执行开始时间。表示 --collect-cores。
-
-E REF_TIME, --event-time=REF_TIME
收集与REF_TIME相关的产品日志和核心,而不是执行开始时间。接受
date(1)。表示 --collect-cores。 - -g[组件], --valgrind-cores[=组件]
收集指定用户 LAN 组件的 Valgrind 核心转储。默认:所有用户领域组件。暗示 --collect-executables。
注意:两者之间不得有空格 -b 和组件。对于长格式,使用 =
示例:
-g'mdm sds'
--valgrind-cores='mdm sds'
-
-t MIN, --minutes-before-event=MIN
收集在参考时间之前几分钟内生成的产品日志和核心。Default: 15.
-
-T MIN, --minutes-after-event=MIN
收集在参考时间后最多几分钟内生成的产品日志和核心。Default: 5.
-
-X[组件],--collect-executables[=组件]
收集指定用户领域 COMPONENTS 的组件可执行文件及其共享库。默认:所有用户领域组件。
注意:两者之间不得有空格
-b和组件。对于长格式,使用=示例:
-X'mdm sds' --collect-executables='mdm sds' -
--keep-work-dir
在创建捆绑包后保留生成的临时工作目录(通常会自动清理)。
捆绑包结构
输出捆绑包是单个压缩归档。
- 捆绑包顶层目录是收集的系统的主机名。
- 常规主机命令输出进入
server/目录。
文件名为<command>+<arguments>+ 后缀 (.txt默认)。空格替换为_,去掉非字母数字字符。
例子:server/ip_-s_addr.txt– 输出ip -s addr - 产品命令输出进入组件的子目录。
mdm/对于scli、sdc/对于drv_cfg等。
命令名称 (scli、drv_cfg等)被剥离。第一个有意义的参数将成为文件名。为文件分配相关后缀,.txt默认情况下。
例子:mdm/query_cluster.txt– 输出scli --query_clustermdm/tgt_dump.txt– 输出scli --debug_action --tgt_dumpsdc/query_mdms.txt– 输出drv_cfg --query_mdmssds/sdbg.txt– SDBG的输出dumpallscreens用于 SDS
- 产品组件文件(而不是命令输出),
<component>/cfg、<component>/logs等。
从组件目录复制,并去除前缀。
例子:mdm/cfg/conf.txt– 副本/opt/emc/scaleio/mdm/cfg/conf.txtsds/logs/trc.0– 副本/opt/emc/scaleio/sds/logs/trc.0
- 主机文件系统文件位于其文件系统路径中相对于捆绑包根目录的位置。
例子:etc/os-release– 副本/etc/os-releasevar/log/messages– 副本/var/log/messagesproc/cpuinfo– 副本/proc/cpuinfo
- 诊断收集器 (diag_coll) 文件使用
/opt前缀去掉,保留内部结构。
例子:diag_coll/logs/sar.0– 副本/opt/diag_coll/logs/sar.0 - 隐藏文件(以点为前缀)通过删除前导点来“取消隐藏”。
- 实用程序执行日志,
get_info_run.log,直接放置在主机名>/根目录下<。
捆绑包目录树结构:
<hostname>/
|-- get_info_run.log Utility execution log
|-- server/ General command output directory
| |-- ip_-s_addr.txt
| |-- uptime.txt
| |-- uname_-a.txt
| |-- ps_-elF.txt
| |-- dmesg.txt
| +-- ... (one file per collected command)
|
|-- mdm/ PowerFlex component data (if installed)
| |-- cfg/ Configuration files (excl. PEM)
| |-- logs/ Trace and log files
| |-- rep/ Repository (if --mdm-repository)
| |-- query_all.txt SCLI query outputs
| |-- sdbg.txt SDBG screen dumps
| +-- ...
|-- sds/
|-- pds/
|-- dgwt/
|-- sdr/
|-- sdt/
|-- lia/
|-- sdc/
|-- gateway/
|
|-- diag_coll/ Diagnostic data collector (if installed)
| |-- logs/
| |-- cfg/
| +-- ...
|
|-- etc/ Host files
| |-- os-release
| |-- sysconfig/
| |-- network/
| +-- ...
|-- var/
| |-- log/
| | |-- messages
| | +-- ...
| +-- ...
|-- proc/
| |-- cpuinfo
| |-- meminfo
| +-- ...
|-- sys/
|-- ...
|
|-- scaleio-getinfo-extra/ Extra diagnostic data (if present)
+-- scaleio-getinfo-backup/ Backed-up configuration files (if any)
产品日志和核心文件筛选
本节中介绍的选项控制产品日志文件(也称为跟踪文件,例如 trc.0、 trc.1、 exp.0) 并选择核心转储文件以包含在收集的捆绑包中。他们通过定义参考时间、围绕它的时间窗口和计数限制来做到这一点。
未指定筛选选项时,将收集所有产品日志文件和(如果启用了核心收集)所有核心转储文件。筛选选项会逐步缩小此选择范围,如下所述。
参考时间
参考时间可通过以下任一方法进行设置 -E/--event-time 或 -C/--reference-core-file。
如果两者都不是 --event-time 也 --reference-core-file 给定,则不执行时间窗口过滤:参考时间默认为当前时间,并且仅用于当计数限制 (-m 或 -k) 生效(请参阅下面的计数限制)。
如果两者兼而有之 -E 和 -C appear,命令行上的最后一个生效。
时间窗口
设置参考时间(使用 --event-time 或 --reference-core-file),围绕它建立了一个时间窗口。可以使用以下命令设置时间窗口范围: -t/--minutes-before-event 和/或 -T/--minutes-after-event,分别默认为 15 分钟和 5 分钟。只有内容与此窗口重叠的文件才符合收集条件。
例如: -E "2020-03-20 14:30" -t 10 -T 3 收集涵盖 14:20:00 到 14:33:00 的文件。
--minutes-before-event 和 --minutes-after-event 在任一情况均不被忽略 --event-time 也 --reference-core-file 指定。
计数限制
可以使用以下命令设置文件计数限制: -m/--max-traces 和 -k/--max-cores,分别用于日志文件和核心文件。该限制是按组件测量的。
当时间窗口内有超过 NUM 的文件(或者,如果没有处于活动状态的窗口,则可用)时,将收集最接近参考时间的 NUM 文件。
在不 --event-time 或 --reference-core-file,所有文件均为候选文件(无时间窗口),并选择 NUM 最新文件。
筛选逻辑
文件筛选首先应用时间窗口,然后应用计数限制:
- 确定候选人。枚举组件的所有产品日志文件和/或核心转储文件。
- 派生内容期。产品日志文件内容代表一个句点。内容周期被视为从其前置任务的上次修改时间 (mtime) 或 UNIX 纪元(此时不存在前置任务)开始;它以文件自身的 mtime 结束。核心转储文件表示某个时间点,即文件的 mtime。
- 应用时间窗口(如果
-E或-C指定)。内容完全落在窗口之外的文件将从选择中丢弃。对于产品日志文件,如果没有文件位于窗口内,则会保留最接近窗口的单个文件,以便组件的捆绑包永远不会为空。对于核心转储文件,此类回退不适用。 - 应用计数限制(如果
-m和/或-k指定)。在其余文件中,最多选择 NUM,优先选择最接近参考时间的文件。参考时间之前和之后的文件均等地竞争选择。
认证
如果检测到主 MDM 进程在侦听预期的端口(默认值:6611).
MDM 登录选项将传递给 SCLI --login 命令,并由其处理。
如果登录失败,实用程序将终止并显示错误。
跳过登录时,仍会尝试 SCLI 命令(以支持用户事先手动登录的情况)。3 次 SCLI 失败后,将显示警告,并跳过所有后续的 SCLI 命令。
在以下情况下,将跳过登录:
- 在本地主机上找不到主 MDM 进程。
- 指定了 --skip-mdm-login 选项。
在以下情况下登录失败:
- MDM 进程所有者不在授权用户列表中(默认值:
root)并启用安全登录。 - The SCLI
--login命令返回错误(例如,错误的凭据)。
磁盘空间
临时文件和生成的捆绑包的磁盘空间需求可能会有很大不同。
实用程序尝试最大程度地减少临时空间使用量;它仅限于命令输出和收集的虚拟文件系统 (/proc 和 /sys) 文件。
为了尽可能减少 PowerFlex 主机上的磁盘空间使用量,可以使用 --output-file=- 从远程主机流式传输捆绑包。流式传输时,捆绑包文件直接写入标准输出 (stdout);它不会在磁盘上创建。
在收集数据之前,应用工具会估计临时工作目录和输出捆绑包所需的磁盘空间。
如果估计的所需空间超过相关文件系统上的可用空间,则实用程序会终止并显示错误。可以使用 --skip-space-check 绕过此检查。
工作目录和输出目录可以驻留在不同的文件系统上;每个都是独立检查的。
估计的空间需求将写入实用程序的日志文件, get_info_run.log。
退出状态
| 0 | 成功完成 |
| 1 | 错误(参数无效、空间不足、登录失败、另一个实例已在运行、捆绑包生成失败、捕获到信号等) |
文件
<WORK_DIR>/get_info_run.log |
执行日志(也包含在捆绑包中) |
<WORK_DIR>/scaleio-getinfo-tmp/ |
临时工作目录(成功后清理) |
/tmp/scaleio-getinfo/getInfoDump.tgz |
默认输出捆绑包位置 |
<WORK_DIR>/scaleio-getinfo-extra/
/tmp/scaleio-getinfo-extra/ |
可选的额外诊断数据目录 |
/tmp/scaleio-getinfo-backup/ |
临时备份已修改的配置文件(自动创建) |
/opt/emc/scaleio/ |
PowerFlex 安装目录 |
环境
前提条件
- 必须以 root 用户(或具有足够权限的用户读取组件文件、执行诊断命令和访问)身份运行该实用程序
/proc、/sys等)。 - 标准实用程序:
tar、gzip、stat、find、awk、sed、getopt(1)(增强),nice。 - 可选:
zip(对于--zip),xz(对于--xz),gdb/gcore(对于--generate-cores)。
并发
一次只能运行一个 get_info.sh 实例。该实用程序通过以下方式检查现有的正在运行的实例: pidof(1) 如果找到,则终止。
信号处理
实用程序陷阱 INT、 EXIT以及 TERM 数据收集期间的信号。收到信号后,它会:
- 恢复所有备份的配置文件(例如,核心代际设置)。
- 清理临时目录。
- 退出,状态为 1。
将保留执行日志,并将其路径打印为标准错误。
例子
收集标准支持包:
get_info.sh
通过 SSH 连接流式传输捆绑包,而无需在远程 PowerFlex 主机上创建捆绑包文件:
ssh <host> 'get_info.sh --output-file=-' > getInfoDump-<host>.tgz
使用不同的工作目录以避免填满 /tmp管理此进程:
get_info.sh --work-dir=/var/tmp
在捆绑包中包含自定义路径:
get_info.sh --collect-path=/opt/custom/app/logs --collect-path='/var/log/app*'
仅收集 SDS 和 MDM 组件的最新核心转储:
get_info.sh --collect-cores='mdm sds' --max-cores=1
使用自定义时间窗口以核心文件的修改时间为中心收集数据:
get_info.sh --reference-core-file=/opt/emc/scaleio/sds/bin/core.1000 \
--minutes-before-event=10 \
--minutes-after-event=2