Идентификатор документа не задан в ElasticSearch, хотя он настроен в logstash.conf

Здесь — это содержимое моего logstash.conf.

(Извините, что не вставил сюда содержимое напрямую. StackOverflow не разрешает вопросы с чрезмерно высоким соотношением кода и текста.)

В качестве теста я запустил команду PowerShell

C:\Users\Me\Downloads\curl-7.64.1-win64-mingw\bin> .\curl.exe -XPUT 'http://127.0.0.1:31311/twitter_new/7'

Я вижу следующий вывод на моем терминале Logstash:

{
                "message" => "",
               "@version" => "1",
                   "host" => "127.0.0.1",
             "@timestamp" => 2019-04-09T11:35:22.458Z,
    "request_path_length" => 3,
                "headers" => {
              "http_host" => "127.0.0.1:31311",
         "content_length" => "0",
           "request_path" => [
            [0] "",
            [1] "twitter_new",
            [2] "7"
        ],
            "http_accept" => "*/*",
           "http_version" => "HTTP/1.1",
        "http_user_agent" => "curl/7.64.1",
         "request_method" => "PUT"
    },
               "index_id" => "twitter_new"
}

Как видите, document_id не установлен на 7, хотя я этого и ожидал.

Как я могу это исправить?

Обновлено:

я изменил

if [request_path_length == 3] {

к

if [request_path_length] == 3 {

Я сделал еще один PUT запрос /twitter_new/8. Затем я сделал GET запрос на получение всех записей, и это была запись, соответствующая последнему PUT запросу, который я сделал:

{
    "_index": "twitter_new",
    "_type": "doc",
    "_id": "O5AIAmoBCWsefMj-o7Fw",
    "_score": 1,
    "_source": {
        "message": "",
        "document_id": "8",
        "@version": "1",
        "@timestamp": "2019-04-09T12:18:00.665Z",
        "index_id": "twitter_new",
        "request_path_length": 3,
        "headers": {
            "request_path": [
                "",
                "twitter_new",
                "8"
            ],
            "http_accept": "*/*",
            "http_version": "HTTP/1.1",
            "content_length": "0",
            "request_method": "PUT",
            "http_user_agent": "curl/7.64.1",
            "http_host": "127.0.0.1:31311"
        },
        "host": "127.0.0.1"
    }
}

Как видите, внутри sourcedocument_id действительно установлено на 8, но _id по-прежнему является случайно сгенерированной строкой. Я бы ожидал, что _id тоже будет 8, точно так же, как _index есть twitter_new.

Я что-то неправильно понимаю?

Можете поменять document_id => "%{[headers][request_path][2]}" на document_id => "%{document_id}" и проверить?

tamilsweet 09.04.2019 14:52

Нашли решение?

tamilsweet 10.04.2019 14:34
0
2
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно изменить условия.

Это правильный способ обращения к полям в конвейере logstash:

if [request_path_length] == 3

Вы используете if [request_path_length == 3], который не работает.

Другие вопросы по теме