添加递增 1 的新计数器 (trap_id) 字段

Add new counter (trap_id) field which increments by 1

代码:

filter {
    if ([trap_id]) {
        mutate {
               update => { "trap_id" => "trap_id"++ }
               }
    else
        mutate {
               add_field => { "trap_id" => 1 }
               }
                   }
}

场景: 我正在尝试引入一个新字段(trap_id),每次生成陷阱时它都需要递增 1。

错误: :ConfigurationError", :message=>"在第 26 行第 50 列(字节 1229)过滤后应为 #, {, } 之一 {\n

指向行:更新 => { "trap_id" => "trap_id"++ }

问题: 我该如何修复错误?或者对于给定的场景,这是正确的做法吗?

您不能使用该语法递增字段。您也许可以使用 math 过滤器(尽管您需要安装它,并且它已经三年未更新),或者您可以在 ruby.

中安装
ruby {
    init => '@trap_id = 0'
    code => '
        @trap_id += 1
        event.set("trap_id", @trap_id)
    '
}

您需要将 pipeline.workers 设置为 1 才能可靠地工作。如果有多个管道工作线程,那么对实例变量的访问将不会在它们之间同步。它可能几乎所有时间都有效,但两个线程在调用 event.set 之前递增 @trap_id 并非不可能。如果出于某种原因,对 event.set 的调用实际上必须再次引用内存(而不是寄存器),那么这将得到错误的结果。