#!/usr/bin/python env # -*- coding: utf-8 -*- # Author:cc # date: 2020/1/9 import datetime import time from elasticsearch import Elasticsearch import logging import sys from collections import Counter import pymysql logger = logging.getLogger("elasticsearch") logging.basicConfig(filename="/Users/panbiao/logging.txt", level=logging.INFO, format='{"time":"%(asctime)s","script":"%(name)s","thread":"%(thread)d",' '"threadName":"%(threadName)s","loglevel":"%(levelname)s"} - %(message)s') class Search_es: def __init__(self): """ 初始化实例变量 """ self.search = search self.gte = gte self.lte = lte self.index = index self.host = host self.user = user self.passwd = passwd self.port = port self.es_data = {} self.es_data_servuceId = [] self.es_data_servuceId_sort = [] def Get_es(self): """ 提交查询参数,返回结果 :return: es_data """ es = Elasticsearch([self.host], http_auth=(self.user, self.passwd), port=self.port ) para = { "_source": "serviceId" # "_source":"field1, field2,field3..." } query = { "size": 10000, "_source": { "excludes": [] }, "docvalue_fields": [ "@timestamp" ], "query": { "bool": { "must": [ { "query_string": { "query": self.search, "analyze_wildcard": "true", "default_field": "*" } }, { "range": { "@timestamp": { "gte": self.gte, "lte": self.lte, "format": "epoch_millis" } } } ], "filter": [], "should": [], "must_not": [] } } } try: logger.info("开始查询") self.es_data = es.search(index=self.index, body=query, params=para); logger.info("开始统计") if self.es_data["timed_out"] == False: # logger.info(self.es_data) # print(self.es_data) # logger.info(self.es_data["hits"]["hits"]) logger.info(self.es_data["hits"]["total"]) for serviceId in self.es_data["hits"]["hits"]: self.es_data_servuceId.append(serviceId["_source"]["serviceId"]) logger.info(len(self.es_data_servuceId)) self.es_data_servuceId_sort = sorted(Counter(self.es_data_servuceId).items(), key=lambda x: x[1], reverse=True) logger.info("计算时间") for i in self.es_data_servuceId_sort: print('{0} {1}'.format(i[0], i[1])); #logger.info(sorted(self.es_data_servuceId)) logger.info("打印时间") # logger.info(self.es_data_servuceId) return self.es_data["hits"]["total"] else: logger.error("{0}{1}".format("timed_out:",self.es_data["timed_out"])) sys.exit(1) except Exception as e: logger.error(f"error:{e}", exc_info=True, stack_info=True) if __name__ == '__main__': search = "hostname:"cc-k8s01" AND timeDiff_int:[0 TO 1000] AND type:"*-access"" # gte = int(time.mktime(time.strptime(str(datetime.date.today() - datetime.timedelta(minutes=30)), '%Y-%m-%d'))) * 1000 gte = int(time.mktime((datetime.datetime.now() - datetime.timedelta(minutes=30)).timetuple())) * 1000 # now_time = datetime.datetime.now() # # 1小时前 # t2 = (now_time - datetime.timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S") # # 转为秒级时间戳 # ts2 = time.mktime(time.strptime(t2, '%Y-%m-%d %H:%M:%S')) # # 转为毫秒级 # gte = int(str(ts2 * 1000).split(".")[0]) lte = int(round(time.time() * 1000)) index = "logstash-xxx-*" host = "http://xxx" user = "xxx" passwd = "xxx" port = "9200" Search_es_1 = Search_es() print(Search_es_1.Get_es())