array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 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/

 springboot集成elk 一: springboot + Elasticsearch

 

 

 

2.1启动Elasticsearch

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

 

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

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

 

测试:http://localhost:9200/

springboot集成elk 一: springboot + Elasticsearch

 

 

 

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

 

2.2 启动kibana

修改配置 config/kibana.yml

 springboot集成elk 一: springboot + Elasticsearch

 

 

 

进入bin目录 cd kibana\bin 执行kibana

http://localhost:5601

springboot集成elk 一: springboot + Elasticsearch

 

 

 

备注:关闭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

springboot集成elk 一: springboot + Elasticsearch

 

 

 

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

 springboot集成elk 一: springboot + Elasticsearch

 

 

 

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

 

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

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

 springboot集成elk 一: springboot + Elasticsearch

 

 

点击Discover

 springboot集成elk 一: springboot + Elasticsearch

 springboot-elk-dmeo.zip

 

相关文章: