本文旨在向用户介绍扩展 snap 实用程序的知识,为安装在系统上的第三方组件收集调试数据。本文提供了对 snap 的一些背景介绍,比如架构概述、各种组件等。文末还提供了一个完整的示例。

Prateek Goel, 系统软件工程师, IBM

/developerworks/i/p-pgoel.jpgPrateek Goel 是一位系统软件工程师,过去两年在 UPT AIX Release 团队工作。在此期间,他参与了网络文件传输的数据完整性测试,他目前是 ProbeVue 方面的主题专家(SME)。



2014 年 2 月 10 日

简介

要开始调试任何问题,支持团队或开发人员可能需要掌握一些背景信息,比如系统配置、处于活动状态的进程、各种组件的参数设置,等等。由于在收集数据时对问题一无所知,所以很难预测需要哪些信息集才能解决问题。此外,在问题分析期间,要求客户不断发送需要的小数据集,这可能让顾客感到不满。客户期望支持团队一次收集尽可能多的必要数据,并为他们提供相应的解决方案。但是,为了实现此目的,您需要提供大量命令,让客户能够结合各种标志来运行它们,并发送详细信息。客户很容易对此感到厌烦。

为了简化此需求,AIX 提供了一个名为 snap 的实用程序,它是一个收集调试数据的实用程序。

它将数据收集工作合理地分组到各个组件中。支持和开发团队成员确定当前需要使用哪些组件,仅收集这些组件的数据。在最新的 IBM AIX® 版本中,snap 已得到改进,支持用户在 snap 目前可收集的数据上灵活地添加他们定义的数据收集脚本。

本文的重点是让读者熟悉依据各种 snap 标志来收集的数据类型,以及用户如何将他们的调试数据收集脚本插入到 snap 框架中。我们最后将提供一个示例,展示如何将用户编写的数据收集脚本与 snap 框架相集成。

架构视图

每个客户系统可能拥有不同的配置,以便满足他们的不同需求,而且每个不同的子系统或配置可能拥有自己的一组用来收集调试数据的命令。为了适应涵盖各种各样命令的数据收集,snap 将这些数据收集命令合理地划分为不同的组。每个组识别它打算收集的信息类型。“general” 分组收集一般系统信息,“kernel” 分组收集有关内核属性的信息,“tcpip” 分组收集系统的网络组件的信息,等等。

借助这种分组,用户无需记住每个命令,只需结合使用正确的标志来运行 snap 命令。因此,利用 snap,用户(支持和客户团队成员)拥有从不同组件收集调试数据的单个接口,无论系统是如何设置的。

表 1. 各种组件和它们收集的数据
snap 组件snap 标志备注
async-A收集同步 (tty) 信息
dump-D收集转储和 /unix,以及 livedump 信息。
filesys-f收集文件系统信息
general-g收集一般信息,比如设备列表、配置文件,等等
hacmp-e收集 IBM HACMP™ 信息
IB-Y收集 InfiniBand® 调试信息
install-i收集安装信息
kernel-k收集内核信息,比如各种内核调节变量等
lang-l收集安装的各种编译器的编程语言信息
lvm-L收集逻辑卷管理器 (LVM) 信息
nfs-n收集网络文件系统 (NFS) 信息
pcixscsi 和 sissas-I收集 PCI-X-SCSI 和 SISSAS 信息
printer-p收集打印机信息,比如设备属性等
product-z运行第三方调试命令
scraid-R收集小型计算机系统接口 (SCSI) 独立磁盘冗余阵列 (RAID) 信息
sna-s收集系统网络架构 (Systems Network Architecture, SNA) 信息
ssa-b收集串行存储架构 (Serial Storage Architecture, SSA) 适配器/磁盘信息
tcpip-t收集 TCP/IP 信息,比如各种调节变量、配置等
wlm-w收集 Workload Manager (WLM) 信息,比如已安装的 WLM 类等
wpars-@收集 Workload Partition (WPAR) 信息
XS25-X收集 X.25 许可的程序产品 (LPP) 信息

对于其他一些组件,比如 Reliable Scalable Cluster Technology (RSCT),数据会在 general 组件中捕获。与系统相关的跟踪信息也被作为一般信息捕获。

有关 snap 的完整标志列表和其他选项,请参见 参考资料 部分中的链接。

只要 snap 收集数据,使用的默认目录就是 /tmp/ibmsupt/。再此目录下,有一些可能基于 snap 组件而创建的子目录。也就是说,对于每个 snap 组件,用户可查看一个目录。

此外,还创建了以下两个特殊的目录(snap 组件):

  • other:客户可将他们希望与 IBM 支持团队共享的任何附加信息都放在这个目录下。
  • testcase:在这个目录下,客户可更新他们的测试案例,供 IBM 支持团队查看。

扩展 snap 数据收集

有多家供应商提供了各种设备和应用程序,供用户根据他们的需求进行使用。在拥有这类第三方设备的系统中,问题可能源于第三方部件故障。因为 snap 是 AIX 开发人员构建的,所以他们可能不知道客户使用了哪些第三方设备,要收集何种类型的调试信息,等等。因此,snap 无法针对所有第三方设备而内置一些代码。

从客户角度讲,即使客户知道收集与第三方设备相关的信息将要运行的所有命令,可能仍然无法承担运行所有这些命令的负担。

为了保持 snap 作为所有类型的调试数据收集的单一接口,已对它进行了扩展,允许第三方供应商向 snap 框架注册他们的调试数据收集脚本。用户可结合使用此功能提供的一个附加标志来运行 snap 命令,以收集第三方调试数据和特定于 AIX 的数据。此功能有望减少客户和支持团队收集数据的负担。

z 标志已被添加到 snap 命令,以便允许所有用户执行一些活动,比如注册、取消注册和运行第三方命令。它接受 ADD、DELETE 等标记,以及以下字段作为参数:

  • product_name定义该脚本属于的类,它可以是用户用来共同标识一组脚本的任何值。这有助于将逻辑上类似的脚本分组到一起。例如,假设有 3 个网络适配器来自 3 个不同的第三方。如果他们都使用类 network 来分类它们的脚本,那么用户可运行以下命令来收集所有网络设备的调试数据。
    # when no tag is passed it indicates execution of script.
    # snap - z class="network"
  • command_path定义要运行的脚本和它的参数。您需要提供完整的路径,以及必须用于调用此脚本的参数。

注册第三方调试脚本

使用 ADD 关键字和 “z” 标志。

例如,以下命令将 /myprod/bin/dbgscript -a 脚本注册为属于 myclass 类的 myprod 产品的一部分。

#snap -z ADD "product_name=myprod" "class=myclass" "command_path=/myprod/bin/dbgscript -a"

要点:

  • 如果调试二进制数据已更改或更新,用户必须重新注册该脚本,以便在 snap 存储库中更新最新的二进制数据。
  • 不支持使用 '、< 和 | 等特殊字符作为 command_path 变量的值。
  • 如果以前创建了任何具有相同产品名称的条目,那么所有条目都会被取消注册,然后再次注册新条目。

取消注册第三方调试脚本

使用 DELETE 关键字和 “z” 标志。

例如,以下命令删除了所有 product_name 指定为 productname 的条目。

#snap -z DELETE "product_name=productname"

备注:用户无法删除基于该类或 command_path 属性的条目。

运行第三方调试脚本

在此活动中,用户实际上运行的是已注册的脚本。用户可通过 4 种方式运行脚本来收集所需的调试信息。

  • 单一产品:对单一产品运行数据收集脚本。下面的示例运行了在 product_name 下注册为 myproduct 的脚本。
    # snap -z "product=myproduct"
  • 多个产品:对多个产品运行数据收集脚本。下面的命令运行了在 product_name 下注册为 abcdef 的所有脚本。
    # snap -z "product_name=abc" -z "product_name=def"
  • 基于类来收集数据: 运行向 myclass 注册为 class 字段的脚本。
    备注:这会导致以下情形:如果不同的产品注册到同一个类下,那么可能从不同的产品运行脚本。
    # snap -z "class=myclass"
  • 收集注册的所有脚本的数据: 运行所有脚本,无论调用和产品是什么。
    # snap -z ALL  # Runs all the scripts irrespective of class and product.

要点:

  • snap 命令的 “z” 标志可与其他 snap 标志结合使用,但只能专用于一个标志。
  • snap 命令的 “a” 标志在内部等效于 snap z ALL

因为这些是用户指定的脚本,所以数据收集花费的时间可能超过默认的超时值。因此,建议使用 M 选项来指定该脚本所需的不同于默认值的任何超时值(如下面的示例中所示)。

# snap -z "product_name=abc" -M 500

使用技巧

  • 仅根用户可注册。需要给向基于角色的访问控制 (Role Based Access Control, RBAC) 用户分配额外的特权,提供注册第三方脚本的权限。
  • 将类似的产品注册到类似的类(比如网络或设备)中会很有用,因为数据收集会更加轻松。

编写可插入的脚本

snap 被设计为一个分为两阶段的数据收集工具。

  • 第 1 阶段 - 确定要收集的数据大小。
  • 第 2 阶段 - 执行实际的数据收集工具。

向 snap 注册的任何第三方脚本都必须符合此设计。要遵守的设计如下面的示例所示。

##########################################
# Log what action your script is taking
##########################################
if [ "$PASSNO" = 1 ]
then
    echo " Checking space requirement for myproduct...\c" >> $SCRIPTLOG
else
    echo "Gathering myproduct information...\c" >> $SCRIPTLOG
fi
##############################################
# do common work if, any
# remember this code will be
# executed for both pass 1 and pass 2
##############################################
If [  "$PASSNO" = 1 ]
then
    let total_bytes=$size_for_one*$ No_of_adapters
       ############################################
       # Update the size of data into file so that snap can use it.
       ############################################
echo "$total_bytes" > $SCRIPTSIZE
exit 0
fi
if [[ -z $SNAPDIR ]]
then
             ###################################
             #do data collection and redirect output to 
             # $SNAPDIR/yourfilename
             ##################################
 fi
#######################################
# Update in log before exiting the script..
# this is required in PASS 2 only.
#######################################
echo " done.">> $SCRIPTLOG

snap 导出的变量将用在用户脚本中:

  • $PASSNO:该变量表示需要在哪个阶段(第 1 或第 2 阶段)处理数据。
  • $SCRIPTLOG:该变量包含该脚本用来记录它所需的任何操作记录的文件的名称。
  • $SCRIPTSIZE:该变量包含必须提及要收集的数据大小的文件名。
  • $SNAPDIR:该变量指向可存储所有调试数据的目录。用户可按照他们喜爱的方式自由地使用此目录。例如,如果收集了多个数据文件,那么每个文件可放在不同的子目录中,或者放在具有不同命名的同一个目录中,甚至将所有数据组合到一个文件中。

备注:snap 在它自己拥有特权的目录中内部创建了脚本的一个副本。所以,如果用户在现有位置修改脚本,该更改不会反映出来。在这些情况下,用户必须重新注册此脚本。

示例

用户调试数据收集脚本

# cat /home/bin/myscript.sh
Size_For_One=$1
                                                
if [ "$PASSNO" = 1 ]
then
    echo "Checking space requirement for myproduct...\c" >> $SCRIPTLOG
else
    echo "Gathering myproduct information...\c" >> $SCRIPTLOG
fi
#####################################################
# do common work if, any
# remember this code will be executed for both pass 1 and pass 2
#####################################################
Number_Of_Files=`ls -l /home/ibm/  | wc -l`
if [  $quot;$PASSNO" = 1 ]
then
       let total_bytes=$Size_For_One*$Number_Of_Files
       echo "$total_bytes" > $SCRIPTSIZE
       exit 0
fi
if [[ -z $SNAPDIR ]]
then
       ###################################
       #do data collection and redirect output to 
       # $SNAPDIR/yourfilename
       ##################################
       cp /home/ibm/* $SNAPDIR/
fi
echo " done.">> $SCRIPTLOG

注册用户调试数据收集脚本

在下面的命令中,command_path 字段包含脚本的完整路径和一个要传递给该脚本的参数。

#snap -z ADD "product=myproduct" "class=myclass" "command_path=/home/ibm/myscript.sh 1024"

运行用户调试数据收集脚本

在下面的命令中,我们要求 snap 在运行向指定的产品或类注册的脚本的同时,收集一般调试信息。用户可自由地将其他 snap 标志与 -z 标志结合使用。

# snap -g -z "product=myproduct"
---  OR ----
# snap -g -z "class=myclass"

取消注册用户调试数据收集脚本

# snap -z DELETE "product=myproduct"

zsnap 工具

zsnap 工具为 snap 命令提供了补充。它调用 snap 来执行所有标准的数据收集。此工具提供了额外的信息收集例程,以扩展 IBM 收集信息的能力,从而改善客户服务。zsnap 由技术支持团队创建和支持。IBM 建议在呼叫 AIX 或 PowerHA 技术支持中心之前安装 zsnap。

您可以在 参考资料 部分找到 zsnap 的更多信息和下载链接。

参考资料

学习

  • snap:完整的标志列表
  • zsnap 文档
  • 浏览 技术书店,查阅有关这些主题和其他技术主题的图书。
  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
  • AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
  • IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=962176
ArticleTitle=扩展 snap 数据收集
publish-date=02102014