作为我的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"
}
}
答案 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中待解决...不确定为什么无法解决该问题!