我有一个包含以下数据的字段
"REQUEST-941-APPLICATION-ATTACK-XSS, REQUEST-941-APPLICATION-ATTACK-XSS, REQUEST-941-APPLICATION-ATTACK-XSS, REQUEST-942-APPLICATION-ATTACK-SQLI, REQUEST-949-BLOCKING-EVALUATION, RESPONSE-980-CORRELATION
我只想退回第一件商品,即:(请求-941-应用程序-攻击-XSS),但当我使用这个grok过滤器
grok
{
match => {"attack_names" => "(?<attack>^[A-Z1-9-]+)"}
remove_field => ["attack_names"]
}
它返回所有匹配项
"REQUEST-941-APPLICATION-ATTACK-XSS, REQUEST-941-APPLICATION-ATTACK-XSS, REQUEST-941-APPLICATION-ATTACK-XSS, REQUEST-942-APPLICATION-ATTACK-SQLI, REQUEST-949-BLOCKING-EVALUATION, RESPONSE-980-CORRELATION
所以,我尝试了这个ruby代码:
ruby
{
code => "
saveid = event.get('attack_names').split(',')[0]
event.set('attack',saveid)
"
}
但这似乎没有任何作用,并且文件没有添加到数据中。
我做错了什么?
1条答案
按热度按时间2uluyalo1#
如果你的字段以
"REQUEST
开头,那么将模式锚定到字段内容开头的^将阻止你的模式匹配。在可能的情况下,锚定模式 * 总是 * 是一个good idea,因为它使匹配失败的速度更快,并且当匹配失败时回溯的成本会使grok模式非常昂贵。你可以试试
您不需要尝试在匹配的模式结尾之后使用任何其他字符。