zoukankan      html  css  js  c++  java
  • es查询

    1.三级部门分应用统计PXX逻辑

    {
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "child3DepartmentId": "00065308"
              }
            },
            {
              "terms": {
                "serverUseType": [
                  "1",
                  "3"
                ]
              }
            },
            {
              "term": {
                "metric": "cpu.usage"
              }
            }
          ]
        }
      },
      "size": 0,
      "aggs": {
        "child2DepartmentIdgb": {
          "terms": {
            "field": "child2DepartmentId",
            "size": 100
          },
          "aggs": {
            "child3DepartmentIdgb": {
              "terms": {
                "field": "child3DepartmentId",
                "size": 100
              },
              "aggs": {
                "zones": {
                  "terms": {
                    "field": "projectId",
                    "size": 200
                  },
                  "aggs": {
                    "load_times": {
                      "percentiles": {
                        "field": "value",
                        "percents": [
                          100,
                          99.99,
                          99.9,
                          99.8,
                          99.7,
                          99,
                          98,
                          97,
                          96,
                          95,
                          94,
                          93,
                          92,
                          91,
                          90,
                          80,
                          70,
                          60,
                          50,
                          40,
                          30,
                          20,
                          10
                        ]
                      }
                    },
                    "extended_stats": {
                      "extended_stats": {
                        "field": "value"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    

    java代码

    public static Set<AppUtilization> fetchEsAppCpuAvgData(int weekOfYear, int year, String[] esIndexArray){
            LOG.info("Start Cpu Avg Process");
            Set<AppUtilization> set = Sets.newConcurrentHashSet();
            SearchRequestBuilder searchRequestBuilder = esClient.prepareSearch(esIndexArray).setSize(DEFAULT_QUERY_SIZE).setTypes(ES_TABLE_TYPE);
            QueryBuilder queryBuilder = QueryBuilders.boolQuery()
                    .filter(QueryBuilders.termQuery(ES_METRIC_COLUMN, DEFAULT_METRIC))
    //                .filter(QueryBuilders.termQuery(ES_ENV_FIELD, ES_ENV_PRODUCT))
                    .filter(QueryBuilders.termsQuery(ES_SERVER_USE_TYPE_COLUMN, SERVER_USE_TYPE_ARRAY));
            searchRequestBuilder.setQuery(queryBuilder);
            AggregationBuilder aggregation = AggregationBuilders
                    .terms(DEFAULT_ES_AGG_PROJECT_NAME)
                    .size(DEFAULT_ES_AGG_PROJECT_SIZE)
                    .field(ES_PROJECT_NAME_FIELD)
                    .order(Terms.Order.aggregation(DEFAULT_AVG_AGG_NAME, false))
                    .subAggregation(
                            AggregationBuilders.avg(DEFAULT_AVG_AGG_NAME).field(ES_DATA_VALUE_FIELD));
            searchRequestBuilder.addAggregation(aggregation);
            LOG.info("search : {}",searchRequestBuilder.toString());
            SearchResponse response = searchRequestBuilder.execute().actionGet();
            Terms projectNameTerms = response.getAggregations().get(DEFAULT_ES_AGG_PROJECT_NAME);
            projectNameTerms.getBuckets().parallelStream().forEach(entry -> {
                String projectName = entry.getKeyAsString();
                Avg avg = entry.getAggregations().get(DEFAULT_AVG_AGG_NAME);
                Double avgValue = avg.getValue();
                if (Double.isNaN(avg.getValue())){
                    LOG.error(projectName + " calculated AppUtilization ES Query Result is null");
                    return;
                }
                avgValue = DoubleUtils.getDouble4Decimal(avgValue);
                LOG.info("projectName : {} ,metric : {} , avgValue : {}",projectName,DEFAULT_METRIC,avgValue);
                set.add(new AppUtilization(projectName,avgValue, MonitorMetric.CPU_USAGE, StatisticalType.AVG,weekOfYear,year));
            });
            return set;
        }
    

    2.所有部门的pxx计算

    {
      "query": {
        "bool": {
          "must": [
            {
              "terms": {
                "child2DepartmentId": [
                  "00033132",
                  "00048471",
                  "00053749",
                  "00065244",
                  "00065253",
                  "00065259",
                  "00065265",
                  "00065272",
                  "00065280",
                  "00065285",
                  "00065303",
                  "00068776",
                  "00070152",
                  "00075235"
                ]
              }
            },
            {
              "terms": {
                "serverUseType": [
                  "1",
                  "3"
                ]
              }
            },
            {
              "term": {
                "metric": "cpu.usage"
              }
            }
          ]
        }
      },
      "size": 0,
      "aggs": {
        "child2DepartmentIdgb": {
          "terms": {
            "field": "child2DepartmentId",
            "size": 100
          },
          "aggs": {
            "child3DepartmentIdgb": {
              "terms": {
                "field": "child3DepartmentId",
                "size": 100
              },
              "aggs": {
                "zones": {
                  "terms": {
                    "field": "projectId",
                    "size": 5000
                  },
                  "aggs": {
                    "load_times": {
                      "percentiles": {
                        "field": "value",
                        "percents": [
                          100,
                          90,
                          80,
                          70,
                          60,
                          50,
                          40,
                          30,
                          20,
                          10
                        ]
                      }
                    },
                    "extended_stats": {
                      "extended_stats": {
                        "field": "value"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    

    3.计算部门的cpu均值

    {
      "size": 0,
      "query": {
        "bool": {
    	  "must" :     {},
          "filter": {
            "terms": {
    			"metric": [
    				"cpu.usage",
    				"cpu.busy"
    			]
    		}
          }
        }
      },
      "aggs": {
        "group_by_child2Department": {
          "terms": {
            "size":50,
            "field": "child2DepartmentId",
            "order": {
              "max_value": "desc"
            }
          },
          "aggs": {
            "max_value": {
              "max": {
                "field": "value"
              }
            }
          }
        }
      }
    }
    

    4.获取一段时间的平均值

    {
      "size": 0,
      "query": {
        "bool": {
          "must": {
            "match": {
              "metric": "load.5min"
            }
          },
          "filter": {
            "range": {
              "time": {
                "gt": 1529251200,
                "lt": 1529337599
              }
            }
          }
        }
      },
      "aggs": {
        "avg_value": {
          "avg": {
            "field": "value"
          }
        }
      }
    }
    

    5.java API 查询

    SearchRequestBuilder search = esTransportClient.prepareSearch(dateString).setSize(0).setTypes("monitor");
                QueryBuilder qb = boolQuery()
                        .must(matchQuery("metric", metric))
                        .filter(rangeQuery("time").gt(beginDateTime).lt(endDateTime));
                search.setQuery(qb);
                AggregationBuilder aggregation = AggregationBuilders
                        .terms("group_by_child2Department")
                        .size(50)
                        .field("child2DepartmentId")
                        .order(Terms.Order.aggregation("max_value", false))
                        .subAggregation(
                                AggregationBuilders.max("max_value").field("value"));
                search.addAggregation(aggregation);
                SearchResponse response = search.execute().actionGet();
                Terms endpointTerms = response.getAggregations().get("group_by_child2Department");
    //            List<CmdbAssetProject> listfromBeginToEnd = new ArrayList<CmdbAssetProject>();
                for (Terms.Bucket entry:
                        endpointTerms.getBuckets()) {
                    logger.debug("进入聚合结果分析:");
                    String child2DepartmentId = entry.getKeyAsString();
                    String child2Department = DepartmentMapCache.departmentMap.get(child2DepartmentId);
                    Max max = entry.getAggregations().get("max_value");
                    Double maxValue = max.getValue();
                    logger.debug("child2Department " + child2Department);
                    logger.debug("maxValue:" + maxValue);
                    // 调用通过ip查询资产信息的接口去查询出来部门和应用信息
    //            CmdbAssetProject cmdbAssetProject = new CmdbAssetProject();
                    CmdbAssetProject cmdbAssetProject = new CmdbAssetProject();
                    cmdbAssetProject.setValue(maxValue);
                    cmdbAssetProject.setDepartment(child2Department);
                    logger.debug(cmdbAssetProject);
    //                listfromBeginToEnd.add(cmdbAssetProject);
                    if (tmpMap.get(cmdbAssetProject.getDepartment()) == null){
                        List<Double> list = new ArrayList<Double>();
                        list.add(cmdbAssetProject.getValue());
                        tmpMap.put(cmdbAssetProject.getDepartment(),list);
                    }else{
                        List<Double> list = (List<Double>) tmpMap.get(cmdbAssetProject.getDepartment());
                        list.add(cmdbAssetProject.getValue());
                        tmpMap.put(cmdbAssetProject.getDepartment(),list);
                    }
    
                }
    

    6.获取load的top10数据

    {
        "size": 0,
        "query": {
            "match": {
                "metric": "load.5min"
            }
        },
        "aggs": {
            "group_by_endpoint": {
                "terms": {
                    "field": "endpoint",
                    "order": {
                        "max_value": "desc"
                    }
                },
                "aggs": {
                    "max_value": {
                        "max": {
                            "field": "value"
                        }
                    }
                }
            }
        }
    }
    

    7.获取某个监控项,某段时间内的平均值

    {
      "size": 0,
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "metric": "net.if.in.bytes"
              }
            },
            {
              "range": {
                "time": {
                  "gt": 1552838400,
                  "lt": 1553443199
                }
              }
            },
            {
              "term": {
                "endpoint": "10.175.9.235"
              }
            }
          ]
        }
      },
      "aggs": {
        "avg_value": {
          "avg": {
            "field": "value"
          }
        }
      }
    }
    

    8.四级group by获取平均值

    {
      "size": 0,
      "query": {
        "bool": {
          "must": {},
          "filter": [
            {
              "terms": {
                "metric": [
                  "cpu.usage",
                  "mem.memoryused.percent",
                  "disk.root.used.percent",
                  "disk.export.used.percent"
                ]
              }
            },
            {
              "range": {
                "time": {
                  "gt": "1623202206",
                  "lt": "1623202209"
                }
              }
            }
          ]
        }
      },
      "aggs": {
        "group_by_projectName": {
          "terms": {
            "size": 10000,
            "field": "projectName"
          },
          "aggs": {
            "group_by_metric": {
              "terms": {
                "field": "metric",
                "size": 1000
              },
              "aggs": {
                "group_by_environment": {
                  "terms": {
                    "field": "environmentType",
                    "size": 10
                  },
                  "aggs": {
                    "group_by_usetype": {
                      "terms": {
                        "field": "useType",
                        "size": 2
                      },
                      "aggs": {
                        "avg_value": {
                          "avg": {
                            "field": "value"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    

    9.多级匹配,一级聚合

    {
      "size": 0,
      "query": {
        "bool": {
          "must": {},
          "filter": [
            {
              "terms": {
                "metric": [
                  "disk.root.used.percent",
                  "disk.export.used.percent"
                ]
              }
            },
            {
              "terms": {
                "environmentType": [
                  "PRODUCT",
                  "PREPARE_PR"
                ]
              }
            },
            {
              "terms": {
                "useType": [
                  "APP"
                ]
              }
            },
            {
              "range": {
                "time": {
                  "gt": "1623202206",
                  "lt": "1623202209"
                }
              }
            }
          ]
        }
      },
      "aggs": {
        "group_by_projectName": {
          "terms": {
            "size": 10000,
            "field": "projectName"
          },
          "aggs": {
            "avg_value": {
              "avg": {
                "field": "value"
              }
            }
          }
        }
      }
    }
    

    10.均值,pxx,平方差一起运算

    
    {
        "query":{
            "bool":{
                "must":[
                    {
                        "terms":{
                            "endpoint":[
                                "11.93.4.178"
                            ]
                        }
                    },
                    {
                        "term":{
                            "metric":"cpu.usage"
                        }
                    }
                ]
            }
        },
        "size":0,
        "aggs":{
            "child2DepartmentIdgb":{
                "terms":{
                    "field":"child2DepartmentId",
                    "size":100
                },
                "aggs":{
                    "child3DepartmentIdgb":{
                        "terms":{
                            "field":"child3DepartmentId",
                            "size":100
                        },
                        "aggs":{
                            "zones":{
                                "terms":{
                                    "field":"projectId",
                                    "size":5000
                                },
                                "aggs":{
                                    "load_times":{
                                        "percentiles":{
                                            "field":"value",
                                            "percents":[
                                                100,
                                                90,
                                                80,
                                                70,
                                                60,
                                                50,
                                                40,
                                                30,
                                                20,
                                                10
                                            ]
                                        }
                                    },
                                    "stats_value":{
                                        "stats":{
                                            "field":"value"
                                        }
                                    },
                                    "extended_stats":{
                                        "extended_stats":{
                                            "field":"value"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
    原创:做时间的朋友
  • 相关阅读:
    Linux下的tar压缩解压缩命令详解
    python学习笔记-day9-2【面向对象】
    python学习笔记-day9-1【发送邮件模块 yagmail】
    python学习笔记-day8-4-【python 内置函数补充:zip,map,filter】
    python学习笔记-day8-3-【python 网络请求及requests模块】
    python学习笔记-day8-2-【python 异常处理 try except】
    python学习笔记-day8-1-【python flask接口开发】
    day9-Python学习笔记(二十一)单元测试
    day9-Python学习笔记(二十)数据库备份,修改父类的方法
    day8-Python学习笔记(十八)面向对象,self,私有,属性方法
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/14519513.html
Copyright © 2011-2022 走看看