调用 es API 获取柱状图

调用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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值