logging - 用于在 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
]
}
有没有什么办法可以解决所有问题,实现对这种日志的解析?谢谢
解决方案
推荐阅读
- list - 测试嵌套列表中的对角相邻元素
- angular - 使用 Angular cli 进行单元测试,http 测试不起作用
- javascript - 如何使画布文本可点击/可悬停?
- function - zsh - 嵌套函数中的变量扩展失败
- sql - 具有等效限制的 BigQuery Select
- sql - 将视图从 SQL Server(本地)复制到 Azure SQL Server
- reactjs - 无法获取未定义或空引用的属性“绑定”
- php - 动态渲染视图 symfony5
- python - 如何使用 Anaconda / pip 组织我的 Python 库
- c - 将字符串从 const char *const 数组复制到字符串(在 C 中)