Logstash拉服务器日期作为配置变量

时间:2019-06-03 12:50:51

标签: logstash

作为我的logstash配置的一部分,我想从服务器中提取当前日期,该日期用作服务器使用http_poller进行API查询的一部分。

有没有办法做到这一点?我已经尝试了一些类似的方法:

$(date +%d%m%y%H%M%S)

但是不会被捡起来。这是配置:

input{
 http_poller {
#proxy => { host => "" }
 proxy => ""
 urls => {
 q1 => {
 method => post
 url => ""
 headers => {.... }
 body => '{
 "rsid": "....",
 "globalFilters": [
 {
 "type": "dateRange",
 "dateRange": "%{+ddMMyyHHmmss}"
 }
 ................
 }'
 }
 }
 request_timeout => 60
 # Supports "cron", "every", "at" and "in" schedules by rufus scheduler
 schedule => { cron => "* * * * * UTC"}
 codec => "json"
 metadata_target => "http_poller_metadata"
 }
 }
 output {
 elasticsearch {
 hosts => ["xxxx"]
 index => "xxxx"
 }
 }

1 个答案:

答案 0 :(得分:0)

我们无法在输入..中做任何类似于变量声明的事情。 一种解决方法是用日期定义环境变量。在Windows上(powershell脚本)-

$env:startDate=(Get-Date).AddDays(-1).ToString('yyyy-MM-dd')
$env:endDate=(Get-Date).AddDays(0).ToString('yyyy-MM-dd')

然后,我们可以在url中将这些变量用作$ {startDate}。 但是,一旦启动logstash,日期将保持不变。 猜猜我们需要每天重新启动logstash脚本,以使其采用date的新值。

另一种替代方法是编写代理Web服务,该服务可能使用Java或其他语言,其中可以使用变量声明Java类,然后调用实际的Web服务并将响应返回到logstash脚本。

自2016年以来,此问题一直在logstash中待解决...不确定为什么无法解决该问题!