ELK学习笔记(二)
上一篇简单介绍了ELK是什么东西以及简单跑了一个ELK,和写了一个Springboot的demo测试成功。
这一篇将着重介绍一下ELK中Kibana的基本使用方法
spring cloud sleuth
在此先介绍一个本期主题之外的东西。spring cloud sleuth,为什么要介绍这个呢?因为我使用ELK期间发现。我一个请求方法内打印多条日志时候,有时候很难区分这多条日志是不是属于同一次api调用产生。于是就发现了spring cloud sleuth。spring cloud sleuth是 Spring Cloud 生态 中的一个分布式链路追踪组件。它的作用是为 Spring Boot 应用 添加 分布式追踪功能,帮助开发者追踪一次请求在多个微服务之间的调用路径,并提供 日志关联,方便分析问题、优化性能。他可以为你的请求生成TraceId 表示标识整个请求链路。所以我在上期的demo引入尝试了一下由于我用的是Springboot3以上的版本需要引入以下依赖(springboot 2.x 的版本可以网上搜索如何使用)
- pom文件引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>3.1.9</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
- 修改上一篇中的logback,定义了日志的打印格式,打印出traceId
<configuration>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:5044</destination> <!-- Logstash 地址 -->
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"application":"my-service"}</customFields> <!-- 自定义字段 -->
</encoder>
</appender>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [%X{traceId:-}] [%X{spanId:-}] %msg%n
</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="LOGSTASH" />
</root>
</configuration>
- 写一个service多个方法调用来测试日志打印
@Service
@Slf4j
public class TestService {
public void play1() {
log.info("play1调用成功");
play2();
}
public void play2() {
log.info("play2调用成功");
}
public void play3() {
log.info("play3调用成功");
}
}
- 在controller里面调用
@RestController
@RequestMapping("/test")
@Slf4j
public class TestController {
@Resource
private TestService testService;
@RequestMapping("test1")
public Object test1() {
testService.play1();
log.info("test1方法调用成功");
testService.play3();
return "调用成功";
}
}
- 调用测试接口然后查看我们控制台和kibana创建的视图
可以发现我们同一次调用打印的日志都会有一个相同的traceId,这样我们就可以通过我们的kibana数据视图来快速查询出某次api调用的全过程日志
Kibana基本使用
kibana的使用这里主要介绍以下日志的可视化功能,查询,以及统计分析。
- Available fields:读取的是Elasticsearch的索引,这里我们可以通过kibana直接针对这些索引进行搜索。我们先观察一下我们的kibana界面左侧和实际内容对应的这些Available fields,看哪些fields能够被我们作为统计或者查询来使用,这些索引是可以由我们自己配置的。这个在后续在做介绍
比如level我们可以用来查看各个时间段产生的error日志数量,然后监控到我们系统在哪个时间段产生了错误。及时处理。如下:
我们先写一个在上次的springboot的demo写一个方法打印error日志并调用
@RequestMapping("/test2")
public Object test2() {
log.error("test2方法调用成功");
return "SUCCESS";
}
- Dashboards:kibana提供的一个可自定义的数据可视化和分析的工具。比如像我们上面说的可能需要统计时间段level为error级别的日志。来分析系统出现错误的分布。或者通过采集其他比如nginx日志,统计接口某个接口,某个模块的接口请求量,来分析用户行为,喜好等。
例:统计时间段level为error的日志数量。1、进入dashboard。2、创建一个dashboard。3、创建visualization。4、选择visualization type kibana提供了很多可视化统计分析类型供我们选择,比如柱状图/条形图,饼图/环形图, 热力图,区域图 等等这些类型的可供我们自定义选择去统计。
1、选择对应的visualization type
2、设置水平轴数据
3、设置垂直轴数据,并设置过滤条件。然后保存
ELK学习笔记(一)(简单介绍了ELK是什么,做什么的,以及使用docker简单部署一套环境)