Протестируйте logstash с помощью elasticsearch в качестве ввода и вывода

Я настроил logstash с Elasticsearch в качестве входных и выходных параметров, как показано ниже:

вход

      {
         elasticsearch {
         hosts =>  ["hostname" ]
        index => 'indexname'        
        type => 'type'
        user => 'username'      
        password => 'password'
        docinfo => true
        query => '{ "query": { "match": { "first_name": "mary" } }}'    
       }
     }

выход

  {
   elasticsearch {
    hosts => ["hostname" ]
    index => 'indexname'                
    user => 'username'
    password => 'password'    
    }
   }

Мои проиндексированные данные, как показано ниже:

    PUT person/person/3 
    { 
     "first_name" : "mary" 
    }
    PUT person/person/4
    { 
    "first_name" : "mary.m" 
    }
     PUT person/person/5
    { 
    "first_name" : "mary.k" 
    }

Когда я запускаю запрос ниже на ES

   GET indexname/_search
   {
    "query": {
     "match": {
       "first_name": "mary"
               }
       }
      }

он возвращается

         {
   "took": 1,
     "timed_out": false,
       "_shards": {
         "total": 5,
        "successful": 5,
         "failed": 0
            },
          "hits": {
             "total": 1,
            "max_score": 0.2876821,
             "hits": [
              {
               "_index": "person",
                 "_type": "person",
                   "_id": "3",
                "_score": 0.2876821,
             "_source": {
             "first_name": "mary"
                       }
                    }
                 ]
               }
             }

Хотя конвейер logstash запущен успешно, он не регистрирует этот запрос в ES, поскольку я использовал запрос как «match»: { «first_name»: «mary»} в разделе ввода.


person Sushil    schedule 15.05.2017    source источник
comment
Кажется, вы используете тот же индекс, что и документы. Каков ваш вариант использования? Если запрос не дает никаких документов, Logstash также не сможет загрузить какие-либо документы.   -  person Val    schedule 15.05.2017
comment
я обновил свой вопрос   -  person Sushil    schedule 15.05.2017
comment
Вы уверены, что ищете в индексе indexname, а не в индексе person???   -  person Val    schedule 15.05.2017
comment
Хорошо.. человек только indexname. Я изменил его indexname, чтобы скрыть его фактическое имя. В реальном сценарии я везде использую только человека.   -  person Sushil    schedule 15.05.2017
comment
Тогда вы уверены в своих учетных данных имени пользователя/пароля?   -  person Val    schedule 15.05.2017
comment
Да... используя те же учетные данные, я регистрировал данные в ES, используя filebeat в качестве входных данных.   -  person Sushil    schedule 15.05.2017
comment
Можете ли вы удалить поле type во входных данных, так как это не тип отображения ES, а какое-то другое поле Logstash, не связанное с ES. Также вы можете запустить свой конвейер с флагом --debug и поделиться выводом журнала?   -  person Val    schedule 15.05.2017
comment
Удалено введенное поле и общий доступ к файлу журнала с включенной отладкой. Похоже, что logstash может подключаться к ES.   -  person Sushil    schedule 15.05.2017
comment
docs.google.com/document/d/   -  person Sushil    schedule 15.05.2017
comment
Какая у вас версия Logstash?   -  person Val    schedule 15.05.2017
comment
версия журнала: 5.4.0   -  person Sushil    schedule 15.05.2017
comment
docs.google.com/document/d/ Logstash cofig файл   -  person Sushil    schedule 15.05.2017
comment
Вероятно, вам нужно добавить ssl => true в конфигурацию ввода elasticsearch ;-)   -  person Val    schedule 15.05.2017


Ответы (1)


Поскольку ваш ES работает на HTTPS, вам нужно добавить ssl => true в конфигурацию ввода elasticsearch.

input {
   elasticsearch {
      hosts =>  ["hostname" ]
      index => 'indexname'        
      type => 'type'
      user => 'username'      
      password => 'password'
      docinfo => true
      ssl => true                                 <--- add this
      query => '{ "query": { "match": { "first_name": "mary" } }}'    
   }
}
person Val    schedule 15.05.2017
comment
Это дает следующую ошибку Ошибка: инициализация: имя или служба неизвестны Исключение: Faraday::ConnectionFailed Stack: org/jruby/ext/socket/RubyTCPSocket.java:129:in initialize' org/jruby/RubyIO.java:1197:in open' D:/Sushil/logstash-5.4.0/ поставщик/jruby/lib/ruby/1.9/net/http.rb:763:in connect' org/jruby/ext/timeout/Timeout.java:98:in timeout' D:/Sushil/logstash-5.4.0/vendor/jruby/lib/ruby/1.9/net/http.rb:763: в "подключиться" - person Sushil; 15.05.2017
comment
Где находится ca_file? Как получить путь - person Sushil; 15.05.2017
comment
Обязательно удалите схему https:// в параметре hosts. Работает лучше? - person Val; 15.05.2017
comment
Теперь он не выдает никаких ошибок, но также ничего не регистрирует в ES после использования поискового запроса. - person Sushil; 15.05.2017
comment
Теперь я могу войти в ES, но он постоянно регистрируется в моем личном индексе с журналами _type. Итак, предположим, что если ввести запрос на вход как запрос => '{ запрос: { совпадение: { first_name: mary}}}' на выходе он постоянно регистрируется в моем индексе для получения результатов Мэри, хотя я не запрашивал его. Я не могу понять, как работает logstash - person Sushil; 16.05.2017
comment
В вашем выводе вам нужно добавить document_type => "person" и он будет работать. - person Val; 16.05.2017
comment
Похоже, это ошибка github.com/logstash-plugins/logstash- input-elasticsearch/issues/ - person Sushil; 16.05.2017
comment
Эта проблема касается входного плагина, а не выходного. Вы получаете подобную ошибку? - person Val; 16.05.2017
comment
Да.. Я также получаю ту же ошибку. Какое может быть разрешение? - person Sushil; 16.05.2017
comment
Неясно, ранее вы сказали, что это работает, но не индексируется с правильным типом сопоставления. Что произошло с тех пор? - person Val; 16.05.2017
comment
Я думал, что это сработало, поскольку оно индексировалось на ES. Но потом я понял, что мой запрос постоянно регистрируется. Такая же проблема, как и эта. -always-gives-the-error-fai" title="logstash с результатами цикла ввода elasticsearch и всегда выдает ошибку fai"> stackoverflow.com/questions/43194114/ - person Sushil; 16.05.2017
comment
Попался, тогда вы можете либо понизить версию, либо ждать исправления :-) - person Val; 16.05.2017
comment
Понижение logstash кажется хорошим вариантом :) .. В любом случае спасибо за помощь - person Sushil; 16.05.2017
comment
Сейчас я пытаюсь подключить версию ES 5.2, так как версия 5.3 и выше не поддерживаются, но выдает ошибку ниже. Ошибка: нераспознанное сообщение SSL, открытое текстовое соединение? Моя конфигурация ввода ES {hosts =› [9c809727c1f161596b7ab1dd35feef58.us-east-1.aws.found.io:9200] index =› 'nehgs' user =› 'USER' password =› 'PASS' docinfo =› true ssl =› true query =› '{ query: { match: { first_name: mary } }}'} - person Sushil; 16.05.2017
comment
Поскольку вы используете порт 9200, вам нужно установить ssl в false - person Val; 16.05.2017
comment
Получение ошибки ниже после установки ssl на false Ошибка: Попытка отправить массовый запрос в elasticsearch, но Elasticsearch недоступен или недоступен - person Sushil; 16.05.2017
comment
Моя ошибка :) .. Мой выходной кластер использовал порт, отличный от 9200, и я установил для ssl значение false. Установка ssl на true устранила ошибку - person Sushil; 16.05.2017
comment
Давайте продолжим обсуждение в чате. - person Sushil; 16.05.2017