springboot 整合 elk (Elasticsearch+Logstash+Kibana)

Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志

Logstash 收集日志 Elasticsearch 处理 Kibana 展示

springboot 整合 elk 两种方式

  1. 分别下载分别配置比较麻烦但是可以自定义灵活
  2. 直接下载elk(集成好的) 一步到位

今天介绍一下第二种方式
在docker 环境下进行

1.下载镜像

  1. docker pull sebp/elk

2.生成容器

  1. 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 root 2.修改配置sysctl.conf vi /etc/sysctl.conf 3.末尾添加如下配置 vm.max_map_count=655360 4.执行命令 sysctl -p

5044 是 Logstash的端口
9200 是 Elasticsearch的端口
5601 是 Kibana的端口
image.png
image.png

3.需要修改 logstash 配置

进入容器

  1. docker exec -it elk /bin/bash

修改文件

  1. vi /etc/logstash/conf.d/02-beats-input.conf

删除原来的 粘贴新的

  1. input {
  2. tcp {
  3. port => 5044
  4. codec => json_lines
  5. }
  6. }
  7. output{
  8. elasticsearch {
  9. hosts => ["localhost:9200"]
  10. }
  11. }

4.重启elk

  1. docker restart elk

5.测试访问

访问http://127.0.0.1:5601 (虚拟机 IP + 端口)测试能不能打开页面
出现页面先别操作先去整合sprongboot项目
image.png
访问 http://192.168.74.131:9200/ 出现elk版本信息
image.png

6.整合springboot 项目-配置xml

查看如何创建

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration debug="false">
  3. <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
  4. <property name="LOG_HOME" value="./logs" />
  5. <!-- 控制台输出 -->
  6. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  7. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  8. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  9. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n</pattern>
  10. </encoder>
  11. </appender>
  12. <!-- 按照每天生成日志文件 -->
  13. <appender name="info-file" class="ch.qos.logback.core.rolling.RollingFileAppender">
  14. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  15. <!--日志文件输出的文件名-->
  16. <FileNamePattern>${LOG_HOME}/runtime-info-%d{yyyy-MM-dd}.log</FileNamePattern>
  17. <!--日志文件保留天数-->
  18. <MaxHistory>30</MaxHistory>
  19. </rollingPolicy>
  20. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  21. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  22. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  23. </encoder>
  24. <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印WARN日志 -->
  25. <level>INFO</level>
  26. <onMatch>ACCEPT</onMatch>
  27. <onMismatch>DENY</onMismatch>
  28. </filter>
  29. <!--日志文件最大的大小-->
  30. <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  31. <MaxFileSize>10MB</MaxFileSize>
  32. </triggeringPolicy>
  33. </appender>
  34. <appender name="debug-file" class="ch.qos.logback.core.rolling.RollingFileAppender">
  35. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  36. <!--日志文件输出的文件名-->
  37. <FileNamePattern>${LOG_HOME}/runtime-debug-%d{yyyy-MM-dd}.log</FileNamePattern>
  38. <!--日志文件保留天数-->
  39. <MaxHistory>30</MaxHistory>
  40. </rollingPolicy>
  41. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  42. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  43. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  44. </encoder>
  45. <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印WARN日志 -->
  46. <level>DEBUG</level>
  47. <onMatch>ACCEPT</onMatch>
  48. <onMismatch>DENY</onMismatch>
  49. </filter>
  50. <!--日志文件最大的大小-->
  51. <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  52. <MaxFileSize>10MB</MaxFileSize>
  53. </triggeringPolicy>
  54. </appender>
  55. <appender name="error-file" class="ch.qos.logback.core.rolling.RollingFileAppender">
  56. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  57. <!--日志文件输出的文件名-->
  58. <FileNamePattern>${LOG_HOME}/runtime-error-%d{yyyy-MM-dd}.log</FileNamePattern>
  59. <!--日志文件保留天数-->
  60. <MaxHistory>30</MaxHistory>
  61. </rollingPolicy>
  62. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  63. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  64. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  65. </encoder>
  66. <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印WARN日志 -->
  67. <level>ERROR</level>
  68. <onMatch>ACCEPT</onMatch>
  69. <onMismatch>DENY</onMismatch>
  70. </filter>
  71. <!--日志文件最大的大小-->
  72. <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  73. <MaxFileSize>10MB</MaxFileSize>
  74. </triggeringPolicy>
  75. </appender>
  76. <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
  77. <param name="Encoding" value="UTF-8"/>
  78. <destination>192.168.74.131:5044</destination>
  79. <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" >
  80. <customFields>{"appname":"jacob"}</customFields>
  81. </encoder>
  82. </appender>
  83. <!-- 日志输出级别 -->
  84. <root level="INFO">
  85. <appender-ref ref="STDOUT" />
  86. <appender-ref ref="info-file" />
  87. <appender-ref ref="debug-file" />
  88. <appender-ref ref="error-file" />
  89. <appender-ref ref="logstash" />
  90. </root>
  91. </configuration>

注意其中的链接配置链接自己的Logstash

<destination>192.168.74.131:5044</destination>

7.配置kibana

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