logstash jruby 过滤器 returns 错误数据
logstash jruby filter returns bad data
我尝试使用 logstash 将一些数据提取到 elastic 中。我有两个字符串,我必须将它们转换为整数,并且根据它们是偶数还是奇数,我正在创建一个数组,其中包含这些数字之间的所有偶数或奇数。
例如,对于两个数字 361
和 371
,我正在创建一个 [361, 363, 365, 367, 369, 371]
的数组。我有一个 ruby 脚本返回数组并设置事件。
这是清理字符串的地方-
filter {
mutate {
add_field => { "range" => ""}
}
mutate {
gsub => [
"lowNumber", "[^0-9]", "",
"highNumber", "[^0-9]", ""
]
}
}
这里是 ruby 脚本-
def filter(event)
@low = event.get('lowNumber').to_i
@high = event.get('highNumber').to_i
# check if the low number is even or odd
filter = @low.even? ? 'even?' : 'odd?'
# create an array with all numbers between low and high
@arr = (@low..@high).to_a.select{|i| i.send(filter) }
event.set('range', @arr)
return [event]
end
我没有收到任何错误消息,但有时它会完美地创建范围,而其他时候它会创建完全垃圾数组。
这是返回的良好数据的示例-
{
.
.
.
"highNumber" => "546",
.
.
"lowNumber" => "542"
"range" => [
[0] 542,
[1] 544,
[2] 546
],
.
.
}
{
.
.
.
"highNumber" => "616",
.
.
"lowNumber" => "616"
"range" => [
[0] 616
],
.
.
}
这是很多情况下发生的事情-
{
.
.
.
"highNumber" => "627",
.
.
"lowNumber" => "627"
"range" => [
627.......13227
],
.
.
}
这似乎没有规律或错误。有没有人指出任何可以让我了解这里发生的事情的事情?
您正在使用 class 个变量(以 @ 开头)。这意味着这些值在事件中保持不变。我认为没有理由这样做。如果您得到一个缺少 highNumber 或 lowNumber 字段的事件,那么它将使用前一个事件的值,这可能是不合适的。我建议你改成
low = event.get('lowNumber').to_i
high = event.get('highNumber').to_i
if low and high
# check if the low number is even or odd
...
end
我尝试使用 logstash 将一些数据提取到 elastic 中。我有两个字符串,我必须将它们转换为整数,并且根据它们是偶数还是奇数,我正在创建一个数组,其中包含这些数字之间的所有偶数或奇数。
例如,对于两个数字 361
和 371
,我正在创建一个 [361, 363, 365, 367, 369, 371]
的数组。我有一个 ruby 脚本返回数组并设置事件。
这是清理字符串的地方-
filter {
mutate {
add_field => { "range" => ""}
}
mutate {
gsub => [
"lowNumber", "[^0-9]", "",
"highNumber", "[^0-9]", ""
]
}
}
这里是 ruby 脚本-
def filter(event)
@low = event.get('lowNumber').to_i
@high = event.get('highNumber').to_i
# check if the low number is even or odd
filter = @low.even? ? 'even?' : 'odd?'
# create an array with all numbers between low and high
@arr = (@low..@high).to_a.select{|i| i.send(filter) }
event.set('range', @arr)
return [event]
end
我没有收到任何错误消息,但有时它会完美地创建范围,而其他时候它会创建完全垃圾数组。
这是返回的良好数据的示例-
{
.
.
.
"highNumber" => "546",
.
.
"lowNumber" => "542"
"range" => [
[0] 542,
[1] 544,
[2] 546
],
.
.
}
{
.
.
.
"highNumber" => "616",
.
.
"lowNumber" => "616"
"range" => [
[0] 616
],
.
.
}
这是很多情况下发生的事情-
{
.
.
.
"highNumber" => "627",
.
.
"lowNumber" => "627"
"range" => [
627.......13227
],
.
.
}
这似乎没有规律或错误。有没有人指出任何可以让我了解这里发生的事情的事情?
您正在使用 class 个变量(以 @ 开头)。这意味着这些值在事件中保持不变。我认为没有理由这样做。如果您得到一个缺少 highNumber 或 lowNumber 字段的事件,那么它将使用前一个事件的值,这可能是不合适的。我建议你改成
low = event.get('lowNumber').to_i
high = event.get('highNumber').to_i
if low and high
# check if the low number is even or odd
...
end