首页 > 解决方案 > 用于在 Logstash 中解析的奇怪日志结构。意见赞赏

问题描述

我有一个日志文件,它基本上不遵循常见日志文件的格式。通常在像 Apache 这样的已知日志中,您在一行中记录了一个事件。然而,我的是通过多行展开的,有点像 COBOL 日志。我已经尝试过多行编解码器来解析它,但它没有多大帮助。我想提取一些信息,我将在主题末尾详细说明。

这个话题相当长而且很复杂,所以我真的很感谢你的时间和你对此的看法,因为我以前从未见过这样的日志。如果您不明白,请随时引用我的任何内容。我很乐意给你买杯咖啡来解决这个问题:)

这是日志结构的示例。

*****************************************************************
*            Chain ABC           (UNIX)                    *
***************************************************************** 

JOB: ABC                          DATE : 15/07/2019 12:15:42

*-------------------------- STEP000 ---------------------------*
*                  Initialization                 *
*---------------------------------------------------------------*

AA100PPP-STOC0001-------------------------------------
AA100PPP-STOC0002-PROGRAM IDENTIFICATION : PPP/2.000/2018-01-01/F/
AA100PPP-STOC0003-START PROCESSING – START TIMESTAMP : 2019-07-15-12.45.00
AA100PPP-STOC0004-....+....1....+....2....+....3....+....4....+....5
…
AA100PPP-STOC0010-*** PPP : END SUCCESSFULLY – END TIMESTAMP : 2019-07-15-12.46.00

*-------------------------- STEP001 ---------------------------*
*             Configuration              *
*---------------------------------------------------------------*
…
*-------------------------- STEP002 ---------------------------*
*             Execution              *
*---------------------------------------------------------------*
…
*-------------------------- STEP003 ---------------------------*
*             Computing              *
*---------------------------------------------------------------*
BBCPTXYZ-STOC0001-------------------------------------
BBCPTXYZ-STOC0002-PROGRAM IDENTIFICATION : TY1/2.000/2018-01-01/F/
*CD00TY1-STOC0002-PROGRAM IDENTIFICATION : XYZ/2.000/2018-02-14/F/
*CD00TY1-STOC0003-START PROCESSING – START TIMESTAMP : 2019-07-15-12.51.00
…
BBCPTXYZ-STOC0001-------------------------------------
*CD00TY1-STOC0002-PROGRAM IDENTIFICATION : OPM/2.000/2018-02-14/F/
*CD00TY1-STOC0003-START PROCESSING – START TIMESTAMP : 2019-07-15-12.53.00
BBCPTOPM-STOC0001-------------------------------------
BBCPTOPM-STOC0002-FILE EXTRACTED : 000000000002
*CD00TY1-STOC0010-*** XYZ :  END SUCCESSFULLY - END TIMESTAMP : 2019-07-15-12.55.00
…

JOB: ABC                          DATE : 15/07/2019 12:58:34

*---------------------------------------------------------------*
*                          End job                          *
*---------------------------------------------------------------*

问题 1: 如您所见,我们有两行定义了作业ABC和整个作业的两个全局时间戳。第一个是开始时间,第二个是结束时间。不幸的是,没有办法区分开头和结尾,因为它们具有相同的格式。我想要这份工作,将时间戳添加到从该文件中提取的每个事件中。

问题 2:日志文件的内容被名为STEP 的块划分。对于每一步,你都有一个主程序,由第一行前八个字符的最后三个字符标识,最终还有许多小程序,我将在下面的问题 3中讨论这个问题 。例如在STEP000 AA100PPP-STOC0001-------------------------------------

来自AA100PPP的PPP是这一步的主程序。它有两个本地时间戳,开始时间和结束时间。使用此信息,它会创建一个事件。简而言之,事件定义如下:

{
job: ABC
timestampstartglobal: 15/07/2019 12:15:42
timestampendglobal: 15/07/2019 12:58:34 
process: PPP
timestampstartprocess: 2019-07-15-12.45.00
timestampendprocess:  2019-07-15-12.46.00
}

问题3:STEP003中,主程序XYZ调用了小程序TY1。TY1 现在负责管理这一步中的所有程序。我们这里有多个程序识别/启动处理 -每个程序的启动时间戳。所以对于这一步,我只关心 XYZ 的时间戳,但是这个信息被分成 2 行,我需要告诉解析器在 XYZ 正下方的行中PROGRAM IDENTIFICATION 获取 XYZ 的开始时间戳应该从这一行获取开始时间戳: *CD00TY1-STOC0003-START PROCESSING – START TIMESTAMP : 2019-07-15-12.51.00 不是小程序OPM的行 *CD00TY1-STOC0003-START PROCESSING – START TIMESTAMP : 2019-07-15-12.53.00

问题 4: 同样在STEP003中,我想在事件中添加一个嵌套字段,其中包含从小程序 OPM 提取的信息 BBCPTOPM-STOC0002-FILE EXTRACTED : 000000000002 最后,我们有一个类似于问题 2中的事件,带有一个额外的字段

{
job: ABC
process: XYZ
...
extraInfo: [
fileExtracted: 2
]
} 

有没有什么办法可以解决所有问题,实现对这种日志的解析?谢谢

标签: logginglogstashelastic-stacklogstash-configuration

解决方案


推荐阅读