使用 grok 和 ruby 提取和自定义字段的 Logstash
Logstash extracting and customizing field with grok and ruby
我将弹性搜索日志中的这些数据保存在 referer
字段中
/clientReq?sessionid=3332&UID=ed91b-517234-4f4c211-a20e-d2e1aefc126a&signUp=false
我想使用 ruby
将此数据 ed91b-517234-4f4c211-a20e-d2e1aefc126a
保存在单独的字段中。
我已经在我的模式配置文件 ruby 中尝试过,
ruby {
code => "
saveid=event[referer].match((\w+[-]?)+)+)
event.set('saved',saveid) "
}
这甚至没有保存整个文件。所以我继续尝试 grok
过滤器并尝试了这个,
grok {
match => {"message" => "%{COMBINEDAPACHELOG}"}
add_field => { "savedData" => "%{referer}" }
}
这些都不起作用。我已经测试了配置,如果配置成功。当我访问 kibana 前端时,我也没有看到创建的新字段。
Ruby 哈希语法 event[field] = foo
不再使用,已被 Get API 取代,例如 event.get(referrer)
.
除此之外,您的正则表达式不正确,无法获得所需的结果。解决方案之一是使用 Positive Lookbehind 检查 UID,
这应该有效,
ruby {
code => "
saveid = event.get('referer').match(/(?<=UID=)((\w+[-]?)+)+/)[1]
event.set('saved',saveid)
"
}
对于 grok
,您可以为 referer
字段创建一个新的 filter
,并使用 gork's
predefined UUID pattern 来匹配您的字符串。 .你能试试这个吗,
grok {
match => {"referer" => "UID=%{UUID:saveData}"}
}
希望这对您有所帮助。
我将弹性搜索日志中的这些数据保存在 referer
字段中
/clientReq?sessionid=3332&UID=ed91b-517234-4f4c211-a20e-d2e1aefc126a&signUp=false
我想使用 ruby
将此数据 ed91b-517234-4f4c211-a20e-d2e1aefc126a
保存在单独的字段中。
我已经在我的模式配置文件 ruby 中尝试过,
ruby {
code => "
saveid=event[referer].match((\w+[-]?)+)+)
event.set('saved',saveid) "
}
这甚至没有保存整个文件。所以我继续尝试 grok
过滤器并尝试了这个,
grok {
match => {"message" => "%{COMBINEDAPACHELOG}"}
add_field => { "savedData" => "%{referer}" }
}
这些都不起作用。我已经测试了配置,如果配置成功。当我访问 kibana 前端时,我也没有看到创建的新字段。
Ruby 哈希语法 event[field] = foo
不再使用,已被 Get API 取代,例如 event.get(referrer)
.
除此之外,您的正则表达式不正确,无法获得所需的结果。解决方案之一是使用 Positive Lookbehind 检查 UID,
这应该有效,
ruby {
code => "
saveid = event.get('referer').match(/(?<=UID=)((\w+[-]?)+)+/)[1]
event.set('saved',saveid)
"
}
对于 grok
,您可以为 referer
字段创建一个新的 filter
,并使用 gork's
predefined UUID pattern 来匹配您的字符串。 .你能试试这个吗,
grok {
match => {"referer" => "UID=%{UUID:saveData}"}
}
希望这对您有所帮助。