如何解析bhist日志

How to parse bhist log

我正在使用 IBM LSF 并尝试获取特定时期内的使用情况统计信息。我发现 bhist 可以完成这项工作,但简短格式 bhist 输出没有显示我需要的所有字段。

我想知道的是:

  1. bhist 的输出字段可以自定义吗?我需要的字段是:

    • <职位>
    • <用户>
    • <队列>
  2. 如果 1 不可能,长格式 (bhist -l) 输出显示了我需要的一切,但格式很难操作。我在下面粘贴了一个格式示例。

例如,记录之间的行数不固定,每个事件中的换行可能会在我尝试扫描的单词中间换行。如何使用 sedawk 解析此格式?

JobId <1531>, User <user1>, Project <default>, Command< example200>
Fri Dec 27 13:04:14: Submitted from host <hostA> to Queue <priority>, CWD <$H
                     OME>, Specified Hosts <hostD>;
Fri Dec 27 13:04:19: Dispatched to <hostD>;
Fri Dec 27 13:04:19: Starting (Pid 8920);
Fri Dec 27 13:04:20: Running with execution home </home/user1>, Execution CWD 
                     </home/user1>, Execution Pid <8920>;
Fri Dec 27 13:05:49: Suspended by the user or administrator;
Fri Dec 27 13:05:56: Suspended: Waiting for re-scheduling after being resumed 
                     by user;
Fri Dec 27 13:05:57: Running;
Fri Dec 27 13:07:52: Done successfully. The CPU time used is 28.3 seconds.

Summary of time in seconds spent in various states by Sat Dec 27 13:07:52 1997
PEND  PSUSP  RUN  USUSP  SSUSP  UNKWN  TOTAL
5     0      205  7      1      0      218
------------------------------------------------------------
    .... repeat

长格式输出很难解析。我知道 bjobs 在较旧的 LSF 版本中有一个未格式化输出 (-UF) 的选项,这使得它更容易一些,而最新版本的 LSF 允许您自定义以短格式输出打印哪些列-o.

不幸的是,bhist 这些选项都不可用。历史信息的唯一真实可能性是:

  1. 找出一些解析方法 bhist -l -- 不切实际,甚至可能因为您发现的格式不一致而无法实现。
  2. 使用 LSF API 编写一个 C 程序来做你想做的事情,它公开了 bhist 本身用来解析 lsb.events 文件的函数。这是存储有关 LSF 集群的所有历史信息的文件,也是 bhist 读取以生成其输出的文件。
  3. 如果 C 不适合您,那么您可以尝试编写一个脚本来直接解析 lsb.events 文件——配置参考中记录了该格式。这很难,但并非不可能。 Here是LSF 9.1.3的相关文档。

我个人的建议是 #2 -- 您要查找的函数是 lsb_geteventrec()。您基本上会一次阅读 lsb.events 中的每一行,然后提取您需要的信息。

我正在添加第二个答案,因为它可能会帮助您解决问题,而无需实际编写您自己的解决方案(取决于您之后的使用情况统计信息)。

LSF 已经有一个名为 bacct 的实用程序,可以计算并打印出有关按各种条件筛选的历史 LSF 作业的各种使用情况统计信息。

例如,要获取时间 0 和时间 1 之间 dispatched/completed/submitted 作业的摘要使用统计信息,您可以使用(分别):

bacct -D time0,time1
bacct -C time0,time1
bacct -S time0,time1

有关特定用户提交的作业的统计信息:

bacct -u <username>

有关提交到特定队列的作业的统计信息:

bacct -q <queuename>

这些选项也可以组合使用,例如,如果您想要统计特定项目在特定时间 window 内提交和完成的作业,您可以使用:

bacct -S time0,time1 -C time0,time1 -P <projectname>

输出提供了一些有关所有符合所提供条件的作业的摘要信息,如下所示:

$ bacct -u bobbafett -q normal

Accounting information about jobs that are: 
  - submitted by users bobbafett, 
  - accounted on all projects.
  - completed normally or exited
  - executed on all hosts.
  - submitted to queues normal, 
  - accounted on all service classes.
------------------------------------------------------------------------------

SUMMARY:      ( time unit: second ) 
 Total number of done jobs:       0      Total number of exited jobs:    32
 Total CPU time consumed:      46.8      Average CPU time consumed:     1.5
 Maximum CPU time of a job:     9.0      Minimum CPU time of a job:     0.0
 Total wait time in queues: 18680.0
 Average wait time in queue:  583.8
 Maximum wait time in queue: 5507.0      Minimum wait time in queue:    0.0
 Average turnaround time:     11568 (seconds/job)
 Maximum turnaround time:     43294      Minimum turnaround time:        40
 Average hog factor of a job:  0.00 ( cpu time / turnaround time )
 Maximum hog factor of a job:  0.02      Minimum hog factor of a job:  0.00
 Total Run time consumed:    351504      Average Run time consumed:   10984
 Maximum Run time of a job: 1844674      Minimum Run time of a job:       0
 Total throughput:             0.24 (jobs/hour)  during  160.32 hours
 Beginning time:       Nov 11 17:55      Ending time:          Nov 18 10:14

这个命令还有一个长格式的输出,它提供了一些关于每项工作的类似于 bhist -l 的信息,这些信息可能更容易解析(尽管仍然不是那么容易):

$ bacct -l -u bobbafett -q normal

Accounting information about jobs that are: 
  - submitted by users bobbafett, 
  - accounted on all projects.
  - completed normally or exited
  - executed on all hosts.
  - submitted to queues normal, 
  - accounted on all service classes.
------------------------------------------------------------------------------

Job <101>, User <bobbafett>, Project <default>, Status <EXIT>, Queue <normal>, 
                     Command <sleep 100000000>
Wed Nov 11 17:37:45: Submitted from host <endor>, CWD <$HOME>;
Wed Nov 11 17:55:05: Completed <exit>; TERM_OWNER: job killed by owner.

Accounting information about this job:
     CPU_T     WAIT     TURNAROUND   STATUS     HOG_FACTOR    MEM    SWAP
      0.00     1040           1040     exit         0.0000     0M      0M
------------------------------------------------------------------------------
...