Logstash将阵列添加到现有阵列

时间:2019-08-15 23:44:44

标签: elasticsearch logstash

我正在将所有Logstash配置转换为映射到新的ECS 1.0.1标准。在执行此操作时,我想利用[related] [ip]字段添加任何IP地址。如果一个事件在每个字段中仅包含一个IP地址,则可以很好地工作,但是,如果事件在一个字段中包含IP地址数组,则将这些IP地址作为字符串添加到[related] [ip]中,因此无法建立索引。

为了更好地说明...如果发生了事件:

     source.ip: "192.168.1.1",
destination.ip: "8.8.8.8"

以下过滤器工作正常:

filter {
  if [source][ip]      {mutate {copy => {"[source][ip]"      => "[related][ip]"}}}
  if [destination][ip] {mutate {copy => {"[destination][ip]" => "[related][ip]"}}}
  if [host][ip]        {mutate {copy => {"[host][ip]"        => "[related][ip]"}}}
}

并导致[related] [ip]字段是有效的IP地址数组,并被索引到Elasticsearch:

related.ip: ["192.168.1.1", "8.8.8.8"]

但是,如果某个事件伴随设备上的IP地址阵列(例如,有线和无线)出现:

host.ip: ["192.168.1.1", "192.168.1.200"]

同一过滤器会将两个主机IP作为字符串而不是数组添加,结果如下:

related.ip: ["192.168.1.1,192.168.1.200"]

“ 192.168.1.1,192.168.1.200”不是有效的IP,因此将无法建立索引。

如何在一个字段中检查多个IP地址,并将每个IP地址添加到related.ip?我假设使用Ruby过滤器,但是对Ruby却一无所知。

这是我在Logstash中看到的示例错误:

"Could not index event to Elasticsearch." blah, blah, blah... "failed to parse field [related.ip] of type [ip] in document with id 'JK1Tl2wBOp3Ysey6oX9Z'. Preview of field's value: '169.254.227.113,169.254.128.186'" blah, blah, blah "is not an IP string literal."

0 个答案:

没有答案