解读 IBM InfoSphere DataStage and QualityStage Operations Console 的指标

深入探讨 Operations Console 中提供的指标和统计信息

本文将探讨 IBM® InfoSphere® DataStage® and QualityStage® Operations Console 中提供的指标和统计信息,包括描述如何生成值(或从哪里读取它们),以及如何执行计算。在适当的情况下,本文会通过示例 SQL 查询来演示如何从操作数据库读取信息。

Arron Harden, 高级软件工程师, IBM

Arron HardenArron Harden 是一名 IBM InfoSphere DataStage and QualityStage 高级软件工程师。尽管经过了多次并购,但他一直坚持研究 DataStage 产品,他研究 DataStage 已有超过 12 年的时间,并于 2005 年随着 IBM 对 Ascential Software Inc 的收购而加入 IBM。他在波斯顿工作了一年,目前住在英国,在 IBM Milton Keynes 办公室工作。在他最新的职位上,他是使用 Dojo 工具包编写的 DataStage and QualityStage Operations Console 的 Web 应用程序组件的领导开发人员。



Len Greenwood, DataStage 核心架构师, IBM

Len Greenwood在 IBM 2005 年从 Ascential Software 收购 DataStage 以前,Len Greenwood 曾是 1996 年开发出 DataStage 的第一个版本的小型开发团队的一名成员。DataStage 目前已成为 IBM InfoSphere Information Server 套件的主要支柱。Len Greenwood 过去 15 年一直在研究数据和元数据集成的相关领域,目前他是 DataStage and QualityStage 开发和生产工具的核心组件的主要产品架构师。他最近设计了支撑 Information Server Operations Console 的数据库模式,该模式用于在 DataStage 引擎级别监视活动。



Geoff McClean, 高级软件开发人员, IBM

Geoff McCleanGeoff McClean 自 DataStage 开发团队诞生以来就是该团队的一名成员,目前是 IBM InfoSphere Information Server 套件中的 IBM InfoSphere DataStage and QualityStage 开发和生产工具的核心组件的高级软件开发人员。他监督 IBM InfoSphere DataStage and QualityStage Operations Console 的数据库管理、事件处理和资源跟踪服务的实现。



Julian Vizor, 高级开发经理, IBM

Julian Vizor 的照片Julian Vizor 10 多年来在英国一直管理着核心 IBM InfoSphere DataStage 产品组件的开发。Julian 在 DataStage 团队诞生不久后就加入了该团队,开始的时候是作为一名开发人员,之后在产品的整个发展过程中负责管理开发活动。作为 Milton Keynes 实验室的高级经理,Julian 一直领导着开发团队,最近在负责 DataStage and QualityStage Operations Console 项目的交付,该项目是 InfoSphere Information Server 8.7 版本的一部分。



Eric Jacobson, 高级软件工程师, IBM

Eric Jacobson 的照片Eric Jacobson 是 IBM InfoSphere DataStage and Quality Stage 产品方面的 Parallel Engine 小组的一名高级软件工程师。他自 2003 年起一直是 Parallel Engine 的主要贡献者,并最终于 2005 年随着 IBM 对 Ascential Software 的收购而加入了 IBM。他对 Parallel Engine 框架的多个领域(包括查找、转换和导入)作出了重大贡献,他主要侧重于性能。目前,他正致力于 DataStage 和 Hadoop 的集成,最近已完成了该项工作的第一个阶段,通过新的 Big Data File Stage 实现了对 Hadoop Distributed File System 上的文件的读写操作。



2012 年 11 月 12 日

简介

IBM InfoSphere DataStage and QualityStage Operations Console 是一个 Web 应用程序,支持实时监控 InfoSphere Information Server 安装中的 DataStage 引擎组件。这提供了在该系统上运行的所有 DataStage 作业(包括现在的和历史的作业)的完整视图。它也提供了对 CPU 使用率、可用内存和磁盘空间等关键操作系统指标的监测。

下文将详细介绍 Operations Console 中显示的指标和属性,并提供有关数据收集位置的信息。它假定读者大体上熟悉 Operations Console 和 DataStage。此处提供的信息与 InfoSphere Information Server version 8.7 相关。

数据源

Operations Console 中显示的信息是从以下来源读取的。

  • 元数据存储库 (XMETA) :这是设计时元数据存储库,主要由 DataStage Designer 使用,用于存储表定义、作业设计等。
  • 用户注册表:根据系统的配置,该注册表可以是一个内部注册表,所有的用户信息都存储在元数据存储库中;该注册表也可以是一个外部注册表(如 LDAP),用户信息存储在外部目录系统中。
  • DSEngine:这是运行时引擎和存储库,在运行作业的时候,主要由 DataStage Director 和作业使用。当 DataStage Designer 对作业设计进行编译时,它也可以用于存储可执行版本的作业设计。
  • 操作数据库 (DSODB):这是存储有关作业运行信息的操作存储库。一旦启用,每此运行作业的时候,有关该运行的数据就会存储在这里。操作数据库使用了公开记录的开放式架构,并且,因为使用的是一个开放式架构,所以本文中演示了提取信息的相关 SQL 查询(如果适用)。请注意,为了清楚起见,只演示了 DB2 SQL 查询,没有进行分页或排序。

日期和时间

Operations Console 中显示的所有日期和时间都会被转换,以浏览器的时区进行显示。例如,如果引擎层系统时区为 UTC-0500,浏览器的时区是 UTC+0000,而事件于本地时间 2011 年 11 月 3 日下午 4 时在引擎上发生,那么该事件在浏览器中显示为于 2011 年 11 月 3 日晚上 9 点发生。同样,如果使用另一个浏览器,该浏览器的时区为 UTC+0500,那么同一个事件在该浏览器将会显示为于 2011 年 11 月 4 日凌晨 2 时发生。

Operations Console 的主页上会显示时区,包括引擎层系统和浏览器的 UTC 偏移量,在表 1 中显示示为 local

表 1. 时区
常规属性
引擎启动时间:2011 年 10 月 25 日,15:46:05(本地时区)。引擎的时区为 UTC+0000 (GMT),本地时区为 UTC+0000
操作系统:Linux:2.6.32.45-0.3-pae
CPU:2x Intel(R) Pentium(R)4 CPU 3.20GHz
内存:2.8GB 物理内存 - 2.01GB 虚拟内存

在操作数据库本身中,不管引擎系统所在的时区是哪个时区,所有时间戳都以 UTC 存储。

重要的是要注意,有些时间戳是使用引擎层系统上的时钟创建的,有些时间戳是使用服务层上的时钟系统创建的。如果这些不同的物理系统和时钟明显不同步,那么在检查和比较时间戳时就可能存在差异。


操作系统监测

Operations Console 显示了各种操作系统指标的信息,如 CPU 使用率和可用内存。本文稍后会解释与每个指标相关的属性,以及最终读取信息的位置。

请注意,在下面的 SQL 查询示例中,如果引擎已经配置了远程节点的信息(通过 DSODBConfig.cfg 中的 ResourceNode 属性),从操作数据库中读取的信息可以是引擎本身(也就是说,<remoteNodeName> = <engineName>),也可以是适用于某个特殊的远程节点的信息。

CPU – 总使用率图表

可以将 CPU 总使用率图表显示在主页上,也可以选择将它显示在作业运行细节窗口和活动页面上。例如,活动页面的 CPU 总使用率如图 1 所示。

图 1. CPU 总使用率图表
图表显示了 CPU 总使用率

使用 SQL 查询从操作数据库读取 CPU 总使用率的基本信息,如清单 1 所示。

清单 1. SQL 示例:CPU 总使用率
SELECT
    X.CPUPCTIDLEAVG, X.STARTTIMESTAMP, X.ENDTIMESTAMP
FROM
    DSODB.RESOURCEUSAGESYSTEM X,
    DSODB.HOST Y1,
    DSODB.HOST Y2
WHERE
    (X.HOSTID = Y1.HOSTID AND Y1.HOSTNAME = <remoteNodeName>) AND
    (X.HEAD_HOSTID = Y2.HOSTID AND Y2.HOSTNAME = <engineName>) AND
    (
        (X.STARTTIMESTAMP >= <startTimeStampUTC> AND
            X.STARTTIMESTAMP <= <endTimeStampUTC>) OR
        (X.ENDTIMESTAMP >= <startTimeStampUTC> AND
            X.ENDTIMESTAMP <= <endTimeStampUTC>) OR
        (X.STARTTIMESTAMP < <startTimeStampUTC> AND 
            X.ENDTIMESTAMP > <endTimeStampUTC>)
    )

通过计算 100% - CPU idle time,将之前的 SQL 查询返回的 CPU 空闲百分比转换为 CPU 使用率。此处,100% 表示在系统上的所有处理单元的总体可能使用率。例如,如果系统配备了 4 个 CPU,其中一个 CPU 在完全使用中,那么空闲时间将是 75%(因此,总使用率为 25%)。

操作数据库中由之前的查询所返回的信息是由 ResMonApp 和 ResTrackApp 服务写入的,这些服务使用下面的方法获取信息。

  • Linux:使用 /proc/stat 的 CPU 字段中的空闲条目计算 CPU 空闲百分比。从之前记录的值中减去这个空闲值,除以 CPU 字段中的所有其他条目的总和,再乘以 100,就可以得到 CPU 空闲百分比值。
  • AIX:使用由 perfstat_cpu() 系统调用返回的空闲条目总和来计算 CPU 空闲百分比。从之前记录的值中减去这个空闲值,除以 CPU 字段中的所有其他条目的总和,再乘以 100,就可以得到 CPU 空闲百分比值。
  • Solaris:使用 kstat_*() 系统调用返回的 kstat 控制结构中的 cpu_stat 模块中的所有空闲条目总和来计算 CPU 空闲百分比。从之前记录的值中减去这个空闲值,除以 CPU 字段中的所有其他条目的总和,再乘以 100,就可以得到 CPU 空闲百分比值。
  • Windows:使用 Windows PerformanceCounter 类返回的空闲值(计数器类为 Processor,计数器名称为 % Idle Time)来计算 CPU 空闲百分比。

CPU – 系统使用率图表

可以选择将 CPU 系统使用率图表显示在作业运行细节窗口中,如图 2 所示。

图 2. CPU 系统使用率图表
图表显示了 CPU 系统使用率

使用 SQL 查询从操作数据库读取系统或特权 CPU 使用率的基本信息,如清单 2 所示。

清单 2. SQL 示例:CPU 系统使用率
SELECT
    X.CPUPCTPRIVILEGEDAVG, X.STARTTIMESTAMP, X.ENDTIMESTAMP
FROM
    DSODB.RESOURCEUSAGESYSTEM X,
    DSODB.HOST Y1,
    DSODB.HOST Y2
WHERE
    (X.HOSTID = Y1.HOSTID AND Y1.HOSTNAME = <remoteNodeName>) AND
    (X.HEAD_HOSTID = Y2.HOSTID AND Y2.HOSTNAME = <engineName>) AND
    (
        (X.STARTTIMESTAMP >= <startTimeStampUTC> AND
            X.STARTTIMESTAMP <= <endTimeStampUTC>) OR
        (X.ENDTIMESTAMP >= <startTimeStampUTC> AND
            X.ENDTIMESTAMP <= <endTimeStampUTC>) OR
        (X.STARTTIMESTAMP < <startTimeStampUTC> AND 
            X.ENDTIMESTAMP > <endTimeStampUTC>)
    )

对于 CPU 系统使用率百分比,100% 表示在系统上的所有处理单元的总体可能性。例如,如果系统配备了 4 个 CPU,其中一个 CPU 被操作系统内核完全使用,那么系统使用率为 25%。

操作数据库中由上述查询返回的信息是由 ResMonApp 和 ResTrackApp 服务写入的,这些服务使用下面的方法获取信息。

  • Linux:使用 /proc/stat 中的 CPU 字段中的特权条目计算 CPU 特权百份比。 从之前记录的值中减去这个特权值,除以 CPU 字段中的所有其他条目的总和,再乘以 100,就可以得到 CPU 特权百分比值。
  • IX:使用 perfstat_cpu() 系统调用所返回的特权条目总和来计算 CPU 特权百份比。 从之前记录的值中减去这个特权值,除以 CPU 字段中的所有其他条目的总和,再乘以 100,就可以得到 CPU 特权百分比值。
  • Solaris:使用 kstat_*() 系统调用返回的 kstat 控制结构中的 cpu_stat 模块中的所有特权条目总和来计算 CPU 特权百分比。从之前记录的值中减去这个特权值,除以 CPU 字段中的所有其他条目的总和,再乘以 100,就可以得到 CPU 特权百分比值。
  • Windows:使用 Windows PerformanceCounter 类返回的值(计数器类为 Processor,计数器名称为 % Privileged Time)来计算 CPU 特权百分比。

内存 - 可用物理内存图表

可以将可用物理内存图表显示在主页上,也可以选择将它显示在作业运行细节窗口和活动页面上。例如,在活动页面上,物理内存是蓝色的虚线,如图 3 所示。

图 3. 可用物理内存图表
图表显示了可用的物理内存

使用 SQL 查询从操作数据库读取可用物理内存基本信息,如清单 3 所示。

清单 3. SQL 示例:可用物理内存
SELECT
    X.MEMFREEKBPHYSICALAVG, X.STARTTIMESTAMP, X.ENDTIMESTAMP
FROM
    DSODB.RESOURCEUSAGESYSTEM X,
    DSODB.HOST Y1,
    DSODB.HOST Y2
WHERE
    (X.HOSTID = Y1.HOSTID AND Y1.HOSTNAME = <remoteNodeName>) AND
    (X.HEAD_HOSTID = Y2.HOSTID AND Y2.HOSTNAME = <engineName>) AND
    (
        (X.STARTTIMESTAMP >= <startTimeStampUTC> AND
            X.STARTTIMESTAMP <= <endTimeStampUTC>) OR
        (X.ENDTIMESTAMP >= <startTimeStampUTC> AND
            X.ENDTIMESTAMP <= <endTimeStampUTC>) OR
        (X.STARTTIMESTAMP < <startTimeStampUTC> AND 
            X.ENDTIMESTAMP > <endTimeStampUTC>)
    )

操作数据库中由上述查询返回的信息是由 ResMonApp 和 ResTrackApp 服务写入的,这些服务使用下面的方法获取信息。

  • Linux:使用 PhysicalFree = MemFree + Cached 计算可用物理内存, 其中 MemFree 和 Cached 是来自 /proc/meminfo 的字段。这代表在无需将任何数据交换出磁盘的情况下可以提供的物理内存(缓存组件的内容将被丢弃)。
  • AIX:使用 PhysicalFree = (MemFree + Cached) * 4k 计算可用物理内存,其中 MemFree 是 perfstat_memory_total 调用返回的 real_free 值,而 Cached 是同一个调用返回的 numperm 值。这代表无需将任何数据交换出磁盘便可提供的物理内存(缓存组件的内容将被丢弃)。
  • Solaris:使用 kstat_*() 系统调用返回的 kstat 控制结构模块 vminfo 中的 freemem 条目的值来计算可用物理内存。
  • Windows:使用 PhysicalFree = (MemFree / 1024) 计算可用物理内存,其中 MemFree 是 Windows PerformanceCounter 类返回的值,计数器类为 Memory,计数器名称为 Available Bytes。

内存 - 可用虚拟内存图表

可以将可用虚拟内存图表显示在主页上,也可以选择将它显示在作业运行细节窗口和活动页面上。例如,在活动页面上,虚拟内存是绿色的实线,如图 4 所示。

图 4. 可用虚拟内存图表
图表显示了可用的虚拟内存

使用 SQL 查询从操作数据库读取可用虚拟内存基本信息,如清单 4 所示。

清单 4. SQL 示例:可用虚拟内存
SELECT
    X.MEMFREEKBVIRTUALAVG, X.STARTTIMESTAMP, X.ENDTIMESTAMP
FROM
    DSODB.RESOURCEUSAGESYSTEM X,
    DSODB.HOST Y1,
    DSODB.HOST Y2
WHERE
    (X.HOSTID = Y1.HOSTID AND Y1.HOSTNAME = <remoteNodeName>) AND
    (X.HEAD_HOSTID = Y2.HOSTID AND Y2.HOSTNAME = <engineName>) AND
    (
        (X.STARTTIMESTAMP >= <startTimeStampUTC> AND
            X.STARTTIMESTAMP <= <endTimeStampUTC>) OR
        (X.ENDTIMESTAMP >= <startTimeStampUTC> AND
            X.ENDTIMESTAMP <= <endTimeStampUTC>) OR
        (X.STARTTIMESTAMP < <startTimeStampUTC> AND 
            X.ENDTIMESTAMP > <endTimeStampUTC>)
    )

操作数据库中由上述查询返回的信息是由 ResMonApp 和 ResTrackApp 服务写入的,这些服务使用下面的方法获取信息。

  • Linux:从 /proc/meminfo 中的 SwapFree 字段读取可用虚拟内存。
  • AIX:使用 VirtualFree = PagesFree * 4k 计算可用虚拟内存,其中 PagesFree 是 perfstat_memory_total 调用返回的 pgsp_free 值。
  • Solaris:使用 kstat_*() 系统调用返回的 kstat 控制结构模块 vminfo 中的 swap_free 条目来计算可用虚拟内存。
  • Windows:使用 VirtualFree = ((CommitLimit - Committed) / 1024) 计算可用虚拟内存,其中 CommitLimit 是 Windows PerformanceCounter 类返回的值,其计算器类为 Memory,计数器名称为 Commit Limit。Committed 是 Windows PerformanceCounter 类返回的值,其计算器类为 Memory,计数器名称为 Committed Bytes。

进程 - 计数图表

也可以选择将进程计数图表显示在作业运行细节窗口和活动页面上。例如,该图表在活动页面上的显示如图 5 所示。

图 5. 可用虚拟内存图表
图表显示了进程计数

使用 SQL 查询从操作数据库读取进程数量(整个操作系统中的进程,而不仅仅是与 DataStage 相关的进程)的基本信息,如清单 5 所示。

清单 5. SQL 示例:进程计数
SELECT
    X.PROCNUMWAITINGAVG , X.PROCNUMSLEEPINGAVG , X.PROCNUMZOMBIEDAVG , 
    X.PROCNUMBLOCKEDAVG , X.PROCNUMRUNNINGAVG , X.STARTTIMESTAMP, 
    X.ENDTIMESTAMP 
FROM
    DSODB.RESOURCEUSAGESYSTEM X,
    DSODB.HOST Y1,
    DSODB.HOST Y2
WHERE
    (X.HOSTID = Y1.HOSTID AND Y1.HOSTNAME = <remoteNodeName>) AND
    (X.HEAD_HOSTID = Y2.HOSTID AND Y2.HOSTNAME = <engineName>) AND
    (
        (X.STARTTIMESTAMP >= <startTimeStampUTC> AND
            X.STARTTIMESTAMP <= <endTimeStampUTC>) OR
        (X.ENDTIMESTAMP >= <startTimeStampUTC> AND
            X.ENDTIMESTAMP <= <endTimeStampUTC>) OR
        (X.STARTTIMESTAMP < <startTimeStampUTC> AND 
            X.ENDTIMESTAMP > <endTimeStampUTC>)
    )

然后,汇总各字段计算总进程数。操作数据库中上述查询返回的信息是由 ResMonApp 和 ResTrackApp 服务写入的,这些服务使用下面的方法获取信息。

  • Linux:通过遍历 /proc 下的所有的进程 ID 目录来计算进程计数。在每个进程 ID 目录中,对 stat 文件进行处理,以确定进程状态。使用 ProcessCount = ProcRunning + ProcSleeping + ProcZombied + ProcBlocked 计算总进程计数,其中 ProcRunning 是状态为 “R” 的 stat 文件的总和,ProcSleeping 是状态为 “S” 或 “D” 的 stat 文件的总和,ProcZombied 是状态为 “Z” 的 stat 文件的总和,而 ProcBlocked 是状态为 “T” 或 “X” 的 stat 文件的总和。
  • AIX:通过遍历 /proc 下的所有的进程 ID 目录来计算进程计数。在每个进程 ID 目录中,对 psinfo 文件进行处理,以确定进程状态。使用 ProcessCount = ProcRunning + ProcSleeping + ProcZombied + ProcBlocked 计算总进程计数,其中 ProcRunning 是状态为 “R” 或 “O” 的 psinfo 文件的总和,ProcSleeping 是状态为 “S” 的 psinfo 文件的总和,ProcZombied 是状态为 “Z” 的 psinfo 文件的总和,而 ProcBlocked 是状态为 “T” 的 psinfo 文件的总和。
  • Solaris:需要使用 root 访问权限来读取 /proc,所以改为通过发出命令 /usr/bin/ps -eo s 并分析结果来计算进行计数。使用 ProcessCount = ProcRunning + ProcSleeping + ProcZombied + ProcBlocked 计算总进程计数,其中 ProcRunning 是状态为 “R” 或 “O” 的进程的总和,ProcSleeping 是状态为 “S” 的进程的总和,ProcZombied 是状态为 “Z” 的进程的总和,而 ProcBlocked 是状态为 “T” 的进程的总和。
  • Windows:使用 Windows PerformanceCounter 类返回的值计算进程计数,其计数器类为 System,计数器名称为 Processes。

文件系统 - 可用空间图表

可以选择将文件系统可用空间图表显示在作业运行细节窗口和活动页面上。例如,该图表在活动页面的显示如图 6 所示。

图 6. 可用磁盘空间
图表显示了可用的磁盘空间

仅在已创建的 DSODBConfig.cfg 文件具有相关的 ResourceLocalFS 和 ResourceRemoveFS 属性时,才会记录可用磁盘空间信息。使用 SQL 查询从操作数据库读取可用磁盘空间的基本信息,如清单 6 所示。

清单 6. SQL 示例:可用磁盘空间计数
SELECT
    X.DISKPATHMONITORED, X.DISKTOTALKB, X.DISKFREEKBAVG, X.STARTTIMESTAMP, X.ENDTIMESTAMP
FROM
    DSODB.RESOURCEUSAGEDISKS X,
    DSODB.HOST Y1,
    DSODB.HOST Y2
WHERE
    (X.HOSTID = Y1.HOSTID AND Y1.HOSTNAME = <remoteNodeName>) AND
    (X.HEAD_HOSTID = Y2.HOSTID AND Y2.HOSTNAME = <engineName>) AND
    (
        (X.STARTTIMESTAMP >= <startTimeStampUTC> AND
            X.STARTTIMESTAMP <= <endTimeStampUTC>) OR
        (X.ENDTIMESTAMP >= <startTimeStampUTC> AND
            X.ENDTIMESTAMP <= <endTimeStampUTC>) OR
        (X.STARTTIMESTAMP < <startTimeStampUTC> AND 
            X.ENDTIMESTAMP > <endTimeStampUTC>)
    )

操作数据库中由上述查询所返回的信息是由 ResMonApp 和 ResTrackApp 服务写入的,这些服务使用下面的方法获取信息。

  • Linux、AIX 和 Solaris:使用由 statvfs64() 系统调用返回的的磁盘块大小和可用块计数来获得可用磁盘空间信息。具体而言,块大小信息是从 f_frsize 元素读取的,而可用块计数是从 f_bavail 元素读取的。
  • Windows:使用 GetDiskFreeSpace() 系统调用返回的的磁盘块大小和可用块计数来获得可用磁盘空间信息。具体而言,块大小信息是从 lpBytesPerSector 返回参数读取的,而可用块计数是通过 lpNumberOfFreeClusters 返回参数乘以 lpSectorsPerCluster 返回参数而得到的。

常规属性

在主页上的常规属性显示了有关当前选定的引擎系统的最新记录信息,如表 2 所示。

表 2. 时区
常规属性
引擎启动时间:2011 年 10 月 24 日,15:46:05(本地时区)。引擎的时区为 UTC+0100 (BST),本地时区为 UTC+0100
操作系统:Linux:2.6.32.45-0.3-pae
CPU:2x Intel(R) Pentium(R)4 CPU 3.20GHz
内存:2.8GB 物理内存 - 2.01GB 虚拟内存

通过 ASBAgent 调用引擎系统,并在 DSEngine 本身中使用 UniVerse Basic 系统调用,可以读取引擎启动时间,例如:

engineStartTime = SYSTEM(12001)

通过在本地 Web 浏览器上运行下面的 JavaScript,可以读取本地 UTC 偏移量,例如:

offset = new Date().getTimezoneOffset();

使用下面的 SQL 查询从操作数据库中读取该信息的其余部分。需要使用子查询,因为操作数据库记录了所有历史引擎系统信息,而这里只需要最新的信息,因此,会使用 MAX(LASTCHECKEDTIMESTAMP),如清单 7 所示。

清单 7. SQL 示例:引擎属性
SELECT
    HD.CREATEDTIMESTAMP, HD.LASTCHECKEDTIMESTAMP, HD.CPUMODEL, HD.NUMCPUS,
    HD.PHYSICALMEMORYKB, HD.PLATFORMNAME, HD.PLATFORMVERSION, 
    HD.UTCOFFSETMINS, HD.VIRTUALMEMORYKB, HD.TIMEZONENAME 
FROM 
    DSODB.HOSTDETAIL HD, 
    DSODB.HOST H1, 
    DSODB.HOST H2, 
    (
        SELECT 
            MAX(LASTCHECKEDTIMESTAMP) AS MAXTIMESTAMP  
        FROM 
            DSODB.HOSTDETAIL HD, DSODB.HOST H1, DSODB.HOST H2
        WHERE 
            HD.HOSTID = H1.HOSTID AND 
            H1.HOSTNAME = <engineName> AND
            HD.HEAD_HOSTID = H2.HOSTID AND 
            H2.HOSTNAME = <engineName>
    ) M 
WHERE 
    HD.LASTCHECKEDTIMESTAMP = M.MAXTIMESTAMP AND 
    HD.HOSTID = H1.HOSTID AND 
    H1.HOSTNAME = <engineName> AND 
    HD.HEAD_HOSTID = H2.HOSTID AND 
    H2.HOSTNAME = <engineName>

操作数据库中由上述查询返回的信息是由 ResMonApp 和 ResTrackApp 服务写入的,这些服务使用下面的方法获取信息。

Linux

  • CPUMODEL 和 NUMCPUS 最终来自 /proc/cpuinfo 中的模块名称属性。
  • PHYSICALMEMORYKB 是从 /proc/meminfo 中的 MemTotal 字段读取的。
  • VIRTUALMEMORYKB 是从 /proc/meminfo 中的 SwapTotal 字段读取的。
  • PLATFORMNAME 和 PLATFORMVERSION 是从 /proc/version 读取的。
  • TIMEZONENAME 和 UTCOFFSETMINS 是分别从由 localtime() 系统调用所返回的 tm_zone 和 tm_gmtoff 读取的。

AIX

  • CPUMODEL 和 NUMCPUS 最终来自 perfstat_cpu_total () 系统调用返回的处理器信息。
  • PHYSICALMEMORYKB 是通过 perfstat_memory_total() 系统调用返回的 real_total 值乘以页面大小 4 来计算的。
  • VIRTUALMEMORYKB 是通过 perfstat_memory_total() 系统调用返回的 pgsp_total 值乘以页面大小 4 来计算的。
  • PLATFORMNAME 和 PLATFORMVERSION 是使用 uname() 系统调用返回的 sysname 和 version 值分别读取的。
  • TIMEZONENAME 是从 "TZ" 环境变量读取的。
  • UTCOFFSETMINS 是使用 gettimeofday() 系统调用返回的 tz_minuteswest 值进行计算的。

Solaris

  • CPUMODEL 是通过分析 /usr/sbin/psrinfo -v 命令返回的信息来读取的。
  • NUMCPUS 是从 sysconf(_SC_NPROCESSORS_CONF) 系统调用返回的 cpu_count 值读取的。
  • PHYSICALMEMORYKB 是通过 /usr/sbin/prtconf 命令返回的 Memory 值乘以 1024 来计算的。
  • VIRTUALMEMORYKB 是通过 swapctl() 系统调用返回的 ani_max 值乘以系统页面大小来计算的。
  • PLATFORMNAME 和 PLATFORMVERSION 是使用 sysinfo(SI_SYSNAME,...) 和 sysinfo(SI_RELEASE,...) 系统调用返回的值来读取的。
  • TIMEZONENAME 是从 "TZ" 环境变量读取的。
  • UTCOFFSETMINS 是通过计算 localtime() 和 gmtime() 系统调用返回的时间差异来获得的。

Windows

  • CPUMODEL 是从 HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\CentralProcessor\\0\ \ProcessorNameString 注册表项读取的。
  • NUMCPUS 是从 GetSystemInfo() 系统调用返回的 dwNumberOfProcessors 元素的值读取的。
  • PHYSICALMEMORYKB 是通过将 GlobalMemoryStatusEx() 系统调用返回的 ullTotalPhys 值除以 1024 来计算的。
  • VIRTUALMEMORYKB 是通过将计数器类为 Memory 和计数器名称为 Commit Limit 的 Windows PerformanceCounter 类返回的值除以 1024 来计算的。
  • PLATFORMNAME 始终被设置为 Windows
  • PLATFORMVERSION 是通过查看 GetVersionEx() 系统调用返回的 dwMajorVersion、dwMinorVersion 和 wProductType 值来计算的。
  • TIMEZONENAME 是从 _get_tzname() 系统调用返回的值读取的。
  • UTCOFFSETMINS 是通过 _get_timezone() 系统调用所返回的值加上 _get_dstbias() 系统调用返回的值来计算的。

DataStage 引擎监控

Operations Console 显示了有关 DataStage 引擎的各种指标(比如,作业运行计数和服务状态)的信息。与每个这些指标相关联的属性以及从哪里读取这些信息的解释如下。

作业运行图表

作业运行图表可以显示在主页上,也可以选择将它显示在活动页面上。例如,该图在主页上的显示如图 7 的所示。

图 7. 作业运行图表
图表显示了作业运行

它显示当前选定引擎系统在给定时段内的作业运行数量。该作业运行被定义为满足下列标准之一的任何作业运行。

  • 在该时段内开始
  • 在该时段内结束
  • 在整个时段内运行

使用 SQL 查询从操作数据库中读取基本信息(为了保持 SQL 查询的简单性,此处没有提供项目筛选),如清单 8 所示。

清单 8. SQL 示例:作业运行活动
SELECT 
    X.RUNMAJORSTATUS, X.RUNENDTIMESTAMP, X.RUNSTARTTIMESTAMP 
FROM 
    DSODB.JOBRUN X, DSODB.JOBEXEC Y, DSODB.HOST Z 
WHERE 
    X.JOBID = Y.JOBID AND 
    Y.HOSTID = Z.HOSTID AND 
    Z.HOSTNAME = <engineName> AND 
    (
        (X.CREATIONTIMESTAMP >= <startTimeStampUTC> AND 
            X.CREATIONTIMESTAMP <= <endTimeStampUTC>) OR 
        (X.RUNENDTIMESTAMP >= <startTimeStampUTC> AND 
            X.RUNENDTIMESTAMP <= <endTimeStampUTC>) OR 
        (X.RUNENDTIMESTAMP IS NULL AND 
            X.CREATIONTIMESTAMP <= <endTimeStampUTC>)
    )

然后,按日期将该信息汇总为可以绘制到图表上的数据。

已完成的作业运行图表

已完成的作业运行图表显示在主页上,并显示了当前选定引擎系统在给定时段内的状态为已完成的作业运行数量,如图 8 所示。

图 8. 已完成的作业运行图表
图表显示了已完成的作业运行

出于可视化的目的,已完成状态被定义为其主状态设置为 FIN (finished) 的任何作业运行。

使用 SQL 查询从操作数据库中读取基本信息(为了保持 SQL 查询的简单性,此处没有提供项目筛选),如清单 9 所示。

清单 9. SQL 示例:已完成的作业运行
SELECT
    X.RUNMAJORSTATUS, X.RUNMINORSTATUS 
FROM 
    DSODB.JOBRUN X, 
    DSODB.JOBEXEC Y, 
    DSODB.HOST Z
WHERE 
    X.JOBID = Y.JOBID AND 
    Y.HOSTID = Z.HOSTID AND 
    Z.HOSTNAME = <engineName> AND 
    X.RUNMAJORSTATUS IN ('FIN') AND 	
    (
        (X.CREATIONTIMESTAMP >= <startTimeStampUTC> AND 
            X.CREATIONTIMESTAMP <= <endTimeStampUTC>) OR 
        (X.RUNENDTIMESTAMP >= <startTimeStampUTC> AND 
            X.RUNENDTIMESTAMP <= <endTimeStampUTC>) OR 
        (X.RUNENDTIMESTAMP IS NULL AND 
            X.CREATIONTIMESTAMP <= <endTimeStampUTC>)
    )

然后,按运行次状态汇总该信息,将作业运行计数分组为在 Operations Console 中显示的以下类别。

  • 失败 – 运行次状态是以下之一:FWF(已完成,带有致命错误)、CRA(崩溃)、STP(用户已停止允许)和 SYN(因为运行作业的进程意外消失而标记为已完成)。
  • 已完成,带有警告 – 运行次状态是 FWW(已完成,带有警告)。
  • 已完成 – 运行次状态是 FOK(已完成,正常)。
  • 任何其他运行次要状态均被忽略。

用户可以单击这些类别中的每个类别,以显示与之匹配的作业运行列表,使用清单 10、清单 11 和清单 12 中所示的 SQL 查询。

清单 10. SQL 示例:已完成的作业运行 - 失败
SELECT 
    X.TOTALPHYSICALNODES, X.TOTALLOGICALNODES, X.RUNID, X.JOBID, X.CONDUCTORPID, 
        X.CONFIGFILENAME, X.CUSTOMBATCHID, X.CUSTOMCONTACT, X.CUSTOMFIELD1, 
        X.CUSTOMFIELD2, X.CUSTOMJOBTYPE, X.CUSTOMSEQUENCE, X.DSUSERNAME, 
        X.ELAPSEDRUNSECS, X.ISUSERNAME, X.LASTUPDATETIMESTAMP, X.RUNMAJORSTATUS, 
        X.MASTERPID, X.RUNMINORSTATUS, X.NUMMESSAGESFATAL, X.NUMMESSAGESTOTAL, 
        X.NUMMESSAGESWARNING, X.RUNENDTIMESTAMP, X.RUNSTARTTIMESTAMP, X.RUNTYPE, 
        X.TOTALROWSCONSUMED, X.TOTALROWSPRODUCED, X.USERSTATUS, X.INVOCATIONID, 
        X.CREATIONTIMESTAMP, X.CONTROLLING_RUNID, X.TOTALCPU, 
    Y.PROJECTNAME, Y.JOBNAME, Y.COMPILATIONTIMESTAMP, Y.JOBTYPE, Y.FOLDERPATH, 
        Y.WEBSERVICESENABLED 
FROM 
    DSODB.JOBRUN X, 
    DSODB.JOBEXEC Y, 
    DSODB.HOST Z  
WHERE 
    X.JOBID = Y.JOBID AND 
    Y.HOSTID = Z.HOSTID AND 
    Z.HOSTNAME = <engineName> AND 
    X.RUNMAJORSTATUS IN ('FIN') AND 
    X.RUNMINORSTATUS IN ('FWF','STP','CRA','SYN') AND 
    (
        (X.CREATIONTIMESTAMP >= <startTimeStampUTC> AND 
            X.CREATIONTIMESTAMP <= <endTimeStampUTC>) OR
        (X.RUNENDTIMESTAMP >= <startTimeStampUTC> AND 
            X.RUNENDTIMESTAMP <= <endTimeStampUTC>) OR 
        (X.RUNENDTIMESTAMP IS NULL AND 
            X.CREATIONTIMESTAMP <= <endTimeStampUTC>) OR
        (X.CREATIONTIMESTAMP < <startTimeStampUTC> AND 
            X.RUNENDTIMESTAMP > <endTimeStampUTC>)
    )
清单 11. SQL 示例:已完成的作业运行 - 带有警告
SELECT 
    X.TOTALPHYSICALNODES, X.TOTALLOGICALNODES, X.RUNID, X.JOBID, X.CONDUCTORPID, 
        X.CONFIGFILENAME, X.CUSTOMBATCHID, X.CUSTOMCONTACT, X.CUSTOMFIELD1, 
        X.CUSTOMFIELD2, X.CUSTOMJOBTYPE, X.CUSTOMSEQUENCE, X.DSUSERNAME, 
        X.ELAPSEDRUNSECS, X.ISUSERNAME, X.LASTUPDATETIMESTAMP, X.RUNMAJORSTATUS, 
        X.MASTERPID, X.RUNMINORSTATUS, X.NUMMESSAGESFATAL, X.NUMMESSAGESTOTAL, 
        X.NUMMESSAGESWARNING, X.RUNENDTIMESTAMP, X.RUNSTARTTIMESTAMP, X.RUNTYPE, 
        X.TOTALROWSCONSUMED, X.TOTALROWSPRODUCED, X.USERSTATUS, X.INVOCATIONID, 
        X.CREATIONTIMESTAMP, X.CONTROLLING_RUNID, X.TOTALCPU, 
    Y.PROJECTNAME, Y.JOBNAME, Y.COMPILATIONTIMESTAMP, Y.JOBTYPE, Y.FOLDERPATH, 
        Y.WEBSERVICESENABLED 
FROM 
    DSODB.JOBRUN X, 
    DSODB.JOBEXEC Y, 
    DSODB.HOST Z  
WHERE 
    X.JOBID = Y.JOBID AND 
    Y.HOSTID = Z.HOSTID AND 
    Z.HOSTNAME = <engineName> AND 
    X.RUNMAJORSTATUS IN ('FIN') AND 
    X.RUNMINORSTATUS IN ('FWW') AND 
    (
        (X.CREATIONTIMESTAMP >= <startTimeStampUTC> AND 
            X.CREATIONTIMESTAMP <= <endTimeStampUTC>) OR
        (X.RUNENDTIMESTAMP >= <startTimeStampUTC> AND 
            X.RUNENDTIMESTAMP <= <endTimeStampUTC>) OR 
        (X.RUNENDTIMESTAMP IS NULL AND 
            X.CREATIONTIMESTAMP <= <endTimeStampUTC>) OR
        (X.CREATIONTIMESTAMP < <startTimeStampUTC> AND 
            X.RUNENDTIMESTAMP > <endTimeStampUTC>)
    )
清单 12. SQL 示例:已完成的作业运行 - 正常
SELECT 
    X.TOTALPHYSICALNODES, X.TOTALLOGICALNODES, X.RUNID, X.JOBID, X.CONDUCTORPID, 
        X.CONFIGFILENAME, X.CUSTOMBATCHID, X.CUSTOMCONTACT, X.CUSTOMFIELD1, 
        X.CUSTOMFIELD2, X.CUSTOMJOBTYPE, X.CUSTOMSEQUENCE, X.DSUSERNAME, 
        X.ELAPSEDRUNSECS, X.ISUSERNAME, X.LASTUPDATETIMESTAMP, X.RUNMAJORSTATUS, 
        X.MASTERPID, X.RUNMINORSTATUS, X.NUMMESSAGESFATAL, X.NUMMESSAGESTOTAL, 
        X.NUMMESSAGESWARNING, X.RUNENDTIMESTAMP, X.RUNSTARTTIMESTAMP, X.RUNTYPE, 
        X.TOTALROWSCONSUMED, X.TOTALROWSPRODUCED, X.USERSTATUS, X.INVOCATIONID, 
        X.CREATIONTIMESTAMP, X.CONTROLLING_RUNID, X.TOTALCPU, 
    Y.PROJECTNAME, Y.JOBNAME, Y.COMPILATIONTIMESTAMP, Y.JOBTYPE, Y.FOLDERPATH, 
        Y.WEBSERVICESENABLED 
FROM 
    DSODB.JOBRUN X, 
    DSODB.JOBEXEC Y, 
    DSODB.HOST Z  
WHERE 
    X.JOBID = Y.JOBID AND 
    Y.HOSTID = Z.HOSTID AND 
    Z.HOSTNAME = <engineName> AND 
    X.RUNMAJORSTATUS IN ('FIN') AND 
    X.RUNMINORSTATUS IN ('FOK') AND 
    (
        (X.CREATIONTIMESTAMP >= <startTimeStampUTC> AND 
            X.CREATIONTIMESTAMP <= <endTimeStampUTC>) OR
        (X.RUNENDTIMESTAMP >= <startTimeStampUTC> AND 
            X.RUNENDTIMESTAMP <= <endTimeStampUTC>) OR 
        (X.RUNENDTIMESTAMP IS NULL AND 
            X.CREATIONTIMESTAMP <= <endTimeStampUTC>) OR
        (X.CREATIONTIMESTAMP < <startTimeStampUTC> AND 
            X.RUNENDTIMESTAMP > <endTimeStampUTC>)
    )

服务状态

服务状态显示在主页上,并显示了检查结果,以确保每一个列出的服务都正在运行。如图 9 所示,在适用情况下,还可以检查服务对于当前选定的引擎系统的运作是否与预期一致。

图 9. 服务状态
图表显示了服务状态

对每项服务执行下面的一项或多项检查。

  • AppWatcher
    • InformationServer/Server/DSODB/DSODBConfig.cfg 中的 DSODBON 必须设置为 1。否则,会将服务标记为 Disabled
    • 必须有一个名称为 DSAppWatcherStart.sh 的进程在运行相应实例的引擎上运行(可用一个命令行参数进行识别)。如果不存在该进程,那么服务会显示为 Not Running
  • ASB Agent
    • 如果从 WebSphere 可以对在引擎系统上运行的 ASBAgent 成功发起一个远程过程调用,那么会将该服务标记为运行 OK
    • 如果远程过程调用失败,因为 ASBAgent 没有侦听所配置的套接字(默认为 31531,在 InformationServer/ASBNode/conf/agent.properties 中配置),或者它没有得到正确的配置,那么会将该服务标记为 Not Responding,并将其他所有服务都标记为 Engine unreachable(因为 ASBAgent 是 WebSphere 和引擎系统之间的网关)。
  • DataStage RPC daemon (dsrpcd)
    • 必须有一个名称为 dsrpcd 的进程在引擎上运行。如果不存在该进程,那么服务会显示为 Not Running
    • 必须提供一个有效的引擎凭据(通过 InfoSphere Information Server 管理 Web 控制台进行配置)。否则,服务会显示为 No DataStage credentials mapped
    • 通过 ds4j 建立一个 dsrpcd 服务连接。如果该连接成功,则将服务标记为 OK。如果该连接失败,则将服务标记为 Invalid username or passwordNot responding,视情况而定。
  • Engine Monitoring Application (engmonapp)
    • InformationServer/Server/DSODB/DSODBConfig.cfg 中的 DSODBON 必须设置为 1。否则,会将服务标记为 Disabled
    • 必须有一个名称为 java 的进程在运行相应 engmonapp JAR 的引擎上运行(由 java 命令行参数 -DPSMARKER 进行识别)。如果不存在该进程,那么服务会显示为 Not Running
  • Job Monitoring Application (jobmonapp)
    • 必须有一个名称为 JobMonApp 的进程在引擎上运行。如果不存在该进程,那么服务会显示为 Not Running
    • 建立一个连接,连接到 jobmonapp 被配置侦听的套接字(默认为 13400 和 13401,在 InformationServer/Server/PXEngine/etc/jobmon_ports 中配置)。如果该连接失败,则将服务标记为 Not responding
  • Logging Agent
    • 对于 Windows:必须有一个名称为 LoggingAgent 的进程在引擎上运行。如果不存在该进程,那么服务会显示为 Not Running
    • 对于 UNIX:读取名称为 InformationServer/ASBNode/bin/LoggingAgent.pid 的文件,找到日志代理进程的 PI。如果该操作失败或 PID 所对应的进程不存在,则返回 Not Running
    • 建立一个连接,连接到日志代理被配置侦听的套接字(默认为 31533)。如果该连接失败,则将服务标记为 Not responding
  • ODB Query Application (odbqueryapp)
    • InformationServer/Server/DSODB/DSODBConfig.cfg 中的 DSODBON 必须设置为 1。否则,将服务标记为 Disabled
    • 必须有一个名称为 java 的进程在运行相应 odbqueryapp JAR 的引擎上运行(由 java 命令行参数 -DPSMARKER 进行识别)。如果不存在该进程,那么服务会显示为 Not Running
    • 建立一个连接,连接到 odbqueryapp 被配置侦听的套接字(默认为 13451,通过 InformationServer/Server/DSODB/DSODBConfig.cfg 中的 ODBQAPPPORTNUM 属性进行配置)。如果该连接失败,则将服务标记为 Not responding
  • Resource Monitoring Application (resmonapp)
    • InformationServer/Server/DSODB/DSODBConfig.cfg 中的 DSODBON 必须设置为 1。否则,将服务标记为 Disabled
    • 必须有一个名称为 java 的进程在运行相应 resmonapp JAR 的引擎上运行(由 java 命令行参数 -DPSMARKER 进行识别)。如果不存在该进程,那么服务会显示为 Not Running

对象属性

Operations Console 显示了有关项目、文件夹、作业设计和作业运行的信息。与每个这些对象关联的属性集以及从哪里读取这些信息的解释如下。

项目

项目属性显示在项目页面上,示例如图 10 所示。

图 10. 项目属性
项目属性

所显示的属性如下。

  • Name(从元数据存储库读取)显示了在创建项目时设置的项目名称。
  • Created(从元数据存储库读取):
    • 无论由哪个用户创建项目,为项目所显示的用户名始终是 DataStage System User。
    • 所显示的时间戳是在创建项目时由服务层上的时钟系统设置的时间戳。
  • Protected(从 DSEngine 读取)通过 DataStage Administrator 客户端显示项目是否得到保护。
  • Path(从 DSEngine 读取)显示了项目路径,它一般是项目的 DSEngine 文件的存储位置。
  • Number of folders(从元数据存储库读取)显示了整个项目中的文件夹(包括嵌套的文件夹)数量,不论文件夹是否为空,都会计算在内。
  • Number of jobs(从元数据存储库读取)显示了整个项目中的作业数量。
  • Environment variables(从 DSEngine 读取)。 这里显示的信息与 DataStage Administrator 客户端中看到的相同,如当前名称、提示和默认值,这些信息是从项目路径中的 DSParams 文件中读取的。

文件夹(全部从元数据存储库读取)

文件夹属性显示在项目页面中,示例如图 11 所示。

图 11. 文件夹属性
文件夹属性

所显示的属性如下。

  • Name 显示了文件夹的当前名称。
  • Created
    • 无论实际上由什么用户创建项目,在创建项目时,为已创建的文件夹(如 \Jobs、\Routines,等等)显示的用户名始终是 DataStage System User。对于其他文件夹,所显示的用户名由从用户注册表读取的名字和姓氏字段信息串联而成。
    • 在允许的情况下,单击用户名可以显示更多信息,如电话号码和电子邮件地址。
    • 所显示的时间戳是创建文件夹时服务层上的时钟系统所设置的时间戳。
  • Number of sub-folders 显示了选定文件夹下的子文件夹总数(包括嵌套文件夹),不论文件夹是否为空,都会计算在内。
  • Number of jobs 显示了选定文件夹中的作业数量(不包括嵌套子文件夹中的作业)。

作业设计(除非另有说明,否则全部从元数据存储库中读取)

作业设计属性显示在项目页面中,示例如图 12 所示。

图 12. 作业设计属性
作业设计属性

所显示的属性如下。

  • Name 显示了作业设计的当前名称。
  • Short description 显示了作业设计的当前简述。
  • Createdlast modified
    • 所显示的用户名由从用户注册表读取的名字和姓氏字段信息串联而成。
    • 在允许的情况下,单击用户名可以显示更多信息,如电话号码和电子邮件地址。
    • 所显示的时间戳是在创建作业设计时服务层上的时钟系统所设置的时间戳。
  • Last compiled(从 DSEngine 读取)显示了创建作业可执行文件时的时间戳,并指示了作业设计进行最后一次编译(如果有的话)的时间。该时间戳由引擎层系统上的时钟设置。
  • Job type 可能是 Server、Parallel 或 Sequence 之一。Operations Console 中没有显示大型机作业设计。
  • Multi-instance 显示了作业设计是否已通过 DataStage Designer 中的作业属性窗口启用了多个实例。
  • Information services enabled 显示了作业设计是否已通过 DataStage Designer 中的作业属性窗口启用了信息服务(之前称为 WISD)。
  • Used by job(s)
    • 列出了直接使用该作业设计的其他作业设计(一般是作业序列)的数量。
    • 如果不为零,单击数字可以显示作业设计的完整列表。这相当于 DataStage Designer 中的 Where Used 操作。
  • Depends on job(s)
    • 列出了该作业设计直接使用的其他作业设计的数量。
    • 如果不为零,单击数字可以显示作业设计的完整列表。这相当于 DataStage Designer 中的 Depends On 操作。

作业运行(从操作数据库中读取)

作业运行属性可以显示在应用程序的多个位置上,例如,作业运行细节对话框中,如图 13 所示。

图 13. 作业运行属性
作业运行属性

所显示的属性如下。

  • Name 是从 JOBEXEC.JOBNAME 列读取的,显示了作业运行发生时的作业名称。
  • Project 是从 JOBEXEC.PROJECTNAME 列读取的,显示了作业运行发生时包含该作业的项目的名称。
  • Executable compiled on 是从 JOBEXEC.COMPILATIONTIMESTAMP 列读取的,显示了创建用于作业运行的作业可执行文件时的时间戳,说明作业设计何时被编译。由引擎层系统上的时间设置。
  • Job type 是从 JOBEXEC.JOBTYPE 列读取的,并且可能是 Server (=SRV)、Parallel (=PAR) 或 Sequence (=SEQ) 之一。Operations Console 中没有显示大型机作业设计。
  • Run type 是从 JOBRUN.RUNTYPE 列读取的,并且可能是 Run (=RUN)、Validate (=VAL) 或 Reset (=RES) 之一,与 DataStage Director 或 dsjob 等中执行的操作对应。在用于 Operations Console 时,作业重置和验证都被计数为作业运行。
  • Started by job run 是从 JOBRUN.CONTROLLING_RUNID 列获取的,该列被用作另一个 SQL 查询的参数,用于读取控制作业运行的信息(如果有的话)。
  • Started job runs 是从 JOBRUN.RUNID 列获取的,该列被用作另一个 SQL 查询的参数,用于读取受控作业运行的信息(如果有的话)。
  • Configuration file 是从 JOBRUN.CONFIGFILENAME 列读取的,显示了在作业运行发生时使用的配置文件。在允许的情况下,单击配置文件可以显示配置文件在作业运行发生时的内容(忽略任何后续变更)。
  • Conductor PID 是从 JOBRUN.CONDUCTORPID 列读取的,显示了运行作业时的执行者进程 PID(进程标识符)。这只适用于并行作业。
  • Master PID 是从 JOBRUN.MASTERPID 列读取的,显示了主作业运行进程的 PID(进程标识符),它是作业运行的进程树的根。
  • Started:
    • InfoSphere Information Server user ID 是从 JOBRUN.ISUSERNAME 列读取的,Operating System user ID 是从 JOBRUN.DSUSERNAME 列读取的。如果以计划作业的形式来运行作业,或使用本地选项从 dsjob 运行作业,那么 InfoSphere Information Server user ID 为空。
    • 所显示的用户名由从用户注册表读取的名字和姓氏字段信息串联而成。
    • 在允许的情况下,单击用户名可以显示更多信息,如电话号码和电子邮件地址。
    • 时间戳是从 JOBRUN.RUNSTARTTIMESTAMP 读取的,显示启动作业运行时由引擎层系统上的时钟设置的时间戳。
  • Invocation ID 是从 JOBRUN.INVOCATIONID 列读取的,显示了运行作业时的任何调用 ID。请注意,如果没有设置调用 ID,那么操作数据库中存储的数据就会被设置为 "-",Operations Console 将它映射为 "",这意味着没有设置。
  • Status 是从 JOBRUN.RUNMINORSTATUS 列获取的,根据以下运行次要状态值显示作业运行状态:
    • QUE – 状态是排队
    • STR – 状态是开始
    • RUN、RNW 或 RNF – 状态是运行
    • RNS – 状态是停止
    • STP – 状态是已停止。可能也会显示错误图标和关联的运行结束日期。
    • FOK – 状态是已完成。可能也会显示成功图标和关联的运行结束日期。
    • FWW – 状态是已完成。可能也会显示告警图标和关联的运行结束日期。
    • FWF、CRA 或 SYN – 失败。可能也会显示错误图标和关联的运行结束日期。
    • 任何其他运行次要状态 - 未知。可能也会显示告警图标。
    • 在适用的情况下,任何关联的结束时间戳都是从 JOBRUN.RUNENDTIMESTAMP 读取的,显示了在完成作业运行时由引擎层系统上的时钟设置的时间戳。
  • Elapsed 显示了作业运行结束时的时间戳 (JOBRUN.RUNENDTIMESTAMP) 和作业运行开始时的时间戳 (JOBRUN.RUNSTARTTIMESTAMP) 之间的差异,如果作业运行尚未完成,则根据引擎层系统上的时钟,显示作业运行开始时间戳 (JOBRUN.RUNENDTIMESTAMP) 和当前时间之间的差异。该属性的格式是 HH:MM:SS。请注意,这里没有使用 JOBRUN.ELAPSEDRUNSECS 列,因为它只会在作业运行过程中定期更新。
  • CPU time 是从 JOBRUN.TOTALCPU 列读取的,显示了作业运行到目前为止所使用的处理时间。这是作业运行在所有处理单元上所使用的时间总量。例如,在配有 4 个超线程 CPU 的系统上,有 8 个可用处理单元,如果作业运行历时 1 小时,在这 1 小时内完全消耗了所有 8 个处理单元,那么 CPU 时间为 8 小时。该属性的格式是 HH:MM:SS。
  • Rows in 是从 JOBRUN.TOTALROWSCONSUMED 列读取的,显示了作业运行的所有源阶段到目前为止从外部读取的总行数。具体来说,这是基于从源阶段读取的所有链接的行的汇总(包括行发生器阶段和查找)。对于并行作业,这些链接来自只有一个连接到阶段外部的链接的阶段。对于服务器作业,这些链接是将被动阶段连接到主动阶段的链接。
  • Rows in per second 是通过将 Rows in 值除以先前计算的耗时来获得的。
  • Rows out 是从 JOBRUN.TOTALROWSPRODUCED 列读取的,显示了作业运行中所有目标阶段到目前为止写到外部的总行数。具体来说,这是基于写到目标阶段的所有链接的行的汇总(包括查看阶段)。对于并行作业,这些链接来自只有一个连接到阶段内部的链接的阶段。对于服务器作业,这些链接是将主动阶段连接到被动阶段的链接。
  • Rows out per second 是通过将 Rows out 值除以先前计算的耗时来获得的。
  • Messages 是从 JOBRUN.NUMMESSAGESTOTAL 列读取的,显示了作业运行到目前为止产生的日志消息数量。括号内的消息显示了警告 (JOBRUN.NUMMESSAGESWARNING) 和致命错误消息 (JOBRUN.NUMMESSAGESFATAL) 。请注意,所显示的消息计数不考虑 DSODBConfig.cfg 文件中的任何筛选集,这意味着,即使可能已经产生了 20 条消息,可能只有两条消息被捕获到操作数据库中。
  • Parameters 显示了与作业运行有关联的所有作业参数的列表。
    • Name 是从 JOBRUNPARAMSVIEW.PARAMNAME 列读取的,显示了作业参数的名称。
    • Value 是从 JOBRUNPARAMSVIEW.PARAMVALUE 列读取的,显示了作业参数的值。加密的作业参数值在操作数据中被存储为 "********",这也是在 Operations Console 中的显示形式。
  • Logs 显示了所有已捕获日志消息的列表(根据 DSODBConfig.cfg 中的筛选设置)。
    • Elapsed 显示了日志消息时间戳 (JOBRUNLOG.LOGTIMESTAMP) 和日志运行的目标时间戳 (JOBRUN.RUNSTARTTIMESTAMP) 之间的差异。该属性的格式是 HH:MM:SS。
    • Message 是从 JOBRUNPARAMSVIEW.MESSAGETEXT 列读取的,显示了日志消息的完整文本。

用户界面元素

Operations Console 的用户界面中有一部分不属于前面介绍的任何类别,如下所示。

项目页面 – 文件夹

在选中某个文件夹时,作业设计面板显示了所选文件夹包含的每一项作业的缩略图,如图 14 所示。

图 14. 项目页面 – 文件夹
本图显示了项目页面 – 文件夹

这些缩略图是按需生成的,无需使用任何缓存的版本,因此,在刷新页面时或选中下一个文件夹时,作业设计中的任何变更都反映在其中一个缩略图中。

项目页面 – 作业设计

在选中某个作业设计及其属性时,会显示其最新活动和历史作业运行的详细信息,如图 15 所示。

图 15. 项目页面 - 作业设计
本图显示了项目页面 - 作业设计

最新活动部分显示了作业运行的详细信息,如果存在这类信息 (JOBRUN.RUNSTARTTIMESTAMP),则包含最新的开始时间戳。请注意,即使作业运行仍在运行,如果其开始时间戳比已完成的时间戳更晚,则会显示已完成的作业运行。使用下面的 SQL 查询来检索最近开始的作业运行的信息,如清单 13 所示。

清单 13. SQL 示例:作业设计的最新活动
SELECT 
    X1.TOTALCPU, X1.RUNID, X1.CONDUCTORPID, X1.CONFIGFILENAME, X1.CUSTOMBATCHID, 
        X1.CUSTOMCONTACT, X1.CUSTOMFIELD1, X1.CUSTOMFIELD2, X1.CUSTOMJOBTYPE, 
        X1.CUSTOMSEQUENCE, X1.DSUSERNAME, X1.ELAPSEDRUNSECS, X1.ISUSERNAME, 
        X1.LASTUPDATETIMESTAMP, X1.RUNMAJORSTATUS, X1.MASTERPID, X1.RUNMINORSTATUS, 
        X1.NUMMESSAGESFATAL, X1.NUMMESSAGESTOTAL, X1.NUMMESSAGESWARNING, 
        X1.RUNENDTIMESTAMP, X1.RUNSTARTTIMESTAMP, X1.RUNTYPE, X1.TOTALROWSCONSUMED, 
        X1.TOTALROWSPRODUCED, X1.USERSTATUS, X1.INVOCATIONID, X1.CREATIONTIMESTAMP, 
        X1.CONTROLLING_RUNID, 
    Y1.PROJECTNAME, Y1.JOBNAME, Y1.COMPILATIONTIMESTAMP, Y1.JOBTYPE, Y1.FOLDERPATH, 
        Y1.WEBSERVICESENABLED 
FROM 
    DSODB.JOBRUN X1, 
    DSODB.JOBEXEC Y1, 
    DSODB.HOST Z1
WHERE 
    X1.JOBID = Y1.JOBID AND 
    X1.RUNSTARTTIMESTAMP IN 
    (
        SELECT 
            MAX(X.RUNSTARTTIMESTAMP) 
        FROM 
            DSODB.JOBRUN X, DSODB.JOBEXEC Y, DSODB.HOST Z 
        WHERE
            X.JOBID = Y.JOBID AND
            Y.HOSTID = Z.HOSTID AND 
            Z.HOSTNAME = <engineName> AND 
            Y.PROJECTNAME = <projectName> AND 
            Y.JOBNAME = <jobDesignName> AND 
            Y.FOLDERPATH = <containingFolderPath>
    ) AND 
    Y1.HOSTID = Z1.HOSTID AND 
    Z1.HOSTNAME = <engineName> AND 
    Y1.PROJECTNAME = <projectName> AND 
    Y1.JOBNAME = <jobDesignName> AND 
    Y1.FOLDERPATH = <containingFolderPath>

作业运行部分显示了与选定作业设计有关联的作业运行列表(如果有的话)。使用清单 14 中所示的 SQL 查询来检索作业运行列表(为了让 SQL 查询保持简单,此处没有提供排序和分页)。

清单 14. SQL 示例:设计的作业运行
SELECT 
    X.TOTALPHYSICALNODES, X.TOTALLOGICALNODES, X.RUNID, X.JOBID, 
        X.CONDUCTORPID, X.CONFIGFILENAME, X.CUSTOMBATCHID, X.CUSTOMCONTACT, 
        X.CUSTOMFIELD1, X.CUSTOMFIELD2, X.CUSTOMJOBTYPE, X.CUSTOMSEQUENCE, 
        X.DSUSERNAME, X.ELAPSEDRUNSECS, X.ISUSERNAME, X.LASTUPDATETIMESTAMP, 
        X.RUNMAJORSTATUS, X.MASTERPID, X.RUNMINORSTATUS, X.NUMMESSAGESFATAL, 
        X.NUMMESSAGESTOTAL, X.NUMMESSAGESWARNING, X.RUNENDTIMESTAMP, X.RUNSTARTTIMESTAMP,
        X.RUNTYPE, X.TOTALROWSCONSUMED, X.TOTALROWSPRODUCED, X.USERSTATUS, 
        X.INVOCATIONID, X.CREATIONTIMESTAMP, X.CONTROLLING_RUNID, X.TOTALCPU, 
    Y.PROJECTNAME, Y.JOBNAME, Y.COMPILATIONTIMESTAMP, Y.JOBTYPE, Y.FOLDERPATH, 
        Y.WEBSERVICESENABLED 
FROM 
    DSODB.JOBRUN X, 
    DSODB.JOBEXEC Y, 
    DSODB.HOST Z
WHERE 
    X.JOBID = Y.JOBID AND 
    Y.HOSTID = Z.HOSTID AND 
    Z.HOSTNAME = <engineName> AND 
    Y.PROJECTNAME IN (<projectName>) AND 
    Y.JOBNAME = <jobDesignName> AND
    Y.FOLDERPATH = <containingFolderPath>

活动页面 – 作业运行

作业运行部分显示了选定时段内的作业运行列表。在过去的活动模式中,开始和结束的时间戳由用户选择的(相对于在浏览器上的本地时区)。在当前活动模式下,结束时间标记被设置为 now,这是由引擎层系统上的时钟设定的时间,而开始时间戳被设置为用户选择的从结束时间戳向后计算的持续时间。

使用清单 15 所示的 SQL 查询来检索作业运行列表(为了让 SQL 查询保持简单,此处没有提供排序、分页和项目筛选)。

清单 15. SQL 示例:活动页面 - 作业运行
SELECT 
    X.TOTALPHYSICALNODES, X.TOTALLOGICALNODES, X.RUNID, X.JOBID, 
        X.CONDUCTORPID, X.CONFIGFILENAME, X.CUSTOMBATCHID, X.CUSTOMCONTACT, 
        X.CUSTOMFIELD1, X.CUSTOMFIELD2, X.CUSTOMJOBTYPE, X.CUSTOMSEQUENCE, 
        X.DSUSERNAME, X.ELAPSEDRUNSECS, X.ISUSERNAME, X.LASTUPDATETIMESTAMP, 
        X.RUNMAJORSTATUS, X.MASTERPID, X.RUNMINORSTATUS, X.NUMMESSAGESFATAL, 
        X.NUMMESSAGESTOTAL, X.NUMMESSAGESWARNING, X.RUNENDTIMESTAMP, X.RUNSTARTTIMESTAMP,
        X.RUNTYPE, X.TOTALROWSCONSUMED, X.TOTALROWSPRODUCED, X.USERSTATUS, 
        X.INVOCATIONID, X.CREATIONTIMESTAMP, X.CONTROLLING_RUNID, X.TOTALCPU, 
    Y.PROJECTNAME, Y.JOBNAME, Y.COMPILATIONTIMESTAMP, Y.JOBTYPE, Y.FOLDERPATH, 
        Y.WEBSERVICESENABLED 
FROM 
    DSODB.JOBRUN X, 
    DSODB.JOBEXEC Y, 
    DSODB.HOST Z  
WHERE 
    X.JOBID = Y.JOBID AND 
    Y.HOSTID = Z.HOSTID AND 
    Z.HOSTNAME = <engineName> AND
    (
        (X.CREATIONTIMESTAMP >= <startTimeStampUTC> AND 
            X.CREATIONTIMESTAMP <= <endTimeStampUTC>) OR 
        (X.RUNENDTIMESTAMP >=  <startTimeStampUTC> AND 
            X.RUNENDTIMESTAMP <= <endTimeStampUTC>) OR
        (X.RUNENDTIMESTAMP IS NULL AND 
            X.CREATIONTIMESTAMP <= <endTimeStampUTC>)
    )

结束语

本文研究了从何处读取操作系统和 DataStage Engine 引擎指标的数据,还探讨了如何以及从何处检索不同类型的对象的属性。

在从操作数据库读取数据的部分中,可以看到一些示例 SQL 查询,它们演示了如何查询数据库。同样地,在从操作系统读取数据的部分中,我们了解了用于检索数据的系统调用,或同等功能。最后,我们了解了 Operations Console 用户界面如何结合来自操作数据库、操作系统和元数据存储库的数据生成整个系统的单一视图。


致谢

我们非常感谢创造了 IBM InfoSphere DataStage and QualityStage Operations Console 的可视化设计的用户体验团队,这促使我们开发了一个尽可能与之匹配的应用程序。同时我们还要感谢质量保证团队,他们确保一切在所有可能的环境组合中都按预期工作。最后,我们想感谢许多的开发团队,没有他们,就没有 Operations Console 应用程序。

参考资料

学习

获得产品和技术

讨论

  • 加入 developerWorks 中文社区。探索由开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户进行交流。

条评论

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=Information Management
ArticleID=845316
ArticleTitle=解读 IBM InfoSphere DataStage and QualityStage Operations Console 的指标
publish-date=11122012