ELK:
- Elasticsearch:用于存储收集到的日志信息
- Logstash: 用于日志采集并上传到Elasticsearch
- Kibana: Web端可视化页面
下载
配置并启动elasticsearch
elasticsearch无需过多配置,直接进入bin目录启动即可
配置并启动Logstash
- 创建 spring-boot-logstash.yaml 配置文件
input {
tcp {
#模式选择为server
mode => "server"
#ip和端口根据自己情况填写,端口默认4560,对应下文logback.xml里appender中的destination
host => "127.0.0.1"
port => 4560
#格式json
codec => json_lines
}
}
filter {
#过滤器,根据需要填写
}
output {
elasticsearch {
action => "index"
#这里填写es的地址,多个es要写成数组的形式
hosts => "127.0.0.1:9200"
#存放的索引名称,这里每天会创建一个新的索引保存当天的日志
index => "myapp-log-%{+YYYY.MM.dd}"
}
}
- 通过配置文件启动一个logstash实例
bin/logstash.bat -f D:\conf\spring-boot-logstash.yaml
配置并启动Kibana
- 配置es地址和中文语言
#设置es地址
elasticsearch.hosts: ["http://127.0.0.1:9200"]
#设置中文
i18n.locale: "zh-CN"
- 启动
bing/kibana.bat
Springboot 整合 Logstash将日志发送到ES
- 引入依赖
<!--集成logstash-->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0.1</version>
</dependency>
- 创建 resources/logback-spring.xml
<configuration scan="true" scanPeriod="10 seconds">
<contextName>logback</contextName>
<include resource="logback-logstash.xml"/>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
<!-- 引用application.properties内的配置 -->
<springProperty scope="context" name="log.path" source="logging.file.path" defaultValue="log"/>
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!--1. 输出到控制台-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>TRACE</level>
<level>DEBUG</level>
<level>INFO</level>
<level>WARN</level>
<level>ERROR</level>
<level>FATAL</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--输出到logstash的appender-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--可以访问的logstash日志收集端口-->
<destination>127.0.0.1:4560</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<!-- 开发环境:打印控制台并传输给Logstash -->
<springProfile name="dev">
<root level="debug">
<appender-ref ref="CONSOLE" />
<appender-ref ref="LOGSTASH" />
</root>
</springProfile>
<!-- 生产环境:直接将日志传输给Logstash -->
<springProfile name="dev">
<root level="info">
<appender-ref ref="LOGSTASH" />
</root>
</springProfile>
</configuration>
application.properties
spring.profiles.active=dev
#设置日志级别和本地存放路径(随便配)
logging.level.root=info
logging.file.path=applog
- 启动SpringBoot 查看es是否创建了新的索引,如果创建了myapp-log-xxx则日志已经成功存放到es了
GET /_cat/indices?pretty
通过Kibana提供的可视化功能查看日志
左上角目录 > Stack Management > 索引模式
创建好索引模式后进入 左上角目录 > discover