我正在尝试添加一个与以斜杠结尾的请求匹配的查询,如下所示:
n.n.n.n - - [16/Oct/2013:16:40:41 +0100] "GET / HTTP/1.1" 200 25058 "-" "Mozilla/5.0 (iPad; CPU OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A501 Safari/9537.53"
我正在使用 Lucene 查询类型。
如果我的查询设置为*
,我就会看到该事件。
如果我将其设置为request:"css"
,我就会看到 CSS 请求,正如预期的那样。
但是,以下所有操作均未产生结果:
request:"/"
request:"\/"
request:"\\/"
我尝试了 Lucene 正则表达式,但没有成功:
request:/\//
我注意到其他人也遇到了类似的问题,尽管是在 Kibana 2 上:https://github.com/rashidkpc/Kibana/issues/401
如何查询以字符结尾的请求/
?
答案1
您定义了什么映射?
根据您在 [请求] 字段上定义的映射,斜杠“/”可能不会存储在 elasticsearch 索引中。
如果您为 kibana 的 [请求] 字段添加一个术语面板,您是否会看到完整的请求值,或者是否会看到这些值被拆分为关键字/术语?
答案2
我设法通过在记录输出到 elasticsearch 之前添加一个字段来解决我的问题。
在我的indexer.conf
文件中,我添加了以下代码:
filter {
if [request] =~ /\/$/ {
mutate {
add_field => {
'file_type' => 'html'
}
}
}
}
我现在可以通过查询挑选出我感兴趣的记录file_type:"html"
。
这实际上可能是一种更好的方法,因为这里有关于使用前导通配符的警告:
允许在单词开头使用通配符(例如“*ing”)特别重要,因为需要检查索引中的所有术语,以防它们匹配。
所以,我可能会添加图像、JavaScript、CSS等的测试。
答案3
对于我来说,在 .* 周围使用括号效果很好。
request.raw:/(.*)\//
它返回所有以 结尾的 url /
。