如何使用 Logstash 过滤器根据其他列的某些行添加新列?
How to use Logstash filters to add a new column based on some rows of other column?
假设我有一个如下所示的 csv 文件:
cummulated_values
0
2
5
10
17
如何使用 logstash 过滤器添加新的“值”列,这些行定义为 values[n] := cummulated_values[n] - cummulated_values[n-1],其中 0 < n <= 总行数 和 值[0] := cummulated_values[0],其中cummulated_values[n]表示“cummulated_values”列的第n行?
所以输出 table 将如下所示:
cummulated_values, values
0, 0
2, 2
5, 3
10, 5
17, 7
我会使用 ruby 过滤器来实现。
csv { autodetect_column_names => true }
ruby {
code => '
c = event.get("cummulated_values").to_i
@values ||= c
event.set("values", c - @values)
@values = c
'
}
您需要保留事件的顺序,并且需要所有事件都通过 ruby 过滤器的同一个实例。因此,您必须将 pipeline.workers 设置为 1,并验证如果 pipeline.ordered 已设置,则它被设置为 auto 或 true(默认值为 auto,因此如果您没有设置它,您就可以了).
假设我有一个如下所示的 csv 文件:
cummulated_values
0
2
5
10
17
如何使用 logstash 过滤器添加新的“值”列,这些行定义为 values[n] := cummulated_values[n] - cummulated_values[n-1],其中 0 < n <= 总行数 和 值[0] := cummulated_values[0],其中cummulated_values[n]表示“cummulated_values”列的第n行? 所以输出 table 将如下所示:
cummulated_values, values
0, 0
2, 2
5, 3
10, 5
17, 7
我会使用 ruby 过滤器来实现。
csv { autodetect_column_names => true }
ruby {
code => '
c = event.get("cummulated_values").to_i
@values ||= c
event.set("values", c - @values)
@values = c
'
}
您需要保留事件的顺序,并且需要所有事件都通过 ruby 过滤器的同一个实例。因此,您必须将 pipeline.workers 设置为 1,并验证如果 pipeline.ordered 已设置,则它被设置为 auto 或 true(默认值为 auto,因此如果您没有设置它,您就可以了).