zoukankan      html  css  js  c++  java
  • Spring Boot 整合 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 ,并使用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 输入*,匹配所有数据。

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

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

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





    欢迎扫码或微信搜索公众号《程序员果果》关注我,关注有惊喜~

  • 相关阅读:
    存储过程调用API
    Visual Studio 2019 添加不了区域 解决办法
    .NET Core 3.1 IIS其它网站出现HTTP503无法访问解决方法
    串口数据处理分包处理
    树莓派实践总和
    mysql定期任务
    Newtonsoft.Json.Linq 序列化 反序列化等知识
    使用IDbCommandInterceptor解决EF-CORE-3.x-使用MYSQL时,未正常的生成LIKE查询语句
    .Net Core自定义读取配置文件信息appsettings.Json
    .Net Core Cors跨域
  • 原文地址:https://www.cnblogs.com/huanchupkblog/p/10563789.html
Copyright © 2011-2022 走看看