案例1
在es查询中按照多列分组的时候 分组列的count值会越来越少 es默认隐藏了没有被分组匹配到的记录数 需要在查询的时候开启
2.开启显示没有被分组成功的记录
分组成功的记录加上分组missing的记录数就等于总的记录数 26932+2666=29598
3.当实际的总数和es分组统计的条数对不上的时候 需要考虑是不是分组列的值有可能被丢失了 这个时候可以开启显示丢失
4.查看es的原始日志内容确实有10001条记录不存在CHANNEL字段
实例统计
#!/usr/bin/env python # -*- coding: utf-8 -*- from elasticsearch6 import Elasticsearch import datetime import time import re es = Elasticsearch("http://10.000.142.88:9200") #每小时定时执行统计前一个小时的数据 def formartTime(startTime): try: startTime = datetime.datetime.strptime(startTime, '%Y-%m-%dT%H:%M:%S.%f') except Exception as e: startTime = datetime.datetime.strptime(startTime, '%Y-%m-%d %H:%M:%S') startTime = startTime.strftime('%Y-%m-%d %H:%M:%S.%f')[:-13] return startTime+":00:00" def strtime_to_datetime(timestr): """将字符串格式的时间 (含毫秒) 转为 datetime 格式 :param timestr: {str}'2016-02-25 20:21:04.242' :return: {datetime}2016-02-25 20:21:04.242000 """ local_datetime = datetime.datetime.strptime(timestr, "%Y-%m-%d %H:%M:%S.%f") return local_datetime def datetime_to_timestamp(datetime_obj): """将本地(local) datetime 格式的时间 (含毫秒) 转为毫秒时间戳 :param datetime_obj: {datetime}2016-02-25 20:21:04.242000 :return: 13 位的毫秒时间戳 1456402864242 """ local_timestamp = int(time.mktime(datetime_obj.timetuple()) * 1000.0 + datetime_obj.microsecond / 1000.0) return local_timestamp def strtime_to_timestamp(local_timestr): """将本地时间 (字符串格式,含毫秒) 转为 13 位整数的毫秒时间戳 :param local_timestr: {str}'2016-02-25 20:21:04.242' :return: 1456402864242 """ local_datetime = strtime_to_datetime(local_timestr) timestamp = datetime_to_timestamp(local_datetime) return timestamp today=datetime.date.today() tnow=datetime.datetime.now() startTime=(datetime.datetime.now()+datetime.timedelta(hours=-3)).replace(minute=0,second=0).strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] endTime=(datetime.datetime.now()+datetime.timedelta(hours=-3)).replace(minute=59,second=59).strftime("%Y-%m-%d %H:%M:%S.%f")[:-3] stime=str(strtime_to_timestamp(startTime))[:-3]+"000" etime=str(strtime_to_timestamp(endTime))[:-3]+"999" def getindex(): if tnow.hour>2: indexname=today.strftime("%Y-%m-%d") else: indexname=(tnow+datetime.timedelta(days=-1)).strftime("%Y-%m-%d") return indexname indexname="sage-send-"+str(today) findexname="as*"+getindex() body={"aggs":{"2":{"terms":{"field":"APP_ID","size":5000,"order":{"_count":"desc"}},"aggs":{"3":{"terms":{"field":"CHANNEL","size":5000,"order":{"_count":"desc"}},"aggs":{"4":{"terms":{"field":"CHANNEL_ID","size":5000,"order":{"_count":"desc"}},"aggs":{"5":{"terms":{"field":"SWJG_DM","size":5000,"order":{"_count":"desc"}},"aggs":{"6":{"terms":{"field":"MESSAGE_TYPE","size":5000,"order":{"_count":"desc"}},"aggs":{"7":{"date_histogram":{"field":"mydate","interval":"1h","time_zone":"Asia/Shanghai","min_doc_count":1}}}}}}}}}}}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":[{"field":"@timestamp","format":"date_time"},{"field":"mydate","format":"date_time"}],"query":{"bool":{"must":[{"match_phrase":{"metricsName":{"query":"消息发送量统计"}}},{"match_all":{}},{"range":{"mydate":{"gte":stime,"lte":etime,"format":"epoch_millis"}}}],"filter":[],"should":[],"must_not":[]}},"timeout":"30000ms"} if es.indices.exists(index=findexname): res = es.search(body=body,index=findexname) outlist=[] dnow=datetime.datetime.now().strftime('%Y-%m-%d %H')+":00:00" for i2 in res["aggregations"]["2"]["buckets"]: for i3 in i2["3"]["buckets"]: for i4 in i3["4"]["buckets"]: for i5 in i4["5"]["buckets"]: for i6 in i5["6"]["buckets"]: for i7 in i6["7"]["buckets"]: timestr = i7["key_as_string"][:-6] newtime = formartTime(timestr) outlist.append({"appId":i2["key"],"count":i7["doc_count"],"channel":i3["key"],"channelId":i4["key"],"swjgDm":i5["key"],"messageType":i6["key"],"creatTime":newtime,"statisticalTime":dnow}) if es.indices.exists(index=indexname): pass else: es.indices.create(index=indexname) for data in outlist: res = es.index(index=indexname, doc_type="doc", body=data)
discover面板
如何查看指定索引名称的创建时间
1.命令行查询
curl -XGET http://192.168.80.10:9200/zhouls/_settings?pretty
{
"zhouls" : {
"settings" : {
"index" : {
"creation_date" : "1488203759467", //表示索引的创建时间
"uuid" : "Sppm-db_Qm-OHptOC7vznw",
"number_of_replicas" : "1",
"number_of_shards" : "5",
"version" : {
"created" : "2040399"
}
}
2.通过kibana查看索引的创建时间