Regex for promtail config



我一直在努力让正则表达式字符串正常工作。它被Promtail用来解析我日志中的标签。我遇到的问题是它不适用于正向前瞻(因为我认为promtail是用go写的?(

无论如何,日志都是网络日志,这里有几个例子:

INFO:     172.0.0.1:0 - "POST /endpoint1/UNIQUE-ID?key=unique_value HTTP/1.1" 200 OK
INFO:     172.0.0.2:0 - "GET /endpoint/health HTTP/1.1" 200 OK
172.0.0.1:0 - - [04/Mar/2022:10:52:10 -0500] "GET /endpoint2/optimize HTTP/1.1" 200 271
INFO:     172.0.0.3:0 :0 - "GET /endpoint3?key=unique_value HTTP/1.1" 200 OK

另一件值得注意的事情是,UNIQUE-ID将是一个VIN ID(车辆识别号(

我想要创建的组是:iprequestendpointstatus。然而,由于endpoint1中的所有UNIQUE_ID以及endpoint1和endpoint3中的unique_values,使用完整的端点路径会导致loki中的流过多,并且基本上会杀死它

我的解决方案正则表达式如下:

(?P<ip>((?:[0-9]{1,3}.){3}[0-9]{1,3})).+(?P<request>(GET|POST|HEAD|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)).(?P<endpoint>(.+endpoint1/health)|(.+endpoint1)|(.+)(?)|(.+) ).+".(?P<status>([0-9]{3}))

它捕获了以下组:

ip: `172.0.0.1`, `172.0.0.2`, `172.0.0.1` `172.0.0.3`
request: `POST`, `GET`, `GET`, `GET`
endpoint: `/endpoint1`, `/endpoint1/health`, `/endpoint2/optimize `, `/endpoint3?`
status: `200`,`200`,`200`,`200`

问题是/endpoint2/optimize/endpoint3?的端点。端点2在端部具有尾部空间,端点3包括CCD_。我可以使用下面的正则表达式使用正向前瞻来实现这一点,但它在Promtail中抛出了一个错误。

(?P<ip>((?:[0-9]{1,3}.){3}[0-9]{1,3})).+(?P<request>(GET|POST|HEAD|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)).(?P<endpoint>(.+endpoint1/health)|(.+endpoint1)|(.+)(?=?)|(.+)(?= )).+".(?P<status>([0-9]{3}))

如有任何帮助,我们将不胜感激!我并没有假装我了解regex。。。

编辑:这是一个例子https://regex101.com/r/FXvnqR/1

编辑

试试这个!(?P<ip>((?:[0-9]{1,3}.){3}[0-9]{1,3})).+(?P<request>(GET|POST|HEAD|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)).(?P<endpoint>(/endpoint[1-3]?(?:/health|/optimize)?))?.+".(?P<status>([0-9]{3}))

https://regex101.com/r/DKqRpL/1

如果要有包括1-3以外的号码的端点,或者除了运行状况或优化之外的后续路由,则需要对其进行编辑,但到目前为止,这是您的修复芽

相关内容

  • 没有找到相关文章

最新更新