Logstash - 将字符串中的字符拆分为 2 个字段

Logstash - Split characters in string into 2 fields

我在CSV文件中读取了Logstash,其中包含一个字段my_id,并且是一个由数字组成的8位数字字符串。

我希望输出文件有 2 个字段来代替 my_id。一个名为 id_start 的前 6 位数字和 id_end 将是后 2 位数字。

示例:my_id:12345678 将变为 id_start:123456 和 id_end:78

我是 Logstash 的新手,但我一直在阅读,我认为我需要使用 grok 过滤器来执行此操作 - 我尝试创建第一个字段到目前为止没有成功:

filter {
  grok {
    match => ["id_start", "(?<my_id>.{6})"]
  }
}

我也发现很难找到关于这类事情的好例子,所以任何帮助将不胜感激!

您可以使用 ruby 过滤器并编写自定义 ruby 代码,例如:

filter {
  ruby {
    code => "
        event['id_start'] = event['my_id'][0..6]
        event['id_end'] = event['my_id'][6..8]
        "
  }
}

对于 Logstash 5.x+,这是不同的,他们已经实现了 getter 和 setter 并限制了对变量的访问。

ruby {
  code => "
      event.set('[id_start]', event.get('[my_id]')[0..6])
      event.set('[id_end]', event.get('[my_id]')[6..8])
      "
}