logstash http_poller 第一个 URL 请求的响应应该输入到第二个 URL 的请求参数

Posted

技术标签:

【中文标题】logstash http_poller 第一个 URL 请求的响应应该输入到第二个 URL 的请求参数【英文标题】:logstash http_poller first URL request's response should be input to second URL's request param 【发布时间】:2016-09-23 00:18:45 【问题描述】:

我有两个 URL(出于安全考虑,我将使用 dummy 进行解释)

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

当您点击点“a”中提到的 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 应该一个接一个地执行,即点 'a' url 应该首先执行,点 'b' url 应该在收到新的令牌后执行。

请提出建议。

【问题讨论】:

您需要这个调用序列只运行一次还是重复运行? 我需要间隔调用这些 url。让它每 60 分钟一次 【参考方案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 的 Shell 脚本:

#!/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

上面的脚本可以使用 crontab(或类似的)在 cron 上设置,那里有 plenty of examples 说明如何实现这一点。

那么logstash的配置就可以很简单了。它只需要tail 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"
    

【讨论】:

感谢您的解决方案 Val,但我将如何捕获第二个 url 调用的输出。 这将被记录为一个事件,然后您可以从中提取内容。 这是否意味着我需要将其记录在一个文件中并读取它并将其推送到弹性搜索中。我们在单次通话中没有其他方法吗?任何示例都会对我有很大帮助。谢谢。 你还没有真正解释你想用 API 响应做什么。请用任何其他有用的信息更新您的问题,我会修改我的答案。 Val,你有什么突破吗...任何建议都会有所帮助!

以上是关于logstash http_poller 第一个 URL 请求的响应应该输入到第二个 URL 的请求参数的主要内容,如果未能解决你的问题,请参考以下文章

误操作引起的Logstash重复收集

大而全面|Logstash技术入门

logstash无法使用conf启动

logstash日志采集工具的安装部署

ELK日志平台----解耦配置文件

Logstash在未来编写Elasticsearch索引