Logstash анализирует json

Я пытаюсь использовать log-stash для чтения входного файла 1.log в формате JSON и записи в elasticsearch. Это мой файл журнала:

{"key":"value00"}
{"key":"value01"}
{"key1":[{"key2":"value02"},{"key3":"value03"},{"key4":[{"key5":"value 04"}]}]}

и это мой файл конфигурации:

input {
  file {
    type => "json"
    path => "/logstash/1.log"
  }
}
filter{
  json {
    source => "message"
    remove_field => ["message"]
  }
}
output {
    elasticsearch {
        hosts => ["192.168.1.6:9200"]
        user => "elastic"
        password => "something"
    }
}

поведение log-stash совершенно случайно. Иногда он работает правильно, но иногда возвращает следующую ошибку для одной и той же входной структуры:

Error parsing json {:source=>"message", :raw=>"4\"}]}]}", :exception=>#<LogStash::Json::ParserError: Unexpected character ('"' (code 34)): Expected space separating root-level values

person alighorbani    schedule 22.02.2021    source источник


Ответы (1)


Мое предложение:

не удаляйте сообщение с самого начала во время отладки, так как вы не знаете, в каком источнике возникла проблема. Сделайте это условно, основываясь на результатах фильтра json, и, если он не удался, запишите его в файл, чтобы выяснить, когда именно он не работает.

По моему опыту, это в основном входные данные, которые либо неверны, либо не ожидались в таком формате.

Пример на основе вашей конфигурации:

input {
  file {
    type => "json"
    path => "/logstash/1.log"
  }
}
filter{
  json {
    source => "message"
  }
  if "_jsonparsefailure" not in [tags] {
    mutate {
      remove_field => ["message"]
    }
  }
}
output {
  if "_jsonparsefailure" not in [tags] {
    elasticsearch {
        hosts => ["192.168.1.6:9200"]
        user => "elastic"
        password => "something"
    }
  }
  if "_jsonparsefailure" in [tags] {
    file {
        path => "/write/to/this/file.txt"
    }
  }
}
person YouryDW    schedule 09.04.2021