【问题标题】:Logstash mutate filter on json datajson数据上的Logstash变异过滤器
【发布时间】:2013-12-05 21:33:24
【问题描述】:

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

Logstash 配置 sn-p:

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"]
    }
}

【问题讨论】:

  • 迂腐但重要的问题:当 Logstash 接收到这些数据时,它是被解析为事件字段和子字段,还是 JSON 是一个平面字段中的字符串?
  • 我相信它会将其解析为 json。这是输入部分: input { # 从日志文件文件中读取 { codec => "json" type => "fireeye" path => ["/var/log/app/events.json"] } }
  • 嗯。不幸的是,很难找到有关编解码器的文档。我有一点运气逐行读取文件输入,然后使用json filter plugin 将单个字段解析为子字段。如果您在此处找不到帮助,我建议您在 logstash-users 列表中提问。
  • 你找到解决这个问题的方法了吗?

标签: json logstash


【解决方案1】:

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

first_level[second_level][third_level]...

所以在你的情况下:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    相关资源
    最近更新 更多