当前位置: 首页 > news >正文

SpringBoot+ElasticSearch7.12.1+Kibana7.12.1简单使用

案例简介

        本案例是把日志数据保存到Elasticsearch的索引中,并通过Kibana图形化界面的开发工具给查询出来添加的日志数据,完成从0到1的简单使用

ElasticSearch职责用法简介

ElasticSearch用在哪

        ElasticSearch在我这个案例中,不是用来缓解增删改查这4个操作的压力的(有些项目可能用来缓解查询的速度,压力,我这个项目没用到),是专门用来记录日志的,所以这就不像Redis,RabbitMQ一样,好理解,因为Redis、RabbitMQ是专门用来缓解业务操作压力的。

        ElasticSearch常用在日志管理中,原先项目的日志管理可能用的logback,保存到一个日志文件中,有问题了就打开看看,但项目的并发高了,就意味着日志就多,日志文件就大,几百兆的日志文件打开都不好打开,就算打开,也不好定位问题,就算是用MySQL表,数据量大了也不好处理,所以就用ElasticSearch专门存日志数据,管理日志。

ElasticSearch的一些简单概念

        ElasticSearch可以像MySQL那样存储数据,那这里面的概念就需要捋一下,MySQL存的数据在数据库、表中,ElasticSearch对应的就是索引、文档,只不过ElasticSearch7.X以及以后的版本,文档不能再自定义,只有默认的_doc,所以能自己命名的只有索引(对于一个新的工具,里面有一些新的概念,肯定得学,这没办法)

        ElasticSearch的查询语句格式和返回的数据格式都是JSON,所以这就增加了学习的成本,但不用全部都会,只需要知道怎么把springboot项目的日志保存到ElasticSearch中,然后在图形化界面程序Kibana中去查询到刚保存在ElasticSearch的日志就可以了

ElasticSearch在Kibana中怎么用

ElasticSearch的命令有
GET(查数据)、POST(创建和修改)、PUT(更新和创建)、DELETE(删除)

这4类之分,这4个命令关键字在Kibana的开发工具中使用的话必须大写

创建

PUT /students
{"mappings": {"properties": {"name": { "type": "text" },"age": { "type": "integer" },"phone": { "type": "keyword" }}}
}

PUT /students这个命令就是创建名为students的索引(数据都存这里)
mappings是定义索引的字段和数据类型
properties是包含索引中所有字段的定义
剩下的就是三个字段,以及三个字段的类型,keyword是表示精确匹配和聚合,也就是说,往里面添加数据就按照这三个定义好的字段以及类型添加就可以了

添加

POST /students/_doc
{"name": "张三","age": 18,"phone": "12345678910"
}

POST /students/_doc就是往刚才创建好的索引里面添加数据(7.0以后的版本都是默认_doc,不能自定义,students是索引名字,对应mysql的数据库,_doc是文档名字,对应mysql的表),剩下就是数据了

查询

GET /students/_search 
{"query" : { "match_all" : {}}
}

GET /students/_search是查询命令,
_search是查询的关键字,意思是执行搜索操作
query是指定查询条件
match_all是基本搜索,就是查询所有

修改

POST /students/_update/5QexW5IBczl1l0mGGalG
{"doc": {"age": 20}
}

POST /students/_update/5QexW5IBczl1l0mGGalG是根据id进行修改
doc是要更新的字段和新值,里面就是具体的字段值

删除

DELETE /students/_doc/5QexW5IBczl1l0mGGalG

SpringBoot和ElasticSearch结合简单使用

pom.xml文件坐标

        <!-- Spring Data Elasticsearch --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><!-- Elasticsearch Client --><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.12.1</version></dependency>

配置文件

# ElasticSearch配置
spring.elasticsearch.rest.uris=http://127.0.0.1:9200

接口

往ElasticSearch里面添加数据的接口(对,就这个简单)

ElasticsearchRepository<Log, Long>,Log是日志文件对象,Long是日志主键类型

@Component
public interface LogElasticSearch extends ElasticsearchRepository<Log, Long> {
}

Log日志类

@Document(indexName = "logbill")        //logbill为索引名字,全部小写,不能大写

@Field(type = FieldType.Text)  //指定字段的类型,不写的话就是自动识别类型

@Data
@Entity
@Document(indexName = "logbill")//索引名字,全部小写
@Table(name = "log")
public class Log implements Serializable {@Id@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "JDBC")private Long id;@Column@Field(type = FieldType.Text)private String ipv4;@Column@Fieldprivate String ipv6;@Column@Fieldprivate String controller;@Column@Fieldprivate String method;@Column@Fieldprivate String url;@Column@Fieldprivate String name;/*** 调用时间*/@Column@Field(type = FieldType.Date)@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")private Date time;/*** 逻辑删除*/@Column@Field(type = FieldType.Integer)private Integer deleted;public Log() {}public Log(String ipv4, String ipv6, String controller, String method, String url, String name, Date time, Integer deleted) {this.ipv4 = ipv4;this.ipv6 = ipv6;this.controller = controller;this.method = method;this.url = url;this.name = name;this.time = time;this.deleted = deleted;}
}

调用

在需要往ElasticSearch里面添加数据的地方,注入刚才那个接口,然后再调用save方法,这个data就是Log类型的,就可以了

    @Autowiredprivate LogElasticSearch logElasticsearch;
logElasticsearch.save(data);

最后再查询一下

GET /logbill/_search
{"query" : { "match_all" : {}}
}

总结

以上就完成了ElasticSearch的简单使用,从0到1的过程已经完成,至于以后用更加复杂的操作,那就看情况了,其实难点还是ElasticSearch的查询语句全部是JSON格式的,刚开始不太好接受,习惯了就好,有什么不懂得可以评论下,看到会回复

http://www.lryc.cn/news/455035.html

相关文章:

  • RESTful风格接口+Swagger生成Web API文档
  • 性能测试学习2:常见的性能测试策略(基准测试/负载测试/稳定性测试/压力测试/并发测试)
  • 【C++】—— 继承(上)
  • 【2024保研经验帖】东南大学计算机学院夏令营
  • dz论坛可可积分商城插件价值399元
  • python的extend和append
  • 贪心算法相关知识
  • 济南比较出名的人物颜廷利:全球最具影响力的思想家起名大师
  • 第100+27步 ChatGPT学习:概率校准 Temperature Scaling
  • Python知识点:如何应用Python工具,使用NLTK进行语言模型构建
  • 深入浅出MySQL
  • 【WRF工具】cmip6-to-wrfinterm工具概述:生成WRF中间文件
  • 大厂面试真题:阿里经典双重检测DCL对象半初始化问题
  • 20款奔驰CLS300升级原厂抬头显示HUD 23P智能辅助驾驶 触摸屏人机交互系统
  • GoogleNet原理与实战
  • MongoDB 数据库服务搭建(单机)
  • 基于springboot+小程序的智慧物业平台管理系统(物业1)
  • [SpringBoot] 苍穹外卖--面试题总结--上
  • [C#]使用onnxruntime部署yolov11-onnx实例分割模型
  • Polars的Config
  • 【面试官】 多态连环问
  • Vue 路由设置
  • 力扣110:判断二叉树是否为平衡二叉树
  • Chromium 中JavaScript Fetch API接口c++代码实现(一)
  • ARM(5)内存管理单元MMU
  • 文件上传漏洞原理
  • Web安全 - 安全防御工具和体系构建
  • 服务器数据恢复—raid磁盘故障导致数据库文件损坏的数据恢复案例
  • requests 中data=xxx、json=xxx、params=xxx 分别什么时候用
  • 毕设 大数据抖音短视频数据分析与可视化(源码)