最近有个日志收集监控的项目采用的技术栈是ELK+JAVA+Spring,客户端语言使用的是Java,以后有机会的话可以试一下JavaScript+Nodejs的方式,非常轻量级的组合,只不过不太适合服务化的工程,Kibana充当可视化层,功能虽然非常强大和灵活,但是需要业务人员懂Lucene的查询语法和Kibana的Dashboard仪表盘自定义功能才能玩的转,所以Kibana面向专业的开发人员和运维人员比较良好,但面向业务人员则稍微有点难度,我们这边就使用Java进行二次开发,然后前端定义几个业务人员关注的图表,然后把后端查询的数据,按照一定的维度放进去即可。
基础环境:
(1)ElasticSearch1.7.2
(2)Logstash2.2.2
(3)Kibana4.1.2
(3)JDK7
(4)Spring4.2
使用到的技术点:
(1)ElasticSearch的查询
(2)ElasticSearch的过滤
(3)ElasticSearch的日期聚合
(4)ElasticSearch的Terms聚合
(5)ElasticSearch的多级分组
(6)ElasticSearch+Logstash的时区问题
直接上代码:
- package cn.bizbook.product.elk.dao.impl;
- import cn.bizbook.product.elk.config.ESConf;
- import cn.bizbook.product.elk.dao.ESDao;
- import cn.bizbook.product.elk.utils.TimeTools;
- import cn.bizbook.product.elk.vo.count.Condition;
- import cn.bizbook.product.elk.vo.count.CountType;
- import cn.bizbook.product.elk.vo.count.search.GroupCount;
- import cn.bizbook.product.elk.vo.count.search.MonitorCount;
- import org.apache.commons.lang.StringUtils;
- import org.apache.lucene.queryparser.classic.QueryParserBase;
- import org.elasticsearch.action.search.SearchRequestBuilder;
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.client.Client;
- import org.elasticsearch.index.query.FilterBuilders;
- import org.elasticsearch.index.query.QueryBuilder;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.index.query.QueryStringQueryBuilder;
- import org.elasticsearch.search.aggregations.AggregationBuilders;
- import org.elasticsearch.search.aggregations.Aggregations;
- import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogram;
- import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramBuilder;
- import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
- import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Repository;
- import javax.annotation.Resource;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * Created by qindongliang on 2016/4/6.
- */
- @Repository("esDaoImpl")
- public class ESDaoImpl