我需要将范围请求值解析为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}
有没有人知道如何尽可能简单地解决这个问题?
答案 0 :(得分:3)
您可以使用可选的非捕获组(?:...)?
:
bytes=(?<start_range>\d+)(?:-(?<end_range>\d+))?
其中\d+
匹配1位数。
或使用内置的Grok模式:
bytes=%{INT:start_range}(?:-%{INT:end_range})?