如果有上游响应和没有上游响应,如何使用grok过滤器在logstash中设置条件。
我想在有的时候使用它。
match => { "message" => "%{COMBINEDAPACHELOG} %{NUMBER:request_time:float} %{NUMBER:upstream_time:float}" }
没有回应时。
match => { "message" => "%{COMBINEDAPACHELOG} %{NUMBER:request_time:float}"}
答案 0 :(得分:0)
match => { "message" => "%{COMBINEDAPACHELOG} %{NUMBER:request_time:float}( %{NUMBER:upstream_time:float})?" }
应该工作!的?该字段意味着它是可选的。确保通过( )?%{NUMBER:upstream_time:float}?
或将其与upstream_time ( %{NUMBER:upstream_time:float})?
答案 1 :(得分:0)
您还可以使用conditionals:
if [message] =~ /\d+\s+\d+$/ {
grok {
match => { "message" => "%{COMBINEDAPACHELOG} %{NUMBER:request_time:float} %{NUMBER:upstream_time:float}" }
}
} else {
grok {
match => { "message" => "%{COMBINEDAPACHELOG} %{NUMBER:request_time:float}" }
}
}
正则表达式\d+\s+\d+$
检查字符串末尾($
锚点)是否存在任意大小的两组数字(\d
)(+
)由任意数量的空格(\s+
)分隔。