SpringBoot2 集成 ELK 实现日志收集

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

一 简介

二 ELK 各组件作用

三 ELK 各组件安装

四 Spring Boot2 集成 logstash 


一 简介


ELK 即 Elasticsearch、Logstash、Kibana 组合起来可以搭建线上日志系统本文主要讲解使用ELK 来收集 SpringBoot2 应用产生的日志。

二 ELK 各组件作用


Elasticsearch用于存储收集到的日志信息
Logstash用于收集日志SpringBoot应用整合了Logstash以后会把日志发送给LogstashLogstash 再把日志转发给 Elasticsearch
Kibana通过Web端的可视化界面来查看日志。


三 ELK 各组件安装


3.1 Elasticsearch 和 Kibana 安装请见CentOS 搭建ElasticSearch

3.2 Logstash 安装

1下载 LogstashDownload Logstash Free | Get Started Now | Elastic

          注意Logstash 版本建议跟 Elasticsearch 一致。

2上传安装包至指定目录、并解压

3进入 bin 目录创建 logstash-cloud-project.conf 配置文件输入如下内容

input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
  }
}
output {
  elasticsearch {
    # es 连接地址
    hosts => ["http://172.16.20.101:9200"]
    # 索引名称
    index => "cloud-project-logstash-%{+YYYY.MM.dd}"
  }
}

4进去 bin 目录启动 logstash 

./logstash -f logstash-cloud-project.conf 

四 Spring Boot2 集成 logstash 

4.1 pom.xml 添加依赖

		<!--集成logstash-->
		<dependency>
			<groupId>net.logstash.logback</groupId>
			<artifactId>logstash-logback-encoder</artifactId>
			<version>5.3</version>
		</dependency>

4.2 配置日志文件logback.xml让logback的日志输出到logstash

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--引用默认日志配置-->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <!--使用默认的控制台日志输出实现-->
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
 
    <!--应用名称-->
    <property name="app_name" value="cloud-project" />
    <contextName>${app_name}</contextName>
 
    <!-- 日志存放路径 -->
	<property name="log.path" value="${user.dir}/logs" />
    <!-- 日志输出格式 -->
	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
 
	<!-- 控制台输出 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
            <pattern>%black %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger) - %cyan(%msg%n)</pattern>
        </encoder>
	</appender>
 
	<!-- 系统日志输出 -->
	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/info.log</file>
        <!-- 循环政策基于时间创建日志文件 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
			<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 30天 -->
			<maxHistory>60</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作接收记录 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作拒绝不记录 -->
            <onMismatch>DENY</onMismatch>
        </filter>
	</appender>
 
	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/error.log</file>
        <!-- 循环政策基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 30天 -->
			<maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
			<!-- 匹配时的操作接收记录 -->
            <onMatch>ACCEPT</onMatch>
			<!-- 不匹配时的操作拒绝不记录 -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <!--输出到logstash的appender-->
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--可以访问的logstash日志收集端口-->
        <destination>172.16.20.101:4560</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>
 
    <root level="info">
        <appender-ref ref="console" />
    </root>
 
	<!--日志-->
    <root level="info">
        <appender-ref ref="file_info" />
        <appender-ref ref="file_error" />
        <appender-ref ref="logstash"/>
    </root>
</configuration>

一般我们不需要自定义控制台输出可以采用默认配置具体配置参考console-appender.xml

<!--引用默认日志配置-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--使用默认的控制台日志输出实现-->
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

应用名称

    <!--应用名称-->
    <property name="app_name" value="cloud-project" />
    <contextName>${app_name}</contextName>

输出到logstash的appender

    <!--输出到logstash的appender-->
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--可以访问的logstash日志收集端口-->
        <destination>172.16.16.9:4560</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>

4.3 启动程序在 kibana 中查看日志信息

 

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Spring