是否有关于理解和编写grok模式的教程?

问题描述 投票:0回答:1

我已经搜索了很长时间,并被定向到同一页面。我正在尝试为自定义日志编写grok模式。例如,下面是一条日志行:

2020/01/02 08:40:16 UUID: 5E82093B:7550_B0092619:01BB_5E0DAC6F_33A27FC:05AD - URL: https://endpoint.point/path/to/api 0.011636824 elapsed(s)

现在,我的全部或大部分搜索都将我带到this链接。但是我不明白它或如何使用它。是否有使用简单英语的教程来确切解释每个定义的模式将呈现哪种数据类型。就像我不明白NOTSPACE代表什么或GREEDYDATA代表什么等等。我无法从上面的日志中找到如何查看此5E82093B:7550_B0092619:01BB_5E0DAC6F_33A27FC:05AD的信息。请帮助我寻找可以学习编写正确的grok模式的地方。

P.S。我知道grok调试器(this)。我用它写了下面的模式。只是想告诉我我在哪里。

%{IPORHOST:clientip} - %{DATA:somedata} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATH:request} HTTP/(?<httpversion>[0-9.]*)" %{NUMBER:response_code} %{NUMBER:bytes_transferred} %{DATA:referrer} "%{DATA:agent_info}"rt=%{NUMBER:request_time} uct="%{NUMBER:upstream_connect_time}" uht="%{NUMBER:upstream_header_time}" urt="%{NUMBER:upstream_response_time}"

我也有具体问题。请回答,因为它们会有所帮助:

  1. 如果两个字段之间的空间不可预测,该如何处理?
  2. 如果日志行之间的一两个条目不一致,那么当它出现在日志中时,如何确保创建它的字段?
  3. 我如何在UUID上方浏览?
elastic-stack logstash-grok grok elk
1个回答
0
投票

提及link包含匹配的grok模式和相应的正则表达式。因此,通过查看给定的正则表达式模式,您可以了解一下。

例如,GREEDYDATA =。*表示GREEDYDATA数据类型可以容纳任意数量的字符。

  1. 可以使用%{SPACE},因为它匹配0个或多个空格。您也可以使用\ s *忽略两者之间的任何空格。
  2. 理想情况下,对数线模式应一致。您可以使用if条件来选择相关的日志模式,并且每个日志都有不同的方式。
  3. 鉴于UUID不是标准格式。这就是为什么我们不能使用默认UUID数据类型的原因。

例如样本UUID的日志行

UUID:adff19e7-4c78-4bc1-b8bd-ba6284ac191f

Grok模式

UUID:%{UUID:uuid}

{
  "uuid": [
    [
      "adff19e7-4c78-4bc1-b8bd-ba6284ac191f"
    ]
  ]
}

根据您的情况,您可以使用GREEDYDATA类型。

2020/01/02 08:40:16 UUID:  5E82093B:7550_B0092619:01BB_5E0DAC6F_33A27FC:05AD - URL: https://endpoint.point/path/to/api   0.011636824  elapsed(s)

UUID:\s*%{GREEDYDATA:uuid} - URL:\s*%{GREEDYDATA:theRest}

{
  "uuid": [
    [
      "5E82093B:7550_B0092619:01BB_5E0DAC6F_33A27FC:05AD"
    ]
  ],
  "theRest": [
    [
      "https://endpoint.point/path/to/api   0.011636824  elapsed(s)"
    ]
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.