解析与logstash动态红宝石哈希
问题描述:
我使用logstash,我在我的日志中有红宝石哈希。日志的样子:解析与logstash动态红宝石哈希
id: 20171023080217469299836 time: 2017-10-23 08:02:17 +0500 login: 123 params: {:service_id=>21164, :user_id=>"771713"}
id: 20171022185107064615881 time: 2017-10-22 18:51:07 +0500 login: 321 params: {:unc=>"521130929", :id=>"107005094"}
我分析它到外地 “PARAMS” 各种
id: 20171023080217469299836 time: 2017-10-23 08:02:17 +0500 login: 123 params: {:service_id=>21164, :user_id=>"771713"}
{
"@timestamp" => 2017-10-23T03:02:17.000Z,
"@version" => "1",
"host" => "elk",
"id" => "20171023080217469299836",
"login" => "123",
"params" => "{:service_id=>21164, :user_id=>\"771713\"}",
}
id: 20171022185107064615881 time: 2017-10-22 18:51:07 +0500 login: 321 params: {:unc=>"521130929", :id=>"107005094"}
{
"@timestamp" => 2017-10-22T13:51:07.000Z,
"@version" => "1",
"host" => "elk",
"id" => "20171022185107064615881",
"login" => "321",
"params" => "{:unc=>\"521130929\", :id=>\"107005094\"}",
}
参数名称。也可以添加或删除(有时散列中有2或4-5个参数)。我想解析为不同领域本(如XML过滤器解析)
{
"parse.service_id" : 21164,
"parse.user_id" : 771713
}
和
{
"parse.unc" : 521130929
"parse.id" : 107005094
}
,但无法找到如何做到这一点。 是否具有Logstash红宝石分析器?
答
您可以将kv
过滤器和grok
过滤器一起使用。
在你filter.conf logtash文件,添加以下内容:
grok {
match => { "message" => "id: %{INT:id} time: %{GREEDYDATA:time} login: %{INT:login} params: %{GREEDYDATA:params}" }
}
date {
match => ["time", "yyyy-MM-dd HH:mm:ss Z"]
}
kv {
source => "params"
remove_char_key => ":"
remove_char_value => "\""
field_split => ","
value_split => "="
trim_key => "\{"
trim_value => "\}>\""
prefix => "parse."
}
PS:你需要转义特殊字符的正则表达式和"
使用{
像\
。
这会给你以下可视化:
你能告诉什么样的源数据看起来像一个更好的例子,你希望它是什么样子?就像你肯定不想让这些键被“解析”一样。 + key' ... – henrebotha
我需要正确的键被解析。 + key – Dees7
'my_data.map {| key,value | [“parse。#{key}”,value]} .to_h' – henrebotha