gpt4 book ai didi

regex - LogStash-解析日志

转载 作者:行者123 更新时间:2023-12-03 00:01:35 25 4
gpt4 key购买 nike

我正在尝试解析我的日志文件。它正在工作,但是有一个新的要求,我需要解析日志中的新字段。
日志或多或少:

|2018-02-01 13:48:00.882|[v2.8.0.0]|DEBUG|[EndpointFirst] |Session activated (documentId: 508, workflow id: 1)|
|2018-02-01 13:48:00.901|[v2.8.0.0]|INFO|[Custom.EndpointSecond [Document 508]]|Firing event 'DocumentReceived' on state machine with current state 'Initial' and event argument 'CustomArgument'.|

我的希腊过滤器:
(?<my_timestamp>%{TIMESTAMP_ISO8601:timestamp})\s*(?<my_version>\[v.{7}])s*(?<my_severity>\s+%{LOGLEVEL:loglevel})\s*(?<my_endpoint>\[.{1,}])\s*(?<my_message>%{DATA:message})

现在我得到以下字段(来自测试grok模式的结果):
MATCHED
my_version [v2.8.0.0]
my_timestamp 2018-02-01·13:48:00.901
timestamp 2018-02-01·13:48:00.901
my_endpoint [Custom.EndpointSecond·[Document·508]]
my_message
my_severity ⇥INFO
message
loglevel INFO
after match: Firing event 'DocumentReceived' on state machine with current state 'Initial' and event argument 'CustomArgument'.

我想实现什么?
  • 我想有一个新字段应该解析
    来自[Custom.EndpointSecond·[Document·508]](如果没有日志
    [文档x],则此字段应为空。
  • 我想用开始的字符串填充消息
    后场。

  • 任何帮助将不胜感激

    最佳答案

    您可以使用

    (?<my_timestamp>%{TIMESTAMP_ISO8601:timestamp})\s*\|\s*(?<my_version>\[v.{7}])\s*\|\s*(?<my_severity>%{LOGLEVEL:loglevel})\s*\|\s*(?<my_endpoint>\[.*?(?<new_field>\[[^\]]*])?])\s*\|\s*(?<my_message>%{GREEDYDATA:message})

    请注意 \s*\|\s*(匹配用0+空格括起来的 |)而不是 \s*(因为字符串中包含管道), \[.*?(?<new_field>\[[^\]]*])?]匹配 [...]数据内的可选 my_endpoint子字符串和 %{GREEDYDATA:message}(= .*),而不是 %{DATA:message}(= .*?)。

    \[.*?(?<new_field>\[[^\]]*])?]详细信息
  • \[-一个[
  • .*?-除换行符以外的零个或多个字符,
  • 尽可能少
  • (?<new_field>\[[^\]]*])?-一个可选的捕获组“new_field”:[,然后是除]之外的任何0+字符,然后是]
  • ]-一个]字符。
  • 关于regex - LogStash-解析日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48576827/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com