在我们使用 Logstash 的时候,我们有时有没有想到去使用 REST 调用请求另外一个微服务呢?这样我们可以得到更多的数据了。在 Elastic 的官方发布中,我们可以在地址 https://www.elastic.co/guide/en/logstash/current/filter-plugins.html 找到目前所有的过滤器。在这里面有一个叫做 http 的过滤器。
在今天的文章中,我将使用一个例子来展示如何使用这个 http 的过滤器。
我将使用如下的 REST API 接口来做展示:
http://api.map.baidu.com/telematics/v3/weather?location=beijing&output=json&ak=DdzwVcsGMoYpeg5xQlAFrXQt
如上所示,它是一个百度天气的接口。在上面我们把 beijing 换成其他的城市,我们就可以得到那个城市的天气情况。
根据以上的接口,我们创建如下的 Logstash 的配置文件:
http.conf
input {
generator {
message => "beijing"
count => 1
}
}
filter {
http {
body_format => "json"
follow_redirects => false
url => "http://api.map.baidu.com/telematics/v3/weather?location=%{[message]}&output=json&ak=DdzwVcsGMoYpeg5xQlAFrXQt"
verb => "GET"
headers => [ "Content-Type", "application/json" ]
target_body => "weather"
}
}
output {
stdout {
codec => rubydebug
}
}
在上面,我们使用 generator 来生产一个事件。我们使用 http 过滤器来发送请求。
使用 Logstash 来运行上面的配置文件:
./bin/logstash -f http.conf
显示的结果是:
我们接下来可以使用任何其它的 filter 来对这个数据做更进一步的加工。这里就不再详述了。
另外,在社区里,我也看到了一个类似功能的插件 https://github.com/lucashenning/logstash-filter-rest。它也可以完成类似的工作。如果你想试一下的话,请按照上面的步骤进行操作,由于这个插件不是来自 Elastic 的,你需要进行单独的安装。