Logstash: объединить два журнала в один выходной документ

Я установил syslog для отправки журналов в logstash со следующими фильтрами:

output {
  elasticsearch 
  { hosts => ["localhost:9200"]
  document_id => "%{job_id}"   
}

}
filter {
    grok {
        overwrite => ["message"]
    }
    json {
     source => "message"
    }
}

Типичное сообщение одного из моих приложений будет иметь начальное состояние и job_id:

{"job_id": "xyz782", state: "processing", job_type: "something"}

Примерно через несколько минут другой журнал будет иметь тот же log_id, другое состояние и время обработки:

{"job_id": "xyz782", state:"failed", processing_time: 12.345}

Эти поля загружаются правильно, но создаются два документа. Я хотел бы, чтобы только один документ создавался для исходного журнала, а второй журнал вместо этого обновлял бы первый, означая, что обновленный документ будет иметь следующие поля:

{"job_id": "xyz782", state: "failed", job_type: "something", processing_time: 12.345}

Как вы можете видеть в моем выводе logstash conf, я использую job_id в качестве идентификатора документа, однако второе сообщение, кажется, заменяет поля из первого сообщения, но также стирает все поля в первом сообщении, которых нет в второе, например, поле job_type, присутствующее в первом сообщении, не появляется в конечном документе. Это может быть связано с тем фактом, что json происходит от одного и того же поля «message» оба раза. Есть ли другой способ получить объединение двух сообщений журнала в один документ в logstash?

Ответы на вопрос(1)

Ваш ответ на вопрос