我如何根据 2 个标记之一将消息拆分为 2 个属性?

how do i split message into 2 properties based on one of 2 tokens?

我认为这是一个简单的案例,但我在实施它时遇到了问题。

我的输入消息的格式是:aaaaaaaaa;bbbbbbbbbbaaaaaaa:bbbbbbb 我想做的是拆分冒号或分号,然后将它们分配给键和值对。

我正在做 2 次变异,但是当我 运行 一些样本测试时它出错了。

mutate{
  split => {
    "message" => ":"
  }
  add_field => {
    "key" => "%{[message][0]}"
    "value" => "%{[message][1]}"
  }
}
mutate{
  split => {
    "message" => ";"
  }
  add_field => {
    "key" => "%{[message][0]}"
    "value" => "%{[message][1]}"
  }
}

但我认为那是不对的。然后我更多地研究了 grok,但不确定它是否是这样工作的。

我应该改为:

filter {
  grok {
    match => { "message" => "%{key}:%{value}" }
  }
  grok {
    match => { "message" => "%{key};%{value}" }
  }
}

我会使用 grok 来做到这一点。试试这个:

grok { match => { "message" => "%{DATA:field1}[:;]%{GREEDYDATA:field2}" } }