SpringBoot 整合 elk

一、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

需要修改 logstash 配置,新建命令窗口,进行下面的docker命令

#通过exec命令进入容器
docker exec -it elk /bin/bash

进入容器后,修改 /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_第1张图片

三、创建工程

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

1. pom.xml


<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.0modelVersion>

	<groupId>com.gfgroupId>
	<artifactId>springboot-elkartifactId>
	<version>0.0.1-SNAPSHOTversion>
	<packaging>jarpackaging>

	<name>springboot-elkname>
	<description>Demo project for Spring Bootdescription>

	<parent>
		<groupId>org.springframework.bootgroupId>
		<artifactId>spring-boot-starter-parentartifactId>
		<version>2.1.1.RELEASEversion>
		<relativePath/> 
	parent>

	<properties>
		<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
		<java.version>1.8java.version>
	properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-webartifactId>
		dependency>
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-testartifactId>
			<scope>testscope>
		dependency>

		
		<dependency>
			<groupId>ch.qos.logbackgroupId>
			<artifactId>logback-classicartifactId>
		dependency>

		<dependency>
			<groupId>net.logstash.logbackgroupId>
			<artifactId>logstash-logback-encoderartifactId>
			<version>5.2version>
		dependency>

	dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.bootgroupId>
				<artifactId>spring-boot-maven-pluginartifactId>
				<configuration>
					<fork>truefork>
				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



<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>INFOlevel>
        filter>
        
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}pattern>
            <charset>utf8charset>
        encoder>
    appender>

    
    <appender name="logstash"
              class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>127.0.0.1:5044destination>
        
        <encoder
                class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTCtimeZone>
                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_第2张图片
选择时间@timestamp,这样数据展示会以时间排序
SpringBoot 整合 elk_第3张图片
好了 ,点击discover,就可以看到我们springboot-elk项目的日志信息了。
SpringBoot 整合 elk_第4张图片

源码下载: https://github.com/gf-huanchupk/SpringBootLearning

扫码关注我的公众号,精彩内容不能错过!

你可能感兴趣的:(SpringBoot,SpringBoot)