使用 logstash 解析范围请求 header

Parsing range request header with logstah

我需要在 logstash 中将范围请求值解析为 start_range 和 end_range。数据来自 json object 并且看起来像这样:

byte_range: "bytes=10-200"

我想将开始和结束提取为单独的值,如下所示:

start_range:10
end_range:200

我还需要考虑到值可能如下所示:

byte_range: "bytes=10-"

并且仍然会导致:

start_range: 10
end_range: -

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

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

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

您可以使用可选的 non-capturing 组 (?:...)?:

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

其中 \d+ 匹配 1+ 个数字。

或者使用 built-in Grok 模式:

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