调用es的原生柱状图记录
ResponseJson responseJson = new ResponseJson();
// ip
String ip = "139.198.xxx.xx";
String userName = "";
String pwd = "";
// 端口
int port = 30756;
// 索引
String index = "k8s"
// 起始时间
long gte = 1648175453000;
// 结束时间
long lte = 1648176053234;
// es插入的时间字段 用来对比时间范围
String timeField = "@timestamp";
// 柱状图间隔时间 时间戳形式 60000 = 1min
long interval = 60000;
// 业务参数 keyWord containerNames
String keyWord = "log";
List<String> containerNames;
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost(ip, port, "http"))
);
SearchRequest request = new SearchRequest().indices(index);
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//条件构造(组合匹配条件)
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery(timeField);
log.info(gte + "->" + lte);
// 大于等于
rangeQuery.gte(gte);
// 小于等于
rangeQuery.lte(lte);
// 把查询条件添加到条件构造
boolQueryBuilder.filter(rangeQuery);
if (containerNames != null) {
boolQueryBuilder.must(QueryBuilders.termsQuery("kubernetes.container_name", containerNames));
}
if (keyWord != null) {
String keyWords = QueryParser.escape(logDTO.getKeyWord());
// 模糊查询
boolQueryBuilder.must(QueryBuilders.wildcardQuery("log", "*" + keyWords + "*"));
}
sourceBuilder.query(boolQueryBuilder);
sourceBuilder.aggregation(AggregationBuilders.histogram("@timestamp").field("@timestamp").interval(interval));
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
client.close();
Aggregations aggregations = response.getAggregations();
Map<String, Aggregation> asMap = aggregations.getAsMap();
String timestamp = JSONObject.toJSONString(asMap.get("@timestamp"));
Object buckets = JSON.parseObject(timestamp).get("buckets");
responseJson.setData(buckets);
return responseJson;