Создайте индекс с тем же именем, что и значение пути запроса, используя вывод ElasticSearch - PullRequest
0 голосов
/ 09 апреля 2019

Это мой logstash.conf:

input {
    http {
        host => "127.0.0.1"
        port => 31311 
    }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]      
  }
  stdout {
    codec => "rubydebug"
  }
}

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

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

В моем терминале Logstash был показан следующий вывод:

{
    "@timestamp" => 2019-04-09T08:32:09.250Z,
       "message" => "",
      "@version" => "1",
       "headers" => {
           "request_path" => "/twitter",
           "http_version" => "HTTP/1.1",
        "http_user_agent" => "curl/7.64.1",
         "request_method" => "PUT",
            "http_accept" => "*/*",
         "content_length" => "0",
              "http_host" => "127.0.0.1:31311"
    },
          "host" => "127.0.0.1"
}

Когда я тогда запустил

C: \ Users \ Me \ Downloads \ curl-7.64.1-win64-mingw \ bin>. \ Curl.exe -XGET "http://127.0.0.1:9200/_cat/indices"

внутри PowerShell, я видел

yellow open logstash-2019.04.09 1THStdPfQySWl1WPNeiwPQ 5 1 0 0 401b 401b

Индекс с именем logstash-2019.04.09 был создан в ответ на мой запрос PUT в соответствии с соглашением ElasticSearch .

Мой вопрос: если я хочу, чтобы индекс имел то же значение, что и параметр {index_name}, который я передаю в команду .\curl.exe -XPUT 'http://127.0.0.1:31311/{index_name}', как мне настроить вывод ElasticSearch внутри моего logstash.conf file?

EDIT: Просто для пояснения, я хочу, чтобы {index_name} читался динамически каждый раз, когда я делаю запрос PUT для создания нового индекса.возможно

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Это возможно с опцией конфигурации выходного индекса .
Эта конфигурация может быть динамической с использованием синтаксиса %{foo}.Поскольку вы хотите, чтобы значение [headers][request_path] было в конфигурации индекса, вы можете сделать что-то вроде этого:

output {
  elasticsearch {
    hosts => ["http://localhost:9200"] 
    index => "%{[headers][request_path]}"     
  }
}

Чтобы это работало, поле значения [headers][request_path] не должно содержать ни одного из следующих символов:[ , \", *, \\, <, |, ,, >, /, ?].Я рекомендую вам использовать опцию конфигурации gsub фильтра mutate .Таким образом, чтобы удалить все прямые косые черты, у вас должно быть что-то вроде этого:

filter{
  mutate{
      gsub => ["[headers][request_path]","/",""]
    }
}

Если в пути запроса есть несколько прямых косых черт, вы можете заменить их каким-нибудь символом, который будет принятаasticsearch.
Итак, ваш final файл logstash.conf должен выглядеть так:

input {
    http {
        host => "127.0.0.1"
        port => 31311 
    }
}

filter{
  mutate{
      gsub => ["[headers][request_path]","/",""]
    }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[headers][request_path]}"
  }
  stdout {
    codec => "rubydebug"
  }
}
0 голосов
/ 09 апреля 2019

Вы можете сделать это, добавив настройку конфигурации index в свой раздел выводаasticsearch.например,

output {
  elasticsearch {
    hosts => ["http://localhost:9200"] 
    index => "yourindexnamehere"     
  }
  stdout {
    codec => "rubydebug"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...