Logstash对json数据进行mutate过滤

时间:2013-12-05 21:33:24

标签: json logstash

我想使用logstash对正在记录到文本文件的json数据执行转换。

Logstash配置代码段:

filter {
  mutate {
    gsub => [
      # replace all '::~~' with '\r\n'
      "alert.explanation.cnc-services.cnc-service.channel", "\:\:~~", "\\r\\n"
#      "channel", "~~", "n"
    ]
  }
}

输入json:

{
  "alert": {
    "explanation": {
      "cnc-services": {
        `enter code here`"cnc-service": {
          "channel": "TEXT1 TEXT2::~~TEXT3::~~TEXT4::~~TEXT5::~~TEXT6::~~::~~"
        }
      }
    }
  }
}

期望的输出:

{
  "alert": {
    "explanation": {
      "cnc-services": {
        "cnc-service": {
          "channel": "TEXT1 TEXT2\r\nTEXT3\r\nTEXT4\r\nTEXT5\r\nTEXT6\r\n\r\n"
        }
      }
    }
  }
}

输入数据只是整个json文档的一部分,可能还有其他字段,但我只需要修改这个。此数据由另一个应用程序生成,无法修改。我在logstash上看到的所有文章都没有谈到做这样的事情。

编辑:这是logstash配置的输入部分

input {
    # Read from log file
    file {
        codec => "json"
        type => "fireeye"
        path => ["/var/log/app/events.json"]
    }
}

1 个答案:

答案 0 :(得分:1)

某些试验和错误表明gsub数组中的密钥应该具有格式。

first_level[second_level][third_level]...

所以在你的情况下:

filter {
  mutate {
    gsub => ["alert[explanation][cnc-services][cnc-service][channel]", "whatever"]
  }
}

我不确切知道它背后的逻辑是什么,但它确实有效。