logstash http_poller Ответ первого запроса URL должен быть введен в параметр запроса второго URL

У меня есть два URL-адреса (из соображений безопасности я объясню с помощью пустышки)

 a> https://xyz.company.com/ui/api/token
 b> https://xyz.company.com/request/transaction?date=2016-01-21&token=<tokeninfo>

Когда вы нажмете URL-адрес, указанный в пункте «а», он сгенерирует токен, пусть это будет строка из 16 символов.

Затем этот токен следует использовать при выполнении второго запроса точки «b» в параметре токена.


Обновлено

 The second url response is important to me i.e is a JSON response, I need       
 to filter the json data and extract required data and output it to standard 
 output and elastic search.    

есть ли способ сделать это в logstash с помощью плагина «http_poller» или любых других плагинов.

Примечание: эти URL-адреса запроса должны выполняться один за другим, т.е. URL-адрес точки «a» должен выполняться первым, а URL-адрес точки «b» должен выполняться следующим после получения нового токена.

Пожалуйста, предложите.


person Amit Vikram    schedule 25.05.2016    source источник
comment
Вам нужно, чтобы эта последовательность вызовов выполнялась только один раз или многократно?   -  person Val    schedule 25.05.2016
comment
Мне нужно вызывать эти URL-адреса с интервалами. пусть будет каждые 60 минут   -  person Amit Vikram    schedule 25.05.2016


Ответы (1)


Да, это возможно при сочетании входа http_poller и выхода http.

Вот конфиг, который я придумал:

input {
   # 1. trigger new token requests every hour
   http_poller {
     urls => {
       token => "https://xyz.company.com/ui/api/token"
     }
     interval => 3600
     add_field => {"token" => "%{message}"}
   }
}
filter {
}
output {
   # 2. call the API
   http {
     http_method => "get"
     url => "https://xyz.company.com/request/transaction?date=2016-01-21&token=%{token}"
   }
}

ОБНОВЛЕНИЕ

Если вы хотите получить содержимое вызова API и сохранить его в ES, вам потребуется гибридное решение. Вам нужно настроить cron, который будет вызывать скрипт, который запускает два HTTP-вызова и сохраняет результаты в файле, а затем вы можете позволить logstash отслеживать этот файл и пересылать результаты в ES.

Сценарий оболочки для включения cron:

#!/bin/sh

# 1. Get the token
TOKEN=$(curl -s -XGET https://xyz.company.com/ui/api/token)

# 2. Call the API with the token and append JSON to file
curl -s -XGET "https://xyz.company.com/request/transaction?date=2016-01-21&token=$TOKEN" >> api_calls.log

Приведенный выше скрипт можно установить в cron с помощью crontab (или аналогичного), есть множество примеров того, как этого добиться.

Тогда конфигурация logstash может быть очень простой. Просто нужно сохранить файл api_calls.log и отправить документ в ES.

input {
    file {
        path => "api_calls.log"
        start_position => "beginning"
    }
}
filter {
    json {
        source => "message"
    }
}
output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "my_index"
        document_type" => "my_type"
    }
    stdout {
        codec => "rubydebug"
    }
}
person Val    schedule 25.05.2016
comment
Спасибо за решение, Вал, но как я поймаю вывод второго вызова URL. - person Amit Vikram; 25.05.2016
comment
Это будет зарегистрировано как событие, из которого вы затем сможете извлечь содержимое. - person Val; 25.05.2016
comment
Означает ли это, что мне нужно зарегистрировать это в файле, прочитать его и вставить в elasticsearch. Разве у нас нет другого подхода в одиночном вызове? любой образец примера мне очень поможет. Спасибо. - person Amit Vikram; 25.05.2016
comment
Вы действительно не объяснили, что вы хотите сделать с ответом API. Пожалуйста, обновите свой вопрос, указав любую дополнительную полезную информацию, и я исправлю свой ответ. - person Val; 25.05.2016
comment
Вэл, у тебя есть какой-нибудь прорыв... любое предложение поможет! - person Amit Vikram; 26.05.2016
comment
У меня есть решение, но оно включает в себя размещение сценария оболочки в cron в дополнение к некоторой конфигурации logstash. Вы открыты для этого? - person Val; 27.05.2016
comment
если у logstash есть ограничение, и только logstash не может решить задачу. Да, я могу попробовать сценарий оболочки или python. - person Amit Vikram; 27.05.2016
comment
не могли бы вы указать подход к решению - person Amit Vikram; 27.05.2016