SpringBoot 整合 elk

javaspring思维导图 2019-05-19 12:20:00

一、elk 简介

  • Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  • Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
  • Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

二、elk的安装

我们采用的 docker 镜像安装。

#下载镜像
docker pull sebp/elk
#启动镜像 , 指定es的内存
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 5601:5601 -p 5044:5044 -p 9200:9200 -p 9300:9300 -it --name elk 2fbf0a30426d

由于sebp/elk中logstash的input的方式默认是filebeat,首先需要进入elk容器中修改input方式。logstash默认会将etc/logstash/conf.d/中的配置文件进行整合然后启动。

#进入容器
docker exec -it elk /bin/bash 
#进入修改目录
cd etc/logstash/conf.d/

修改 02-beats-input.conf 文件,修改如下:

input { 
 tcp { 
 port => 5044 
 codec => json_lines 
 
 } 
 
} 
output{ 
 elasticsearch { 
 hosts => ["localhost:9200"] 
 
 } 
 
}

保存后,我们使用 control + P + Q 退出容器。然后重启容器,让我们的配置生效。

docker restart elk

我们访问http://127.0.0.1:5601

SpringBoot 整合 elk

 

三、创建工程

创建工程springboot-elk ,并使用logback 记录日志。

1. pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.gf</groupId>
 <artifactId>springboot-elk</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>
 <name>springboot-elk</name>
 <description>Demo project for Spring Boot</description>
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.1.1.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 </properties>
 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
 <!-- logback -->
 <dependency>
 <groupId>ch.qos.logback</groupId>
 <artifactId>logback-classic</artifactId>
 </dependency>
 <dependency>
 <groupId>net.logstash.logback</groupId>
 <artifactId>logstash-logback-encoder</artifactId>
 <version>5.2</version>
 </dependency>
 </dependencies>
 <build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 <configuration>
 <fork>true</fork>
 </configuration>
 </plugin>
 </plugins>
 </build>
</project>

2. 启动类

@RestController
@SpringBootApplication
public class SpringbootElkApplication {
 private final static Logger logger = LoggerFactory.getLogger( SpringbootElkApplication.class );
 public static void main(String[] args) {
 SpringApplication.run(SpringbootElkApplication.class, args);
 }
 @GetMapping("/{name}")
 public String hi(@PathVariable(value = "name") String name) {
 logger.info( "name = {}" , name );
 return "hi , " + name;
 }
}

3. logback-spring.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输出的JSON格式的Appender -->
 <appender name="logstash"
 class="net.logstash.logback.appender.LogstashTcpSocketAppender">
 <destination>127.0.0.1:5044</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="INFO">
 <appender-ref ref="console" />
 <appender-ref ref="logstash" />
 </root>
 
</configuration>

启动工程,日志会存入elasticsearch中,通过Kibana 的web界面,配置后,我们就可看到,下面我简单的修改下配置。

三、配置 pattern

配置 pattern 输入*,匹配所有数据。

SpringBoot 整合 elk

 

选择时间@timestamp,这样数据展示会以时间排序

SpringBoot 整合 elk

 

好了 ,点击discover,就可以看到我们springboot-elk项目的日志信息了。

SpringBoot 整合 elk

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值