如何解析bhist日志
How to parse bhist log
我正在使用 IBM LSF 并尝试获取特定时期内的使用情况统计信息。我发现 bhist
可以完成这项工作,但简短格式 bhist
输出没有显示我需要的所有字段。
我想知道的是:
bhist 的输出字段可以自定义吗?我需要的字段是:
- <职位>
- <用户>
- <队列>
如果 1 不可能,长格式 (bhist -l
) 输出显示了我需要的一切,但格式很难操作。我在下面粘贴了一个格式示例。
例如,记录之间的行数不固定,每个事件中的换行可能会在我尝试扫描的单词中间换行。如何使用 sed
和 awk
解析此格式?
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
这些选项都不可用。历史信息的唯一真实可能性是:
- 找出一些解析方法
bhist -l
-- 不切实际,甚至可能因为您发现的格式不一致而无法实现。
- 使用 LSF API 编写一个 C 程序来做你想做的事情,它公开了
bhist
本身用来解析 lsb.events
文件的函数。这是存储有关 LSF 集群的所有历史信息的文件,也是 bhist
读取以生成其输出的文件。
- 如果 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
------------------------------------------------------------------------------
...
我正在使用 IBM LSF 并尝试获取特定时期内的使用情况统计信息。我发现 bhist
可以完成这项工作,但简短格式 bhist
输出没有显示我需要的所有字段。
我想知道的是:
bhist 的输出字段可以自定义吗?我需要的字段是:
- <职位>
- <用户>
- <队列>
如果 1 不可能,长格式 (
bhist -l
) 输出显示了我需要的一切,但格式很难操作。我在下面粘贴了一个格式示例。
例如,记录之间的行数不固定,每个事件中的换行可能会在我尝试扫描的单词中间换行。如何使用 sed
和 awk
解析此格式?
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
这些选项都不可用。历史信息的唯一真实可能性是:
- 找出一些解析方法
bhist -l
-- 不切实际,甚至可能因为您发现的格式不一致而无法实现。 - 使用 LSF API 编写一个 C 程序来做你想做的事情,它公开了
bhist
本身用来解析lsb.events
文件的函数。这是存储有关 LSF 集群的所有历史信息的文件,也是bhist
读取以生成其输出的文件。 - 如果 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
------------------------------------------------------------------------------
...