python做es的聚合统计和分页读取

通过python实现对es数据的聚合统计最后将数值写入excel文件

#!/usr/bin/python3
#-*- coding: utf-8 -*-

from elasticsearch import Elasticsearch
from openpyxl import load_workbook

es = Elasticsearch(hosts='http://localhost', port=9200, http_auth=('admin', 'admin'), timeout=60)
#es聚合查询数据
para = {
   "aggs": {
      "date": {
        "date_histogram": {
          "field" : "timestamp",
          "interval" : "month",
          "format" : "yyyy-MM-dd"
      },
      "aggs": {
        "ip":{
          "terms": {
            "field": "ip",
            "size":0
          },
          "aggs": {
          "aborad":{
            "terms": {
              "field": "geoip.country_code",
              "size":0
          }
      }
    }
}
}
}
}
}
###分页读取数据
queryData = es.search(index="risk_threaten*", doc_type="doc",scroll ='2m', body=para,size =100)
data = queryData['aggregations']['date']['buckets']
print(data)
sid = queryData['_scroll_id']
scroll_size = queryData['hits']['total']
###时间列表
date_list = []
ip_list = []
queryData = es.scroll(scroll_id=sid, scroll='2m')
#Update the scroll ID
sid = queryData['_scroll_id']
scroll_size = queryData['hits']['total']
wt = load_workbook("D:\\python\\es_risk\\threaten_month.xlsx")
sheet = wt.active
#sheet.cell(row=1, column=1, value="datetime")
#sheet.cell(row=1, column=2, value="")##读取数据
sheet.cell(row=1, column=5, value="ip_abroad_total")
row = 1
for ip_data in data:
    date = ip_data['key_as_string']
    print(date)
    total = ip_data['doc_count']
    row += 1
    ip_list=[]
    # sheet.cell(row=row, column=1, value=date); ###ip后面跟着城市
    for list_ip in ip_data['ip']['buckets']:
        dst_ip =list_ip['key']
        abroad = list_ip['aborad']
        for region in abroad['buckets']:
            if region['key'] != 'CN':
                ip_list.append(dst_ip)

    s = 0
    for ip in ip_list:
        s+=1
    print(s)
    sheet.cell(row=row, column=5, value=s);
    print(ip_list)
##保存文件
wt.save("D:\\python\\es_risk\\threaten_month.xlsx")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值