Ruby - 在 logstash 中获取价值
Ruby - getting value in logstash
我有一个字段,值输出看起来像
A::field_1_2_3_4_22_5_6_7_8_365 => 6
因为字段名称是"dynamical"因为包含ip和端口。
如何使用 ruby 从字段名称中获取值并为其添加字段?它看起来像
A::field => 6
bIP => 1.2.3.4
bport => 22
cIP => 5.6.7.8
cport => 365
任何帮助将不胜感激!!谢谢
也许我没有完全理解这一点,但你可以使用数组和方法 .push 来添加:
Array=[1, 2, 5, 7]
@n = [3, 4, 6]
Array.push(@n) => Array=[1, 2, 3, 4, 5, 6, 7]
您可以使用以下代码:
field_name = 'A::field_1_2_3_4_22_5_6_7_8_365'
fields = field_name.split("_")
bID = "#{fields[1]}.#{fields[2]}.#{fields[3]}.#{fields[4]}"
bport = "#{fields[5]}"
bID = "#{fields[6]}.#{fields[7]}.#{fields[8]}.#{fields[9]}"
bport = "#{fields[10]}"
这是一个非常相似的问题的答案:
对于这种精确的情况,ruby
过滤器需要更多地参与才能捕获不同的东西
filter {
ruby {
code => "
newhash = {}
event.to_hash.each {|key, value|
re = /(\w::[a-z]+)_(\d+_\d+_\d+_\d+)_(\d+)_(\d+_\d+_\d+_\d+)_(\d+)/
if key =~ re then
field, bIP, bport, cIP, cport = key.match(re).captures
newhash[field] = event[key]
newhash['bIP'] = bIP.gsub('_', '.')
newhash['bport'] = bport
newhash['cIP'] = cIP.gsub('_', '.')
newhash['cport'] = cport
event.remove(key)
end
}
newhash.each {|key,value|
event[key] = value
}
"
}
}
因此,如果您的活动中有类似 "A::field_1_2_3_4_22_5_6_7_8_365" => "6"
的字段,那么您的活动将包含以下字段:
{
"A::field" => "6",
"bIP" => "1.2.3.4",
"bport" => "22",
"cIP" => "5.6.7.8",
"cport" => "365"
}
我有一个字段,值输出看起来像
A::field_1_2_3_4_22_5_6_7_8_365 => 6
因为字段名称是"dynamical"因为包含ip和端口。 如何使用 ruby 从字段名称中获取值并为其添加字段?它看起来像
A::field => 6
bIP => 1.2.3.4
bport => 22
cIP => 5.6.7.8
cport => 365
任何帮助将不胜感激!!谢谢
也许我没有完全理解这一点,但你可以使用数组和方法 .push 来添加:
Array=[1, 2, 5, 7]
@n = [3, 4, 6]
Array.push(@n) => Array=[1, 2, 3, 4, 5, 6, 7]
您可以使用以下代码:
field_name = 'A::field_1_2_3_4_22_5_6_7_8_365'
fields = field_name.split("_")
bID = "#{fields[1]}.#{fields[2]}.#{fields[3]}.#{fields[4]}"
bport = "#{fields[5]}"
bID = "#{fields[6]}.#{fields[7]}.#{fields[8]}.#{fields[9]}"
bport = "#{fields[10]}"
这是一个非常相似的问题的答案:
对于这种精确的情况,ruby
过滤器需要更多地参与才能捕获不同的东西
filter {
ruby {
code => "
newhash = {}
event.to_hash.each {|key, value|
re = /(\w::[a-z]+)_(\d+_\d+_\d+_\d+)_(\d+)_(\d+_\d+_\d+_\d+)_(\d+)/
if key =~ re then
field, bIP, bport, cIP, cport = key.match(re).captures
newhash[field] = event[key]
newhash['bIP'] = bIP.gsub('_', '.')
newhash['bport'] = bport
newhash['cIP'] = cIP.gsub('_', '.')
newhash['cport'] = cport
event.remove(key)
end
}
newhash.each {|key,value|
event[key] = value
}
"
}
}
因此,如果您的活动中有类似 "A::field_1_2_3_4_22_5_6_7_8_365" => "6"
的字段,那么您的活动将包含以下字段:
{
"A::field" => "6",
"bIP" => "1.2.3.4",
"bport" => "22",
"cIP" => "5.6.7.8",
"cport" => "365"
}