Почему фильтр json не может проанализировать это сообщение? - PullRequest
0 голосов
/ 28 февраля 2020

Итак, у меня есть конвейерная конфигурация, содержащая это:

filter {
  if [message] =~ "\A\{.+\}\z" and [kubernetes][labels][app] {
    json {
      skip_on_invalid_json => true
      source => "message"
      target => "%{[kubernetes][labels][app]}_fields"
    }

    mutate {
      add_field => { "@log_type" => "%{[kubernetes][labels][app]}" }
    }
  } else {
    mutate {
      add_field => { "@log_type" => "generic" }
    }
  }
}

Фильтр mutate вызван правильно, поэтому я предполагаю, что моя проблема не в условии. Мое сообщение всегда помечается _jsonparsefailure, но, как я вижу, оно действительно JSON:

{
    "type": "response",
    "@timestamp": "2020-02-28T13:54:23Z",
    "tags": [],
    "pid": 6,
    "method": "get",
    "statusCode": 200,
    "req": {
        "url": "/app/kibana",
        "method": "get",
        "headers": {
            "user-agent": "curl/7.29.0",
            "host": "localhost:5601",
            "accept": "*/*"
        },
        "remoteAddress": "127.0.0.1",
        "userAgent": "127.0.0.1"
    },
    "res": {
        "statusCode": 200,
        "responseTime": 24,
        "contentLength": 9
    },
    "message": "GET /app/kibana 200 24ms - 9.0B"
}

Таким образом, результатом является исходное сообщение, помеченное правильно, но без "... Поле _fields "и помечено как _jsonparsefailure. Есть идеи?

...