Logstash не отправляет логи в эластик

Здравствуйте!

Уже писал вот сюда Использование файлов из output path, для восстановления удаленного индекса, но там сумбур какой-то получился, поэтому решил создать отдельный топик по этому вопросу.
Итак, у меня есть пример лога:

2019-06-10T20:32:08.505Z {name=srv-1} {"tags":["event","quick-login","success"],"userId":"100000000","organizationId":"000000000003"}
2019-06-10T20:32:08.505Z {name=srv-1} 20:32:08.505 [elastic-993] INFO LogMessage - {"tags":["event","quick-login","success"],"userId":"100000000","organizationId":"000000000003"}

По сути это один и тот же лог, но второй более детален, и нужно распарсить и положить в эластик именно его. Для этого я сделал грок фильтр:

input {
  file {
    path => "/path/to/log-file"
    tags => ["recovery"]
    start_position => "beginning"
    sincedb_path => "/path/to/sincedb_access"
  }
}

filter {
  if "recovery" in [tags] {
    grok {
         match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} \{name=(%{DATA:beat.name})\} %{TIME:time} \[%{DATA:thread}\] %{DATA:level}  %{DATA:logger} - %{GREEDYDATA:msg}" }
    }

    date {
        match => [ "timestamp", "ISO8601", "YYYY-MM-dd HH:mm:ss,SSS" ]
        target => "@timestamp"
    }

    mutate { remove_field => [ "time" ] }

    json {
        source => "msg"
        target => "message"
    }

    mutate { remove_field => [ "msg" ] }

  }
}

output {
    if "recovery" in [tags] {
      elasticsearch {
        hosts => "127.0.0.1:9200"
        index => "index.log"
    }
    file {
        path => "/path/to/test-output"
        codec => rubydebug
    }
  }
}

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

{
          "host" => "srv-1",
          "tags" => [
        [0] "recovery",
        [1] "_grokparsefailure"
    ],
      "@version" => "1",
       "message" => "2019-06-10T20:32:08.505Z {name=srv-1} {\"tags\":[\"event\",\"quick-login\",\"success\"],\"userId\":\"100000000\",\"organizationId\":\"000000000003\"}",
    "@timestamp" => 2019-12-19T12:28:31.779Z,
          "path" => "/path/to/log-file"
}
{
          "host" => "srv-1",
          "tags" => [
        [0] "recovery"
    ],
      "@version" => "1",
        "logger" => "LogMessage",
     "beat.name" => "srv-1",
       "message" => {
                  "tags" => [
            [0] "event",
            [1] "quick-login",
            [2] "success"
        ],
                "userId" => "100000000",
        "organizationId" => "000000000003"
    },
    "@timestamp" => 2019-06-10T20:32:08.505Z,
     "timestamp" => "2019-06-10T20:32:08.505Z",
        "thread" => "elastic-993",
          "path" => "/path/to/log-file",
         "level" => "INFO"
}

Первый лог не был обработан гроком, и это правильно, второй был. Но в эластик отправляется только первый лог. ЧЯДНТ?

Скорее всего, у вас поле message в схеме появляется как текстовое, а вы тут пытаетесь его как объект добавить.

Да, все так. Я видел такую конструкции в некоторых примерах, но не понимал как это устроено. Благодарю за ответ, получилось восстановить все что хотел.