springboot 整合 elk (Elasticsearch+Logstash+Kibana)
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志
Logstash 收集日志 Elasticsearch 处理 Kibana 展示
springboot 整合 elk 两种方式
- 分别下载分别配置比较麻烦但是可以自定义灵活
- 直接下载elk(集成好的) 一步到位
今天介绍一下第二种方式
在docker 环境下进行
1.下载镜像
docker pull sebp/elk
2.生成容器
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 5601:5601 -p 5044:5044 -p 9200:9200 -p 9300:9300 -it --name elk sebp/elk
如果启动容器报错: ① Initial heap size set to a larger value than the maximum heap size 解决方法: 调整es参数,或者调大虚拟机内存 √ ② Cenots elasticsearch max virtual memory areas vm.max_map_count [65530] is too low 解决方法: 1.切换到root用户下
su root2.修改配置sysctl.confvi /etc/sysctl.conf3.末尾添加如下配置vm.max_map_count=6553604.执行命令sysctl -p
5044 是 Logstash的端口
9200 是 Elasticsearch的端口
5601 是 Kibana的端口
3.需要修改 logstash 配置
进入容器
docker exec -it elk /bin/bash
修改文件
vi /etc/logstash/conf.d/02-beats-input.conf
删除原来的 粘贴新的
input {tcp {port => 5044codec => json_lines}}output{elasticsearch {hosts => ["localhost:9200"]}}
4.重启elk
docker restart elk
5.测试访问
访问http://127.0.0.1:5601 (虚拟机 IP + 端口)测试能不能打开页面
出现页面先别操作先去整合sprongboot项目
访问 http://192.168.74.131:9200/ 出现elk版本信息
6.整合springboot 项目-配置xml
<?xml version="1.0" encoding="UTF-8"?><configuration debug="false"><!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--><property name="LOG_HOME" value="./logs" /><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n</pattern></encoder></appender><!-- 按照每天生成日志文件 --><appender name="info-file" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名--><FileNamePattern>${LOG_HOME}/runtime-info-%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件保留天数--><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印WARN日志 --><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><!--日志文件最大的大小--><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><appender name="debug-file" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名--><FileNamePattern>${LOG_HOME}/runtime-debug-%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件保留天数--><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印WARN日志 --><level>DEBUG</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><!--日志文件最大的大小--><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><appender name="error-file" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名--><FileNamePattern>${LOG_HOME}/runtime-error-%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件保留天数--><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印WARN日志 --><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><!--日志文件最大的大小--><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><param name="Encoding" value="UTF-8"/><destination>192.168.74.131:5044</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" ><customFields>{"appname":"jacob"}</customFields></encoder></appender><!-- 日志输出级别 --><root level="INFO"><appender-ref ref="STDOUT" /><appender-ref ref="info-file" /><appender-ref ref="debug-file" /><appender-ref ref="error-file" /><appender-ref ref="logstash" /></root></configuration>
注意其中的链接配置链接自己的Logstash
<destination>192.168.74.131:5044</destination>
7.配置kibana

进入home 选择 Manage
选择 index pattents
默认会看到你在xml配置的 appender name=”logstash” 的logstash, 我这里已经配置过了。点击 Create index pattern
然后索引填写logstash*
下面的时间选择 @timestamp 这样数据展示会以时间排序
当然你可以在xml里自定义
logstash-* (*是匹配所有的意思,我这里已经配置过了)
多访问几次有log输出的接口后进入Discover菜单选择一下筛选时间就可以看到了
可以搜索日志,筛选时间等,更多用法查看官网 https://www.elastic.co/cn/
