zoukankan      html  css  js  c++  java
  • springboot集成elk 一: springboot + Elasticsearch

    1.ELK介绍

    1> Elasticsearch是实时全文搜索和分析引擎,

    提供搜集、分析、存储数据三大功能;

    是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。

    2> Logstash是一个用来搜集、分析、过滤日志的工具。

    它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。

    它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

    3>   Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch

    指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据

    下载Elasticsearch 、Kibana、Logstash

     

    2.ELK安装

    https://www.elastic.co/cn/downloads/

     

     

     

     

    2.1启动Elasticsearch

    进入bin目录cd elasticsearch / bin 执行.elasticsearch

     

    可以修改集群或节点名称。在启动 Elasticsearch 时从命令行完成,

    ./elasticsearch -Ecluster.name = my_cluster_name -Enode.name = my_node_name

     

    测试:http://localhost:9200/

     

     

     

    备注:关闭Elasticsearch 快捷键ctrl+c,然后输入y

     

    2.2 启动kibana

    修改配置 config/kibana.yml

     

     

     

     

    进入bin目录 cd kibanain 执行kibana

    http://localhost:5601

     

     

     

    备注:关闭kibana快捷键ctrl+c,然后输入y

     

     

    3.springboot + Elasticsearch

    注意:springboot集成elasticsearch时,版本上必须一致才行

    例如 我的springboot使用的时1.5.9版本,因此下载elasticsearch2.0  logstash-2.0.0 kibana4.2.0进行使用才行。

     

    SpringBoot和Elasticsearch 之间对应版本的关系。

     

    Spring Boot Version (x)Spring Data Elasticsearch Version (y)Elasticsearch Version (z)
    x <= 1.3.5 y <= 1.3.4 z <= 1.7.2*
    x >= 1.4.x 2.0.0 <=y < 5.0.0** 2.0.0 <= z < 5.0.0**

    引入依赖:

    <dependency>
    
          <groupId>org.springframework.boot</groupId>
    
          <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    
    </dependency>

     

    添加配置:

    ##es地址
    
    spring.data.elasticsearch.cluster-nodes = 127.0.0.1:9300

     

    实体类:

    @Document(indexName = "test",type = "goods")
    
    //indexName索引名称 可以理解为数据库名 必须为小写 不然会报org.elasticsearch.indices.InvalidIndexNameException异常
    
    //type类型 可以理解为表名
    
    public class GoodsInfo implements Serializable {
    
        private static final long serialVersionUID = -7682211945335253642L;
    
        private Long id;
    
        private String name;
    
        private String description;
    
     
    
        public Long getId() {
    
            return id;
    
        }
    
     
    
        public void setId(Long id) {
    
            this.id = id;
    
        }
    
     
    
        public String getName() {
    
            return name;
    
        }
    
     
    
        public void setName(String name) {
    
            this.name = name;
    
        }
    
     
    
        public String getDescription() {
    
            return description;
    
        }
    
     
    
        public void setDescription(String description) {
    
            this.description = description;
    
        }
    
     
    
        public GoodsInfo(Long id, String name, String description) {
    
            this.id = id;
    
            this.name = name;
    
            this.description = description;
    
        }
    
     
    
        public GoodsInfo() {
    
        }
    
    }


    DAO: 

    创建GoodsRepository,继承ElasticsearchRepository,代码如下:

     

    import com.lolaage.system.model.GoodsInfo;
    import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
    import org.springframework.stereotype.Component;
    
    @Component
    public interface GoodsDao extends ElasticsearchRepository<GoodsInfo,Long> {
    }


    最后新建一个controller进行测试,包含简单的增删改查

    @RequestMapping("/goods")
    
    @RestController
    
    public class GoodsController {
    
     
    
        @Autowired
    
        private GoodsDao goodsDao;
    
     
    
        //http://localhost:8888/save
    
        @GetMapping("/save")
    
        public String save(){
    
            GoodsInfo goodsInfo = new GoodsInfo(123l,
    
                    "商品"+123,"这是一个测试商品");
    
            goodsDao.save(goodsInfo);
    
            return "success";
    
        }
    
     
    
        //http://localhost:8888/delete?id=1525415333329
    
        @GetMapping("/delete")
    
        public String delete(long id){
    
            goodsDao.delete(id);
    
            return "success";
    
        }
    
     
    
        //http://localhost:8888/update?id=1525417362754&name=修改&description=修改
    
        @GetMapping("/update")
    
        public String update(long id,String name,String description){
    
            GoodsInfo goodsInfo = new GoodsInfo(id,
    
                    name,description);
    
            goodsDao.save(goodsInfo);
    
            return "success";
    
        }
    
     
    
        //http://localhost:8888/getOne?id=1525417362754
    
        @GetMapping("/getOne")
    
        public GoodsInfo getOne(long id){
    
            GoodsInfo goodsInfo = goodsDao.findOne(id);
    
            return goodsInfo;
    
        }
    
     
    
     
    
        //每页数量
    
        private Integer PAGESIZE=10;
    
     
    
        //http://localhost:8888/getGoodsList?query=商品
    
        //http://localhost:8888/getGoodsList?query=商品&pageNumber=1
    
        //根据关键字"商品"去查询列表,name或者description包含的都查询
    
        @GetMapping("/getGoodsList")
    
        public List<GoodsInfo> getList(Integer pageNumber, String query){
    
            if(pageNumber==null) pageNumber = 0;
    
            //es搜索默认第一页页码是0
    
            SearchQuery searchQuery=getEntitySearchQuery(pageNumber,PAGESIZE,query);
    
            Page<GoodsInfo> goodsPage = goodsDao.search(searchQuery);
    
            return goodsPage.getContent();
    
        }
    
     
    
     
    
        private SearchQuery getEntitySearchQuery(int pageNumber, int pageSize, String searchContent) {
    
            FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery()
    
                    .add(QueryBuilders.matchPhraseQuery("name", searchContent),
    
                            ScoreFunctionBuilders.weightFactorFunction(100))
    
                    .add(QueryBuilders.matchPhraseQuery("description", searchContent),
    
                            ScoreFunctionBuilders.weightFactorFunction(100))
    
                    //设置权重分 求和模式
    
                    .scoreMode("sum")
    
                    //设置权重分最低分
    
                    .setMinScore(10);
    
     
    
            // 设置分页
    
            Pageable pageable = new PageRequest(pageNumber, pageSize);
    
            return new NativeSearchQueryBuilder()
    
                    .withPageable(pageable)
    
                    .withQuery(functionScoreQueryBuilder).build();
    
        }
    
     
    
    }


      

    测试

    添加数据:http://localhost:8093/goods/save

     

     

     

    查询数据:http://localhost:8093/goods/getOne?id=123

     

     

     

     

    在kibana上进行查看elasticsearch中的数据

     

    根据测试代码中IndexName : test创建一个模式匹配

    点击Settings-->Indices->去掉Index contains time-based events 的勾,

     

     

     

    点击Discover

     

     springboot-elk-dmeo.zip

     

     

  • 相关阅读:
    人生,别认输,因为没人希望你赢
    一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
    Android Studio 出现 Gradle's dependency cache may be corrupt 解决方案
    清华梦的粉碎——转自王垠
    label smooth
    <现代C++实战30讲>笔记 01 | 堆、栈、RAII:C++里该如何管理资源?
    h5转pb的两个坑
    opencv库的像素x,y,width,height,col,row的对应关系
    detect 导图
    keras多gpu训练
  • 原文地址:https://www.cnblogs.com/brant/p/11680035.html
Copyright © 2011-2022 走看看