如何使用python定期从Elastic Database中获取数据?

时间:2018-07-13 19:52:29

标签: python json linux mongodb timestamp

我需要每4分钟从Elastic数据库中获取数据,但是我在如何修改下面提到的查询中的@timestamp变量时遇到了问题,以便我可以推送适当的查询以从URL中获取数据。 我正在使用Python作为语言。

卷曲:

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变量,以便可以获取自上次运行以来的所有新数据。

任何投入都是有价值的。

1 个答案:

答案 0 :(得分:0)

您可以在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

使用``(滴答/反引号),您可以尝试将其放在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())