引言
Universal Management Enablement(UME) 是 IBM i 上的一个授权程序(License Program),该程序遵循 DMTF(Distributed Management Task Force)的 CIM(Common Information Model)规范来完成系统管理功能。UME 自 IBM i 5.4 版本引入,主要架构移植自开源项目 OpenPegasus,目前经过 3 个版本的开发,已经实现了 IBM i 平台上硬件,软件和补丁,存储,网络,用户,系统值等基本信息的管理,并且能够对性能数据,消息队列以及部分异常事件进行监控。UME 对管理对象的建模方式遵循了行业标准,这使得基于 UME 开发的管理应用具有良好的可扩展性。上层应用通过集成开源 Java 开发包 SBLIM(Standards-Based Linux Instrumentation for Manageability)来访问 UME,这将有助于提升上层应用的可移植性。
表 1.IBM i CIM 产品的版本
产品标识 | 版本号 | 支持平台 | 发布日期 | 备注 |
5722UME | V1R2M0 | IBM i 5.4/6.1 | 2008.4 | |
5770UME | V1R3M0 | IBM i 6.1/7.1 | 2010.4 | |
5770UME | V1R3M1 | IBM i 6.1/7.1 | 2011.8 | 通过补丁发布,补丁号 SI41540 和 SI41685 |
在 IBM i 5.4 及之前的版本,CIM 是 IBM i 操作系统的一部分并跟随 IBM i 发布,开发环境是 IBM i 集成语言环境(ILE,Integrated language Environment)。在将 CIM 功能放入 UME 授权程序后,CIM 的开发是在类 AIX 环境 PASE 下 (Portable Application Solutions Environment),这使得 CIM 的开发工作拥有更广泛的技术基础。
本文以下的部分将对 CIM 在 IBM i 平台功能做简要介绍。
查看资源列表
运用 CIM 进行系统管理的一个基本功能是资源查看。通过 CIM 模型,可以将系统资源进行分类,并保证建模的通用和标准化。
硬件资源
表 2 中列举了 CIM 如何对 IBM i 典型的硬件资源进行建模和管理。
表 2. 硬件资源建模
硬件类型 | CIM 模型 | 重点关注属性 |
处理器 | IBMi_Processor | 类型号,零件号,序列号 |
内存 | IBM_PhysicalMemory | 类型号,零件号,序列号 |
主板 | IBMi_Chassis | 位置 |
磁带 | IBMOS400_TapeDrive | 容量 |
总线控制器 | IBMi_BusController | 序列号 |
存储控制器 | IBMi_StorageController | 序列号 |
内存池 | IBM_StoragePool | 剩余空间,总容量 |
打印机 | IBMi_Printer | 表单类型,分页数 |
使用 CIM 自带的客户端查看系统资源是最方便的手段。
图 1. 通过 cimcli 客户端命令发现系统 CPU 资源
cimcli 是 UME 发布的一个客户端命令,目前 UME 不支持图形化界面。上层管理应用也可以通过 SBLIM 来调用 CIM 接口。
软件资源
表 3 中列举了 CIM 如何对 IBM i 的软件及补丁进行建模和管理。
表 3. 软件资源建模
软件类型 | CIM模型 | 重点关注属性 |
软件 | IBMi_SoftwareProduct | 产品名,选项,版本,过期时间,授权码 |
补丁 | IBMi_TemporaryFix | 补丁号,状态 |
补丁包 | IBMi_TempFixGroup | 名称,状态,级别 |
网络资源
表 4 中列举了 CIM 如何对 IBM i 网络相关的概念进行建模和管理。
表 4. 网络资源建模
网络基本概念 | CIM模型 | 重点关注属性 |
链路描述 | IBM_EthernetPort | 状态,链路速度 |
局域网端点 | IBM_LANEndpoint | MAC 地址 |
TCP 端点 | IBM_TCPProtocolEndpoint | TCP 端口号 |
IP 地址 | IBM_IPProtocolEndpoint | IP 地址 |
存储资源
表 5 中列举了 CIM 如何对 IBM i 存储领域建模和管理。其中包含了外部磁盘,虚拟磁盘以及 RAID 等方面,并且涉及到一系列的 Profile。
表 5. 存储资源建模
存储设备 | CIM模型 | 重点关注属性 |
磁盘 | IBMi_DiskDrive | 类型,序列号 |
辅助存储池 | IBM_CompositeExtent | 编号,剩余容量 |
存储集合 | IBM_PrimordialStoragePool | RAID 支持,集合编号 |
修改系统配置
除了上述的查看功能外,CIM 还支持对被管对象进行修改以及创建和删除。目前支持修改操作的对象包括用户账号,用户组,联系人以及系统值。其中可以对账号,用户组,联系人进行创建删除操作。
用户账号,组和联系人
修改账号属性
图 2 显示了使用 cimcli 命令修改用户 ZHUJTTEST 的主目录为 /HOME/ss。
图 2. 修改账号属性
创建和删除用户账号
CIM 通过 CreateInstance 和 DeleteInstance 接口来支持创建和删除用户账号操作。图 3 演示了如果通过 cimcli 命令来创建一个名为 ZHUJTTES 的账号并将其删除。
图 3. 创建和删除账号
系统值
系统值是 IBM i 系统上的全局环境变量,修改系统值会影响 IBM i 上所有作业。在 IBM i 命令行提供了 WRKSYSVAL 命令来查看和修改系统值,现在 CIM 也支持这个功能。CIM 按照系统值的类别进行建模,例如和日期和时间相关的系统值,和密码相关的系统值以及和性能相关的系统值等等。
这里以登录相关的系统值为例展示 CIM 可以通过修改属性来改变系统值,UME 中使用类 IBMi_SignonSettingData 建模登录相关的系统值,该类继承自标准类 CIM_SettingData。运行命令请参阅上节 图 2。
表 6. 建模登录系统值
属性 | 系统值 | 描述 |
string MaxInvalidSignonAttempts | QMAXSIGN | 最大登录尝试次数 |
string ActionToMaxInvalidSignonAttempts | QMAXSGNACN | 登录失败后行为 |
string SignonInformation | QDSPSGNINF | 登录后显示信息 |
string SpecificDeviceAccessForPrivilegedUser | QLMTSECOFR | 特权用户设备访问的限制 |
string DeviceSessionLimit | QLMTDEVSSN | 设备会话限制 |
string RemoteSignonControl | QRMTSIGN | 远程登录控制 |
发现关联对象
通过 CIM 的类建模并实现了 IBM i 上对象之后,可能单一对象不能够完整表示客户需要的信息,可以使用关联类将有内在联系的一组对象进行捆绑。
表 7. 典型关联
关联类名 | 关联对象 | 应用举例 |
IBM_Realizes | 物理硬件和逻辑硬件 | 用来发现物理机器上各种卡的逻辑功能,如网卡,内存卡等 |
IBM_ControlledBy | 设备间的控制关系 | 用来发现一个端口控制器能管理的所有端口 |
IBMi_FixesInSoftwareProduct | 软件产品和补丁 | 用来发现软件上已安装了的补丁 |
IBMi_MemberOfGroup | 用户和组的关系 | 用来发现一个组包含的所有用户 |
例子:通过关联类 IBMi_MemberOfGroup 来查找 Test 组包含的用户。
图 4. 关联类的使用
监控各类事件
上述获取信息的方式都是采用了客户端主动查询的方式,请求和响应是同步的。还有一种情况,当客户请求的事件发生是不确定的,应采用订阅方式向 CIM 服务器登记感兴趣的事件,在事件发生后由 CIM 异步通知客户。订阅请求主要包含两部分内容,关注的事件以及接受者的信息。CIM_IndicationFilter 类建模了关注事件信息,使用 SQL 语句来描述监控的对象以及触发条件;CIM_ListenerDestinationCIMXML 类通常提供接受者的 IP 及端口。最后通过创建关联类 CIM_IndicationSubscription 将上述两个类的实例进行绑定。
图 5 演示了使用 UME 发布的 cimsub 命令来订阅事件。其中 -cf 命令选项指定创建 CIM_IndicationFilter 的实例 filter1,并在 -Q 后添加 SQL 语句;-ch 命令选项创建 CIM_ListenerDestinationCIMXML 的实例 handler1,并且用 -D 提供事件接收者的地址;-cs 命令选项使用 filter1 和 handler1 实例作为参数创建一个完整的订阅。用户可以通过对 CIM_IndicationSubscription 进行 getInstance 操作来查看订阅确保已成功。注意:只有当 CIM_IndicationSubscription 的实例创建成功后该订阅才有效。
图 5. 事件的订阅
消息队列
消息队列是 IBM i 上 *MSGQ 类型的对象,用户可以通过监听一个消息队列来及时获得通知。用户通过订阅语句指定特定类型的消息。
清单 1. 订阅消息对列 <QueryString>SELECT * FROM IBM_MessageQueueIndication WHERE AlertingManagedElement = 'QSYS/QSYSOPR' AND MessageID LIKE 'CPF.*' </QueryString>
AlertingManagedElement 是必要的参数,用来指定消息队列的名称。MessageID 和 MessageSeverity 用来过滤不满足条件消息。
当 CPF1231 进入消息队列 QSYSOPR 时,CIM 会向接受者发送一个事件的实例。EventTime 是事件的发生时刻。
清单 2. 返回消息实例 Instance of IBM_MessageQueueIndication {
string IndicationIdentifier = CPF1231;
string CorrelatedIndications = ;
datetime IndicationTime = 20110907110514.000000+480;
string OtherSeverity = ; s
tring IndicationFilterName = ;
string SequenceContext = ;
sint64 SequenceNumber = ;
string Description = IBM i message queue indication CPF1231;
string AlertingManagedElement = QSYS/QSYSOPR;
uint16 AlertingElementFormat = 2;
string OtherAlertingElementFormat = Library/Name;
uint16 AlertType = 2; string OtherAlertType = ;
uint16 PerceivedSeverity = 6;
uint16 ProbableCause = 1;
string ProbableCauseDescription =
Cause . . . . . : A prestart job for program in library cannot be started.
The job description in the entry specifies an output queue in library that was not
found, or the output queue or library could not be allocated. The subsystem job log
may contain more information.
Recovery . . . : Display the job log (DSPJOBLOG command) for the subsystem
for more information. If the output queue does not exist, create it. If the output
queue cannot be allocated, use the Work with Object Locks (WRKOBJLCK) command to
determine when the output queue is not locked. Then wait until message CPC0905 is
shown on the system operator (QSYSOPR)) message queue, indicating that the entry
is no longer active. To start new jobs, enter the Start Prestart Jobs (STRPJ)
command.;
uint16 Trending = 0;
…
string EventID = CPF1231;
datetime EventTime = 20110907110452.000000+480;
string SystemCreationClassName = IBMOS400_ComputerSystem;
string SystemName = C60D070C.CN.IBM.COM;
string ProviderName = QUME_MessageQueueIndicationProvider;
string Message = Subsystem cannot start prestart job .;
string MessageArguments = ;
string MessageID = CPF1231;
string OwningEntity = IBM i;
string MessageType = 04;
string MessageKey = 0x000097E0;
uint16 MessageSeverity = 60;
string SenderJob = QZRCSRVS QUSER 668715;
string AlertOption = *NO;
string ProblemIdentification = ;
string DefaultReply = ;
string ReplyStatus = N;
boolean IsCriticalBreakMessage = FALSE;
};
|
性能
IBM i 的性能数据来自于 Performance Collection Service。该数据是按周期发布的,最短间隔可以到 15 秒。
表 8. 性能数据的分类
性能数据 | 定义 |
CPU 利用率平均值 | MDOS2A |
作业交互速率平均值 | MDOS41 |
磁盘使用率平均值 | MDOS48 |
批处理作业逻辑数据库输入输出速率 | MDOS45 |
用户存储池错误平均值 | MDOS46 |
订阅语句要指定一个性能指标,由 MetricDefinitionId 保存。
清单 3. 订阅性能数据 <QueryString>
SELECT l.* FROM CIM_InstModification l WHERE l.SourceInstance
ISA IBMOS400_ColSrvMetricValue
and l.SourceInstance.IBMOS400_ColSrvMetricValue::MetricDefinitionId
='MDOS2A' </QueryString>
|
CIM 从 Performance Collection Service 接收到最新的 CPU 利用率平均值,在 SourceInstance 的 MetricValue 中,Duration 说明统计周期是 30 秒。
清单 4. 返回性能数据实例 Instance of IBM_ColSrvMetricValueModification {
string IndicationIdentifier = 4E65EC35-000B-354F-0006-2A780D0E664B;
string CorrelatedIndications = ;
datetime IndicationTime = 20110906174733.739620+480;
uint16 PerceivedSeverity = ;
string OtherSeverity = ;
string IndicationFilterName = ;
string SequenceContext = ;
sint64 SequenceNumber = ;
object SourceInstance
= <INSTANCE CLASSNAME="IBMOS400_ColSrvMetricValue" >
<ROPERTY NAME="Caption" PROPAGATED="true" TYPE="string">
</PROPERTY>
<ROPERTY NAME="Description" PROPAGATED="true" TYPE="string">
</PROPERTY>
<ROPERTY NAME="ElementName" PROPAGATED="true" TYPE="string">
</PROPERTY>
<ROPERTY NAME="InstanceID" PROPAGATED="true" TYPE="string">
<VALUE>0000005CMDOS2A</VALUE> </PROPERTY>
<ROPERTY NAME="MetricDefinitionId" PROPAGATED="true" TYPE="string">
<VALUE>MDOS2A</VALUE>
</PROPERTY>
<ROPERTY NAME="MeasuredElementName" PROPAGATED="true" TYPE="string">
<VALUE>LWI07</VALUE>
</PROPERTY>
<ROPERTY NAME="TimeStamp" PROPAGATED="true" TYPE="datetime">
<VALUE>20110906133930.000000+480</VALUE>
</PROPERTY>
<ROPERTY NAME="Duration" PROPAGATED="true" TYPE="datetime">
<VALUE>00000000000030.000000:000</VALUE>
</PROPERTY>
<ROPERTY NAME="MetricValue" PROPAGATED="true" TYPE="string">
<VALUE>18.98</VALUE>
</PROPERTY>
<ROPERTY NAME="BreakdownDimension" PROPAGATED="true" TYPE="string">
</PROPERTY>
<;PROPERTY NAME="BreakdownValue" PROPAGATED="true" TYPE="string">
</PROPERTY>
<;PROPERTY NAME="Volatile" PROPAGATED="true" TYPE="boolean">
<VALUE>TRUE</VALUE>
</PROPERTY>
</INSTANCE>
;
… .
};
|
异常
这类事件主要用来监控各类错误情况或者告警。目前支持下列情况:
表 9. 异常事件分类
异常类型 | CIM模型 |
保单到期 | IBMPSG_Warranty |
租约到期 | IBMPSG_Lease |
磁盘使用率超警戒值 | IBMPSG_StorageEvent |
网络断开 / 恢复 / 错误 | IBMPSG_NetworkAdapterOnlineEvent/ IBMPSG_NetworkAdapterOfflineEvent/ IBMPSG_NetworkAdapterFailedEvent |
存储控制器缓存的电池告警 / 失效 | IBMi_CacheBatteryEvent |
结束语
随着 CIM 技术研究和开发的不断深入,更多系统管理功能也将转移至 CIM 框架之内,包括更多的性能数据的采集,系统硬件软件问题的分析报告以及作业管理等等。