使用logstah解析范围请求标头

时间:2017-02-02 19:10:27

标签: regex elasticsearch logstash logstash-grok

我需要将范围请求值解析为logstash中的start_range和end_range。数据来自json对象,如下所示:

byte_range: "bytes=10-200"

我希望将start和end提取为单独的值,如下所示:

start_range:10
end_range:200

我还需要考虑到这个值看起来像这样:

byte_range: "bytes=10-"

并且仍应导致:

start_range: 10
end_range: -

我尝试使用grok过滤器这样做,但它不起作用:

bytes=%{NUMBER:start_range}-%{NUMBER:end_range}

有没有人知道如何尽可能简单地解决这个问题?

1 个答案:

答案 0 :(得分:3)

您可以使用可选的非捕获组(?:...)?

bytes=(?<start_range>\d+)(?:-(?<end_range>\d+))?

其中\d+匹配1位数。

或使用内置的Grok模式:

bytes=%{INT:start_range}(?:-%{INT:end_range})?