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.mzph.cn/diannao/55591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPU Puzzles讲解(二)

GPU-Puzzles项目是一个很棒的学习cuda编程的项目&#xff0c;可以让你学习到GPU编程和cuda核心并行编程的概念&#xff0c;通过一个个小问题让你理解cuda的编程和调用&#xff0c;创建共享显存空间&#xff0c;实现卷积和矩阵乘法等 https://github.com/srush/GPU-Puzzleshttp…

【正则表达式】粗浅学习

文章目录 1 背景介绍1.1 为什么要学习正则表达式&#xff1f;1.2 什么是正则表达式&#xff1f;1.3 正则表达式可以做什么&#xff1f; 2 基本语法3 典型案例3.1 正整数3.2 IPv4类型的IP地址3.2.1 点分10进制表示格式 1 背景介绍 1.1 为什么要学习正则表达式&#xff1f; 日常…

面试系列-分组Tire树匹配算法

自己写的分组Tire树匹配算法&#xff0c;该算法用于云南省人工智能重点实验室与云南电网合作项目&#xff08;云南电网敏感信息识别系统&#xff09;&#xff0c;用于快速匹配文本将项目中数据算法抽离出来&#xff0c;特此分享&#xff01;&#xff01;!可以实现动态的插入、删…

NVIDIA Hopper 架构深入

在 2022 年 NVIDIA GTC 主题演讲中,NVIDIA 首席执行官黄仁勋介绍了基于全新 NVIDIA Hopper GPU 架构的全新 NVIDIA H100 Tensor Core GPU。 文章目录 前言一、NVIDIA H100 Tensor Core GPU 简介二、NVIDIA H100 GPU 主要功能概述1. 新的流式多处理器 (SM) 具有许多性能和效率…

leetcode58:最后一个单词的长度

给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大 子字符串 。 示例 1&#xff1a; 输入&#xff1a;s "Hello World" 输出&#xff…

浅谈汽车智能座舱如何实现多通道音频

一、引言 随着汽车智能座舱的功能迭代发展&#xff0c;传统的 4 通道、6 通道、8 通道等音响系统难以在满足驾驶场景的需求&#xff0c;未来对于智能座舱音频质量和通道数会越来越高。接下来本文将浅析目前智能座舱如何实现音频功放&#xff0c;以及如何实现多路音频功放方案。…

iOS 多次获取图片主题色不一样

一个需求中&#xff0c;要求获取图片的主题色 代码如下 -(void)kk_getImage:(UIImage *)image fetchthemeColor:(void(^)(UIColor *color))callBack {dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{// 第一步 先把图片缩小 加快计算速度.…

C语言文件操作(上)(27)

文章目录 前言一、为什么要用文件&#xff1f;二、什么是文件&#xff1f;程序文件数据文件文件名文件类型文件缓冲区文件指针 三、流流的概念标准流 总结 前言 C语言可以直接操作文件&#xff0c;如果你是第一次听说这个特性&#xff0c;可能会眼前一亮&#xff0c;感到惊奇  …

MongoDB的安装与增删改查基本操作

MongoDB是一种非关系型数据库,是NoSQL语言,但是又是最接近关系型数据库的。内部存储不是表结构,但是可以对数据进行表结构的操作。 一、安装 在官网:Download MongoDB Community Server | MongoDB下载系统对应的版本进行安装即可 二、编辑器 在安装MongoDB后会自带一个编…

图片格式入门

主要参考资料&#xff1a; 常见的图片格式介绍: https://blog.csdn.net/cnds123/article/details/127165291 目录 像素图与矢量图像素图&#xff08;pixel image&#xff09;矢量图&#xff08;Vector graphics&#xff09; 像素图与矢量图 像素图&#xff08;pixel image&…

D3.js中国地图可视化

1、项目介绍 该项目来自Github&#xff0c;基于D3.js中国地图可视化。 D3.js is a JavaScript library for manipulating documents based on data. It uses HTML, SVG, and CSS to display data. The full name of D3 is "Data-Driven Documents," which means it a…

Spring Boot项目使用MyBatis Plus的详细步骤

在Spring Boot项目中使用MyBatis Plus&#xff0c;可以极大地简化数据库操作&#xff0c;提高开发效率。以下是在Spring Boot项目中集成和使用MyBatis Plus的详细步骤&#xff1a; 一、环境准备 确保已安装Java和Spring Boot&#xff1a;MyBatis Plus是基于Java和Spring Boot…

话术挂断之后是否处理事件

文章目录 前言联系我们解决方案方案一方案二 前言 流程&#xff1a;自动外呼进入机器人话术。问题&#xff1a;在机器人放音时用户挂断后&#xff0c;话术还会继续匹配流程&#xff0c;如果匹配上的是放音节点&#xff0c;还会进行放音&#xff0c;那么在数据库表conversation…

Redis 缓存策略详解:提升性能的四种常见模式

在现代分布式系统中&#xff0c;缓存是提升性能和减轻数据库负载的关键组件。Redis 作为一种高性能的内存数据库&#xff0c;被广泛应用于缓存层。本文将深入探讨几种常用的 Redis 缓存策略&#xff0c;包括旁路缓存模式&#xff08;Cache-Aside Pattern&#xff09;、读穿透模…

windows中C++调用dll文件的两种方式,QT QLibrary和Windows API

假设DLL文件名为 test.dll&#xff0c;函数 int add(int a.int b) 1.使用Windows API 的方式 #include <windows.h>extern "C" __declspec(dllexport) int add(int a, int b); // 定义函数typedef int (*AddFunction)(int, int); // 定义函数指针类型HMODULE …

阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战

作者&#xff1a;胡志广(独鳌) 背景 Serverless 应用引擎 SAE 事件中心主要面向早期的 SAE 控制台只有针对于应用维度的事件&#xff0c;这个事件是 K8s 原生的事件&#xff0c;其实绝大多数的用户并不会关心&#xff0c;同时也可能看不懂。而事件中心&#xff0c;是希望能够…

SpringBoot MyBatis连接数据库设置了encoding=utf-8还是不能用中文来查询

properties的MySQL连接时已经指定了字符编码格式&#xff1a; url: jdbc:mysql://localhost:3306/sky_take_out?useUnicodetrue&characterEncodingutf-8使用MyBatis查询&#xff0c;带有中文参数&#xff0c;查询出的内容为空。 执行的语句为&#xff1a; <select id&…

一个月冲刺软考——病毒与木马的了解、认证与加密、加密技术的分类

目录 1.计算机病毒与木马 2.加密方式的分类及特点 3.选择路由的策略 4.DoS攻击(拒绝服务) 5.认证与加密 6.报文摘要算法 7.网络攻击的类别 8.安全的分类及举例 9.加密技术的分类 10.什么是PKI体制&#xff1f;有哪些步骤&#xff1f; 1.计算机病毒与木马 1.1病毒&am…

Tensorflow2.0

Tensorflow2.0 有深度学习基础的建议直接看class3 class1 介绍 人工智能3学派 行为主义:基于控制论&#xff0c;构建感知-动作控制系统。(控制论&#xff0c;如平衡、行走、避障等自适应控制系统) 符号主义:基于算数逻辑表达式&#xff0c;求解问题时先把问题描述为表达式…

开源跨平台三维模型轻量化软件osgGISPlugins-1、简介

下一篇文章&#xff1a;开源跨平台三维模型轻量化软件osgGISPlugins-2、如何编译 1、仓库地址 github地址&#xff1a;https://github.com/newpeople123/osgGISPlugins gitee地址&#xff1a;https://gitee.com/wtyhz/osg-gis-plugins 2、项目简介 osg引擎的gis插件&#x…