我需要每 4 分钟从 Elastic 数据库中获取数据,但我在如何修改下面提到的查询中的 @timestamp 变量方面遇到了问题,以便我可以推送适当的查询以从 URL 中获取数据。 我使用 Python 作为语言。
curl :
curl -XGET "URL" -H 'Content-Type: application/json' -k -u u_name:XXX -d'
{
"query": {
"query_string": {
"query": "@timestamp:[2018-06-29T06:47:40.000Z TO *]"
}
},
"size": 1000
}
'|json_pp )
我可以使用 CRON 每 7 分钟运行一次脚本,但我不明白如何修改上述查询中的 @timestamp 变量,以便我可以获得自上次运行以来的所有新数据。
任何输入都是有值(value)的。
最佳答案
您可以在 Bash 中使用命令 date
来格式化时间戳。
当前日期和时间
date +%Y-%m-%dT%H:%M:%S
# 2018-07-14T03:00:58
负 7 分钟
date --date '-7 min' +%Y-%m-%dT%H:%M:%S
# 2018-07-14T02:53:58
使用 `` (ticks/backticks) 你可以尝试把它放在 Bash 的其他命令中(但你很多人需要使用 ""
而不是 ' '
-d
)
curl -XGET "URL" -H 'Content-Type: application/json' -k -u u_name:XXX -d'
{
"query": {
"query_string": {
"query": "@timestamp:[`date --date \'-7 min\' +%Y-%m-%dT%H:%M:%S`.000Z TO *]"
}
},
"size": 1000
}
'|json_pp )
如果您需要它作为 Python 代码,那么您可以使用页面 https://curl.trillworks.com/将 curl
转换为 requests
,稍后您可以进行修改。
import requests
import datetime
import pprint # pretty print
#dt = datetime.datetime(2018, 6, 29, 6, 47, 40)
dt = datetime.datetime.now()
td_7mins = datetime.timedelta(minutes=7)
dt = dt - td_7mins # now - 7 minutes
#timestamp = "@timestamp:[{}.000Z TO *]".format(now.strftime("%Y-%m-%dT%H:%M:%S"))
timestamp = dt.strftime("@timestamp:[%Y-%m-%dT%H:%M:%S.000Z TO *]")
data = {
"query": {
"query_string": {
"query": timestamp
}
},
"size": 1000
}
print(data)
url = "https://httpbin.org/get" # good for tests
r = requests.get(url, json=data, headers=headers, verify=False, auth=('u_name', 'XXX'))
pprint.pprint(r.json())
关于python - 如何使用python定期从弹性数据库中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51331994/