Springboot+ELK 8.x(Elasticsearch + Logstash + Kibana)
1. ES的安装(版本:8.2.2)
1.1 打开doc运行
运行es
E:
cd E:\log\elasticsearch-8.2.2
bin\elasticsearch
1.2 es启动完成后,打开另一doc
新增用户:test 密码 test123 设置成超级用户
E:
cd E:\log\elasticsearch-8.2.2
bin\elasticsearch-users useradd test -p test123 -r superuser
1.3 浏览器访问https://localhost:9200/,输入用户名test,密码:test123(可忽略)
1.4 修改E:\log\elasticsearch-8.2.2\config\elasticsearch.yml文件
在最后加上下面内容
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,Content-Type,X-Requested-with,Content-Length
ingest.geoip.downloader.enabled: false
1.5 关闭重启
elasticsearch
2. logstash(版本:8.2.2)
2.1 修改 logstash-sample.conf
eshosts:https://127.0.0.1:9200 es秘钥路径:E:/log/elasticsearch-8.2.2/config/certs/http_ca.crt
input {
stdin{
}
}
input {
tcp {
host => "127.0.0.1"
port => 9601
codec => json_lines
}
}
output {
stdout{
codec => rubydebug
}
elasticsearch {
hosts => ["https://127.0.0.1:9200"]
index => "log-%{+YYYY.MM.dd}"
user => "test"
password => "test123"
ssl => true
ssl_certificate_verification => true
cacert => "E:/log/elasticsearch-8.2.2/config/certs/http_ca.crt"
}
}
2.2 修改.yml
eshosts:https://127.0.0.1:9200 es秘钥路径:E:/log/elasticsearch-8.2.2/config/certs/http_ca.crt
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: test
xpack.monitoring.elasticsearch.password: test123
xpack.monitoring.elasticsearch.hosts: ["https://localhost:9200"]
xpack.monitoring.elasticsearch.ssl.certificate_authority: "E:/log/elasticsearch-8.2.2/config/certs/http_ca.crt"
xpack.monitoring.elasticsearch.ssl.verification_mode: certificate
2.3 启动
doc窗口启动
E:
cd E:\log\logstash-8.2.2
bin\logstash -f config/logstash-sample.conf
3. Springboot集成logstash
3.1 maven 依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.4</version>
</dependency>
3.2 在resources目录下创建logback-spring.xml
配置1
<configuration>
<!-- 日志根目录-->
<springProperty scope="context" name="LOG_HOME" source="logging.path" defaultValue="/tbea_mes_logs"/>
<!-- 日志级别 -->
<springProperty scope="context" name="LOG_ROOT_LEVEL" source="logging.level.root" defaultValue="DEBUG"/>
<!--<property name="LOG_ROOT_LEVEL" value="DEBUG"/>-->
<!-- 标识这个"STDOUT" 将会添加到这个logger -->
<springProperty scope="context" name="STDOUT" source="log.stdout" defaultValue="STDOUT"/>
<!-- 日志文件名称-->
<property name="LOG_PREFIX" value="log" />
<!-- 日志文件名称-->
<property name="LOG_PREFIX_ERROR" value="error" />
<!-- 日志文件编码-->
<property name="LOG_CHARSET" value="UTF-8" />
<property name="LOG_FILE" value="${LOG_HOME}" />
<!-- 日志文件路径+日期-->
<property name="LOG_DIR" value="${LOG_HOME}/history/%d{yyyyMMdd}" />
<!--对日志进行格式化-->
<property name="LOG_MSG" value="-| [%d{yyyyMMdd HH:mm:ss.SSS}] | [%level] | [${HOSTNAME}] | [%thread] | [%logger{36}] | --> %msg|%n "/>
<!--文件大小,默认50MB-->
<property name="MAX_FILE_SIZE" value="50MB" />
<!-- 配置日志的滚动时间 ,表示只保留最近 60 天的日志-->
<property name="MAX_HISTORY" value="60"/>
<!--输出到控制台-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 输出的日志内容格式化-->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_MSG}</pattern>
</layout>
</appender>
<!--输出到文件-->
<appender name="0" class="ch.qos.logback.core.rolling.RollingFileAppender">
</appender>
<!-- 定义 ALL 日志的输出方式:-->
<appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志文件路径,日志文件名称-->
<File>${LOG_FILE}/all_${LOG_PREFIX}.log</File>
<!-- 设置滚动策略,当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件路径,新的 ALL 日志文件名称,“ i ” 是个变量 -->
<FileNamePattern>${LOG_DIR}/all_${LOG_PREFIX}%i.log</FileNamePattern>
<!-- 配置日志的滚动时间 ,表示只保留最近 10 天的日志-->
<MaxHistory>${MAX_HISTORY}</MaxHistory>
<!--当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB-->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 输出的日志内容格式化-->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${LOG_MSG}</pattern>
</layout>
</appender>
<!-- 定义 ERROR 日志的输出方式:-->
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 下面为配置只输出error级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<OnMismatch>DENY</OnMismatch>
<OnMatch>ACCEPT</OnMatch>
</filter>
<!--日志文件路径,日志文件名称-->
<File>${LOG_FILE}/error_${LOG_PREFIX}.log</File>
<!-- 设置滚动策略,当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件路径,新的 ERR 日志文件名称,“ i ” 是个变量 -->
<FileNamePattern>${LOG_DIR}/err_${LOG_PREFIX}%i.log</FileNamePattern>
<!-- 配置日志的滚动时间 ,表示只保留最近 10 天的日志-->
<MaxHistory>${MAX_HISTORY}</MaxHistory>
<!--当天的日志大小超过 ${MAX_FILE_SIZE} 文件大小时候,新的内容写入新的文件, 默认10MB-->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 输出的日志内容格式化-->
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>${LOG_MSG}</Pattern>
</layout>
</appender>
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>127.0.0.1:9601</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>
<!-- additivity 设为false,则logger内容不附加至root ,配置以配置包下的所有类的日志的打印,级别是 ERROR-->
<logger name="org.springframework" level="ERROR" />
<logger name="org.apache.commons" level="ERROR" />
<logger name="org.apache.zookeeper" level="ERROR" />
<logger name="com.alibaba.dubbo.monitor" level="ERROR"/>
<logger name="com.alibaba.dubbo.remoting" level="ERROR" />
<!-- ${LOG_ROOT_LEVEL} 日志级别 -->
<root level="${LOG_ROOT_LEVEL}">
<!-- 标识这个"${STDOUT}"将会添加到这个logger -->
<appender-ref ref="${STDOUT}"/>
<!-- FILE_ALL 日志输出添加到 logger -->
<appender-ref ref="FILE_ALL"/>
<appender-ref ref="logstash"/>
<!-- FILE_ERROR 日志输出添加到 logger -->
<!--<appender-ref ref="FILE_ERROR"/>-->
</root>
</configuration>
3.3 创建测试controller,生成日志
配置1
@SpringBootApplication(exclude= DataSourceAutoConfiguration.class)
public class ElasticsearchDemoSpringApplication {
public static void main(String[] args) {
SpringApplication.run(ElasticsearchDemoSpringApplication.class, args);
}
}
@RestController
@Slf4j
public class ControllerTest {
@GetMapping("/test")
public String hello(){
log.info("进入-----访问到当前接口:");
log.info("当前时间{}:", System.currentTimeMillis());
log.info("结束-----访问结束接口:");
return "this is a test controller method";
}
}
3.4 浏览器访问
http://localhost:8081/test
4. Kibana (版本:8.2.2)
4.1 启动
doc窗口启动
E:
cd E:\log\kibana-8.2.2
bin\kibana
4.2 es生成token令牌,并记录
E:
cd E:\log\elasticsearch-8.2.2\bin
elasticsearch-create-enrollment-token -s kibana
记录下值
4.3 浏览器打开界面显示地址
填写上一步的token值
4.4 初始完成后,关闭,修改E:\log\kibana-8.2.2\config\kibana.yml文件
文件最后新增配置(界面中文)
i18n.locale: "zh-CN"
4.5 再次启动
E:
cd E:\log\kibana-8.2.2
bin\kibana
4.6 浏览器访问 http://localhost:5601/
输入1.2步骤新建的用户
4.7 配置