如何使用 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,因此如果您没有设置它,您就可以了).