〇、虚拟机中docker安装elasticsearch 、Kibana、Logstash
elasticsearch导入中文分词器
Logstash修改es数据库ip及创建索引名配置
一、elasticsearch数据库的结构
和mysql作比较,mysql中的数据库的二维表相当于es数据库的index索引结构;mysql数据库的二维表中每一条数据相当于es数据库中的document文档数据。
每个索引有主分片和副分片,主分片和副分片数据保持一致,类似主从关系。
index索引有不同于二维表的mappings数据结构:
document文档数据存放在hits中的hits中
二、使用Kibana图形化界面命令操作es数据库
1)查看索引、创建索引及mappings结构、创建文档数据
1)查询所有索引
2)查看指定索引goods
3)创建索引并更改mapping结构
4)创建索引文档
5)其他命令
2)对文档数据的crud操作
3)检索操作
三、使用java代码连接操作es数据库
0)导入依赖坐标
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.12.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>
1)创建实体类、并添加注解
@Field:
添加该注解类似于redis的json数据和实体类对象的属性映射时添加的注解,name用来指定映射到es数据库中的字段名称,type用来指定映射到es数据库中的类型,analyzer用来指定分词器,es数据库没有中文分词器,需要自行下载。
@Document:
indexName指定创建index索引时的索引名
2)添加相关配置文件
别忘记编写启动类
3) 在测试类中调用es数据库连接对象elasticsearchRestTemplate
①创建索引
②增
③改
④删
⑤全字段内容检索
⑥全部搜索
⑦匹配搜索
⑧短语搜索
⑨范围搜索
⑩多条件搜索
⑩①搜索高亮
四、使用Logstash收集日志数据到es数据库中
0)依赖坐标
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.12.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.3</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>
1)编写logback.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!--该日志将日志级别不同的log信息保存到不同的文件中 -->
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<springProperty scope="context" name="springAppName"
source="spring.application.name" />
<!-- 日志在工程中的输出位置 -->
<property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${springAppName}" />
<!-- 控制台的日志输出样式 -->
<property name="CONSOLE_LOG_PATTERN"
value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<!-- 日志输出编码 -->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!-- logstash远程日志配置-->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.8.128:4560</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<!-- 日志输出级别 -->
<root level="DEBUG">
<appender-ref ref="console" />
<appender-ref ref="logstash" />
</root>
</configuration>
2)添加日志注解
3)kibana查看日志索引文档信息
①)命令查看
②)图形化界面
五、Spring Cloud Sleuth
Sleuth是在logback的基础上进行请求追踪和日志记录,会标记请求添加一个id。
0)依赖坐标
<!-- sleuth启动器依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <!-- logstash相关依赖,用于应用中的Sleuth将采集的跟踪数据发送给logstash使用 --> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.0</version> </dependency>
1)修改logback.xml配置文件<encoder>标签
<?xml version="1.0" encoding="UTF-8"?> <!--该日志将日志级别不同的log信息保存到不同的文件中 --> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml" /> <springProperty scope="context" name="springAppName" source="spring.application.name" /> <!-- 日志在工程中的输出位置 --> <property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${springAppName}" /> <!-- 控制台的日志输出样式 --> <property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" /> <!-- 控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <!-- 日志输出编码 --> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <!-- logstash远程日志配置--> <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>192.168.222.128:4560</destination> <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp> <timeZone>UTC</timeZone> </timestamp> <pattern> <pattern> { "severity": "%level", "service": "${springAppName:-}", "trace": "%X{X-B3-TraceId:-}", "span": "%X{X-B3-SpanId:-}", "exportable": "%X{X-Span-Export:-}", "pid": "${PID:-}", "thread": "%thread", "class": "%logger{40}", "rest": "%message" } </pattern> </pattern> </providers> </encoder> </appender> <!-- 日志输出级别 --> <root level="DEBUG"> <appender-ref ref="console" /> <appender-ref ref="logstash" /> </root> </configuration>
六、Spring Cloud Zipkin
Zipkin和Sleuth集成,提供请求追踪,响应时间的可视化界面
-1)创建docker容器运行Zipkin服务器
0)依赖坐标
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
1)删除logback.xml
2)访问http://192.168.222.128:9411/zipkin: