Logstash 过滤器不替换变量

Logstash filter not replacing variable

我正在 logstash 过滤器中执行以下 mutate/add_field 转换:

mutate {
     add_field => { "[retrieved_sessionid_new]" => "%{[retrieved_sessionid][0]}" }
     add_field => { "[totalBytes]" => "%{[retrieved_sessionid_new][totalBytes]}" }
}

下面是 stdout(当然还有 elasticsearch

"retrieved_sessionid" => [
        [0] "{\"srcBytes\":\"376\",\"ElapsedTime\":\"0\",\"@version\":\"1\",\"@timestamp\":\"2018-11-29T13:31:11.944Z\",\"dstBytes\":\"450\",\"SessionID\":\"39680\",\"tags\":[\"bar\",\"foo\",\"traffic_event\"],\"totalBytes\":\"826\"}"
    ]

"retrieved_sessionid_new" => "{\"srcBytes\":\"537\",\"ElapsedTime\":\"8\",\"@version\":\"1\",\"@timestamp\":\"2018-11-29T13:31:03.931Z\",\"dstBytes\":\"526\",\"SessionID\":\"6131\",\"tags\":[\"bar\",\"boo\",\"traffic_event\"],\"totalBytes\":\"1063\"}",

"totalBytes" => "%{[retrieved_sessionid_new][totalBytes]}",

为什么 totalBytes 变量没有正确插值?

编辑:

原始 json 事件:

"retrieved_sessionid": [
      "{\"srcBytes\":\"381\",\"ElapsedTime\":\"4\",\"@version\":\"1\",\"@timestamp\":\"2018-11-29T13:12:26.928Z\",\"dstBytes\":\"526\",\"SessionID\":\"56276\",\"tags\":[\"bar\",\"foo\",\"traffic_event\"],\"totalBytes\":\"907\"}"
    ],
"totalBytes": "%{[retrieved_sessionid_new][totalBytes]}",
"retrieved_sessionid_new": "{\"srcBytes\":\"381\",\"ElapsedTime\":\"4\",\"@version\":\"1\",\"@timestamp\":\"2018-11-29T13:12:26.928Z\",\"dstBytes\":\"526\",\"SessionID\":\"56276\",\"tags\":[\"bar\",\"foo\",\"traffic_event\"],\"totalBytes\":\"907\"}"

您应该将数据解码为 JSON。

使用 json 过滤器的示例(使用 LS 6.5.1 测试):

input {
  stdin { }
}

filter {
  json {
    source => "message"
    add_field => { "[totalBytes]" => "%{[retrieved_sessionid][0][totalBytes]}" }
  }
}

output {
  stdout {}
}

输出:

{
                "message" => "{\"retrieved_sessionid\": [{\"srcBytes\":\"376\",\"ElapsedTime\":\"0\",\"@version\":\"1\",\"@timestamp\":\"2018-11-29T13:31:11.944Z\",\"dstBytes\":\"450\",\"SessionID\":\"39680\",\"tags\":[\"bar\",\"foo\",\"traffic_event\"],\"totalBytes\":\"826\"}]}",
             "@timestamp" => 2018-08-24T14:08:32.080Z,
    "retrieved_sessionid" => [
        [0] {
              "SessionID" => "39680",
             "@timestamp" => "2018-11-29T13:31:11.944Z",
            "ElapsedTime" => "0",
                   "tags" => [
                [0] "bar",
                [1] "foo",
                [2] "traffic_event"
            ],
               "dstBytes" => "450",
               "@version" => "1",
               "srcBytes" => "376",
             "totalBytes" => "826"
        }
    ],
                   "host" => "localhost.localdomain",
               "@version" => "1",
             "totalBytes" => "826"
}