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 в схеме появляется как текстовое, а вы тут пытаетесь его как объект добавить.

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

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.