【发布时间】:2021-03-05 02:17:58
【问题描述】:
我尝试使用 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
],
.
.
}
这似乎没有模式或错误。有没有人指出任何可以让我了解这里发生了什么的事情?
【问题讨论】:
-
您正在使用类变量(以@开头)。这意味着这些值在事件中保持不变。我认为没有理由这样做。如果您得到一个缺少 highNumber 或 lowNumber 字段的事件,那么它将使用前一个事件中的值,这可能是不合适的。
-
是的,谢谢。修复。类变量是问题
-
随意标记为已回答 :-)
标签: ruby elasticsearch logstash