【问题标题】:logstash Grok to extract different data from log file containing different loglogstash Grok 从包含不同日志的日志文件中提取不同的数据
【发布时间】:2021-07-21 12:28:09
【问题描述】:

我的日志文件包含来自不同进程在同一文件上写入数据的数据。日志文件如下所示。

我正在写 Grok 过滤器模式来提取不同的数据并在 Kibana 板中使用它。我尝试了一种模式,但它只适用于日志文件中的一行,它不适用于整个日志文件。

%{UUID:uuid} > %{WORD:level}:%{INT:LOGlevel} %{WORD:RClevel}: %{INT:RClevel} %{WORD:LOGtype} :%{GREEDYDATA:message}

我需要来自日志的 MGMT_RDCIP_INFO、PCI、DP_DRIVER 数据,例如 RATIO、QUALITY、Ceiling 数据。谁能指导我如何从日志中获取特定的关键字数据。

ef22119900-99ecf-10e9-7dfc-ffe0ea066dfff > LVL:3 CT:   0 MGMT_RDCIP_INFO :Bandwidth Management for Server: Ceiling = 112500.000000, Floor = 12500.000000, Active = 14825.552639
ef22119900-99ecf-10e9-7dfc-ffe0ea066dfff > LVL:3 CT:   0             PCI :Display 0 codec 0 (H264 Encoder) frames encoded per second : 11.56
ef22119900-99ecf-10e9-7dfc-ffe0ea066dfff > LVL:3 CT:   0             PCI :Display 1 codec 0 (H264 Encoder) frames encoded per second : 25.92
ef22119900-99ecf-10e9-7dfc-ffe0ea066dfff > LVL:3 CT:   0             PCI :QUALITY: 81.3918 81.3918 0.0 0.0
ef22119900-99ecf-10e9-7dfc-ffe0ea066dfff > LVL:3 CT:   0             PCI :RATIO: 5.73013 94.2699 0.0 0.0
ef22119900-99ecf-10e9-7dfc-ffe0ea066dfff > LVL:3 CT:   0       DP_DRIVER :Display duplication output id: 1 move MPPS 0.00, dirty MPPS 162.59, total MPPS 162.59```

[![snaphot of log file][1]][1]



  [1]: https://i.stack.imgur.com/wuFum.jpg

【问题讨论】:

    标签: logstash logstash-grok logfile grok logfile-analysis


    【解决方案1】:

    问题似乎是当您使用单个空格作为分隔符时,对吗?

    logstash 了解 %{SPACE} 它将删除整个空间,直到下一个字符

    我的 grok 过滤器

    %{UUID:uuid} > %{WORD:level}:%{INT:LOGlevel} %{WORD:RClevel}:%{SPACE}%{WORD:LOGtype}%{SPACE}%{DATA:stuffyouwant}%{SPACE}:%{GREEDYDATA:message}
    

    我已经对其进行了测试,它适用于所有情况。

    编辑

    似乎您有使用 if 语句可能有用的案例。 它需要 2 grok as

    filter{
        grok{
            match{
                "message"="%{UUID:uuid} > %{WORD:level}:%{INT:LOGlevel} %{WORD:RClevel}:%{SPACE}%{WORD:LOGtype}%{SPACE}%{DATA:stuffyouwant}%{SPACE}:%{DATA:parameters}: %{GREEDYDATA:stuffs}"
            }
        }
        if [parameters] == "RATIO"{
            grok{
                match{
                    "stuff"="%{NUMBER:ratio1} %{NUMBER:ratio2} %{NUMBER:ratio3} %{NUMBER:ratio4}%{GREEDYDATA:allratio}"
                }
            }
        } else if [parameters]=="QUALITY"{
            grok{
                match{"stuff"="%{NUMBER:q1} %{NUMBER:q2} %{NUMBER:q3} %{NUMBER:q4}%{GREEDYDATA:allq}"
                }
            } 
        }else if [parameters]==""{
            grok{
                etc...
            }
        }
        }
    }
    
    

    首先 grok 识别参数, 然后对每个 if 语句进行第二次探索,根据您需要的字符获取数字

    【讨论】:

    • 谢谢。我的主要目标是从 GREEDYDATA 中获取信息。诸如比率、质量、天花板等信息来绘制图表。知道如何从日志中获取特定的关键字数据
    • 请原谅我的误解,我添加了一些似乎适合您需求的示例过滤器,如果我的回答对您有帮助,请点赞,或者如果它满足您的需求,请接受它作为答案。
    【解决方案2】:

    UUID 最好被视为 DATA 类型,同时确保您没有拾取 RCLevel 和 LOGtype 前面的空格

    %{DATA:uuid} > %{WORD:LOGlevel_WORD}:%{INT:LOGlevel_INT} %{WORD:RClevel_WORD}:[ ]{0,99}%{NUMBER:RClevel_NUMBER}[ ]{0,99}%{WORD:LOGtype} :%{GREEDYDATA:message}
    

    这给了我这样的输出:

    {
      "RClevel_INT": "0",
      "LOGlevel_WORD": "LVL",
      "LOGtype": "MGMT_RDCIP_INFO",
      "RClevel_WORD": "CT",
      "LOGlevel_INT": "3",
      "message": "Bandwidth Management for Server: Ceiling = 112500.000000, Floor = 12500.000000, Active = 14825.552639",
      "uuid": "ef22119900-99ecf-10e9-7dfc-ffe0ea066dfff"
    }
    
    {
      "RClevel_INT": "0",
      "LOGlevel_WORD": "LVL",
      "LOGtype": "PCI",
      "RClevel_WORD": "CT",
      "LOGlevel_INT": "3",
      "message": "Display 0 codec 0 (H264 Encoder) frames encoded per second : 11.56\r",
      "uuid": "ef22119900-99ecf-10e9-7dfc-ffe0ea066dfff"
    }
    

    更新(2021-04-29):CT 值可能为负值,前面没有空格,更新了 grok

    【讨论】:

    • 感谢您的帮助。是否要从消息部分中提取特定数据,例如每秒编码的帧数。 CT 值有时也会出现负整数,例如 ef22119900-99ecf-10e9-7dfc-ffe0ea066dfff > LVL:1 CT:-520 PCI :No codec ID meta data on pixel source 所以我将 %{INT:RClevel_INT} 更改为 %{GREEDYDATA:ctmessage}。
    • 请记住,您也可以使用 NUMBER 数据类型,并且您可以更改模式以使用具有最小和最大空格数的计数,将为此更新 sn-p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多