目录
一、安装ELK
1.1 版本选择
1.2 linux环境安装
1.3 ES配置启动
1.4 Kibana配置启动
1.5 Logstash配置启动
二、项目调整
2.1 pom依赖调整
2.2 yml配置文件调整
2.3 logback-spring配置
三、日志查询分析
3.1 创建索引模式
3.2 查询日志数据
一、安装ELK
1.1 版本选择
版本选择:7.17.0
7.17.x版本是最后一个支持JDK8的版本,后续版本不支持。Elasticsearch 、Kibana、Logstash保持版本一致。
官方文档:支持一览表 | Elastic
1.2 linux环境安装
# 下载elasticsearch
- wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.0-linux-x86_64.tar.gz
- tar -xzf elasticsearch-7.17.0-linux-x86_64.tar.gz
# 下载kibana
- wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.0-linux-x86_64.tar.gz
- tar -xzf kibana-7.17.0-linux-x86_64.tar.gz
# 下载logstash
- wget https://artifacts.elastic.co/downloads/logstash/logstash-7.17.0-linux-x86_64.tar.gz
- tar -xzf logstash-7.17.0-linux-x86_64.tar.gz
1.3 ES配置启动
ES配置 elasticsearch.yml:
# 本机ip
network.host: 192.168.64.128
# 集群发现列表
discovery.seed_hosts: ["192.168.64.128"]
# 不加会报错,据说是一个bug
ingest.geoip.downloader.enabled: false
# 开启安全认证
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
xpack.security.transport.ssl.enabled: true
启动ElasticSearch报错:error updating geoip database-CSDN博客
启动ES后修改密码:
./bin/elasticsearch-setup-passwords interactive
启动访问:http://192.168.64.128:9200/
1.4 Kibana配置启动
修改配置 kibana.yml:
# 本机ip
server.host: "192.168.64.128"
# ES地址
elasticsearch.hosts: ["http://192.168.64.128:9200"]
# 用户名密码(上一步修改的)
elasticsearch.username: "kibana_system"
elasticsearch.password: "123456"
# 配置中文显示
i18n.locale: "zh-CN"
启动访问: http://192.168.64.128:5601/
1.5 Logstash配置启动
创建Logstash读写权限角色和用户:
修改配置 logstash.yml :
# 节点名
node.name: test
# 配置地址
path.config: /home/mlj/soft/ELK/logstash-7.17.0/config/conf/*.conf
# 本机ip
api.http.host: 192.168.64.128
/config/conf/下新建日志同步配置 test-log.conf:
注意output用户名和密码一定要配置有读写权限的用户,否则启动报错401、403
input {tcp {mode => "server"port => 4560host => "192.168.64.128"}
}
filter {}
output {elasticsearch {##具有对索引写权限的用户user => "logstash_to_es"##用户的密码password => "123456"action => "index"hosts => ["http://192.168.64.128:9200"]index => "hbintrade-framework-log-%{+YYYY.MM.dd}"}
}
启动:
二、项目调整
2.1 pom依赖调整
<!-- https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder --><dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.0.1</version></dependency>
注意哦:logstash-logback-encoder,注意与自己的logstash版本匹配,测试logstash7.17与7.4的依赖不兼容启动项目报错:(降低到7.3以下解决)
java.lang.NoSuchMethodError:ch.qos.logback.classic.spi.ILoggingEvent.getInstant()Ljava/time/Instant
2.2 yml配置文件调整
# logstash地址配置
log:logstash-host: 192.168.64.128:4560
2.3 logback-spring配置
主要是:
<!-- 读取SpringBoot配置文件获取logstash的地址和端口 --><springProperty scope="context" name="logstash-host" source="log.logstash-host"/><!-- 将日志文件输出到Logstash --><appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!-- 获取logstash地址作为输出的目的地 --><destination>${logstash-host}</destination><encoder chatset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/></appender>
完整如下:
<configuration><!-- 引用 Spring Boot 的 logback 基础配置 --><include resource="org/springframework/boot/logging/logback/defaults.xml"/><!-- 变量 hbintrade.info.base-package,基础业务包 --><springProperty scope="context" name="hbintrade.info.base-package" source="hbintrade.info.base-package"/><!-- 格式化输出:%d 表示日期,%X{tid} SkWalking 链路追踪编号,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度,%msg:日志消息,%n是换行符 --><property name="PATTERN_DEFAULT"value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} | %highlight(${LOG_LEVEL_PATTERN:-%5p} ${PID:- }) | %boldYellow(%thread [%tid]) %boldGreen(%-40.40logger{39}) | %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/><!-- 读取SpringBoot配置文件获取logstash的地址和端口 --><springProperty scope="context" name="logstash-host" source="log.logstash-host"/><!-- 控制台 Appender --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"><pattern>${PATTERN_DEFAULT}</pattern></layout></encoder></appender><!-- 文件 Appender --><!-- 参考 Spring Boot 的 file-appender.xml 编写 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"><pattern>${PATTERN_DEFAULT}</pattern></layout></encoder><!-- 日志文件名 --><file>${LOG_FILE}</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 滚动后的日志文件名 --><fileNamePattern>${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz}</fileNamePattern><!-- 启动服务时,是否清理历史日志,一般不建议清理 --><cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart><!-- 日志文件,到达多少容量,进行滚动 --><maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}</maxFileSize><!-- 日志文件的总大小,0 表示不限制 --><totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap><!-- 日志文件的保留天数 --><maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30}</maxHistory></rollingPolicy></appender><!-- 异步写入日志,提升性能 --><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志。默认的,如果队列的 80% 已满,则会丢弃 TRACT、DEBUG、INFO 级别的日志 --><discardingThreshold>0</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能。默认值为 256 --><queueSize>256</queueSize><appender-ref ref="FILE"/></appender><!-- SkyWalking GRPC 日志收集,实现日志中心。注意:SkyWalking 8.4.0 版本开始支持 --><appender name="GRPC" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"><pattern>${PATTERN_DEFAULT}</pattern></layout></encoder></appender><!-- 将日志文件输出到Logstash --><appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!-- 获取logstash地址作为输出的目的地 --><destination>${logstash-host}</destination><encoder chatset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/></appender><!-- 本地环境 --><springProfile name="local"><root level="INFO"><appender-ref ref="STDOUT"/><appender-ref ref="GRPC"/> <!-- 本地环境下,如果不想接入 SkyWalking 日志服务,可以注释掉本行 --><appender-ref ref="ASYNC"/> <!-- 本地环境下,如果不想打印日志,可以注释掉本行 --><appender-ref ref="logstash"/></root></springProfile><!-- 其它环境 --><springProfile name="dev,test,stage,prod,default"><root level="INFO"><appender-ref ref="STDOUT"/><appender-ref ref="ASYNC"/><appender-ref ref="GRPC"/><appender-ref ref="logstash"/></root></springProfile>
</configuration>
启动项目:
三、日志查询分析
3.1 创建索引模式
只有匹配上索引模式的索引,才能在Discovery查看到数据
3.2 查询日志数据
参考:
- SpringBoot整合ELK做日志(超完整)_springboot elk-CSDN博客
- elasticsearch7.x 开启安全认证xpack,以及kibana、logstash、filebeat组件连接开启安全认证的es;_elasticsearch安全认证-CSDN博客