2015-12-16 132 views
-1

我正在使用IBM LSF并尝试在特定时间段内获取使用情况统计信息。我发现bhist可以完成这项工作,但简写形式bhist输出并不显示我需要的所有字段。如何解析bhist日志

我想知道的是:

  1. 是bhist的输出字段定制?我需要的字段是:

    • <作业ID>
    • <用户>
    • <队列>
    • < JOB_NAME>
    • <项目名称>
    • < job_description>
    • < submission_time >
    • < pending_time后>
    • < RUN_TIME>
  2. 如果是不可能的,长形式(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 
+2

因为它有点宽泛。尝试[编辑]显示你的尝试,你想要的和你面临的问题。 – fedorqui

+1

正确的解决方案将是awk(假设没有现有的面向应用程序的工具)。 sed是用于简单替换个别行的,就是这些 - 请记住,不管是什么古怪的字符组合,人们都会陷入sed命令行并投掷你。也许你不明白@fedorquis评论的重要部分 - 你必须至少向我们展示预期的输出结果,因为我们有机会理解你的需求。 –

回答

0

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

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

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

我个人的建议是#2 - 你要找的功能是lsb_geteventrec()。您基本上每次阅读lsb.events中的每一行,并提取所需的信息。

0

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

LSF已经有一个名为bacct的实用程序,它计算并打印出各种有关按各种标准过滤的历史LSF作业的使用统计信息。

例如,若要获取有关被派往/完成/时间0/1/2和时间1间提交的作业汇总使用统计数据,你可以(分别)使用方法:

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

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

bacct -u <username> 

的统计信息提交给特定队列作业:

bacct -q <queuename> 

这些选项可以组合为好,因此,例如,如果你想了解某个特定项目提交并完成一个特定的时间窗口内的作业的统计信息,您可以使用:

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 
------------------------------------------------------------------------------ 
...