SpringBoot2 集成 ELK 实现日志收集
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
一 简介
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 中查看日志信息