当前位置:   article > 正文

SpringBoot2 集成 ELK 实现日志收集_logstashtcpsocketappender

logstashtcpsocketappender

一 简介

ELK 即 Elasticsearch、Logstash、Kibana 组合起来可以搭建线上日志系统,本文主要讲解使用ELK 来收集 SpringBoot2 应用产生的日志。

二 ELK 各组件作用

  • Elasticsearch:用于存储收集到的日志信息;
  • Logstash:用于收集日志,SpringBoot应用整合了Logstash以后会把日志发送给Logstash,Logstash 再把日志转发给 Elasticsearch;
  • Kibana:通过Web端的可视化界面来查看日志。

三 ELK 各组件安装

3.1 Elasticsearch 和 Kibana 安装请见CentOS 搭建ElasticSearch

3.2 Logstash 安装

(1)下载 LogstashDownload Logstash Free | Get Started Now | Elastic

注意:Logstash 版本建议跟 Elasticsearch 一致。

(2)上传安装包至指定目录、并解压

(3)进入 bin 目录创建 logstash-cloud-project.conf 配置文件,输入如下内容:

  1. input {
  2. tcp {
  3. mode => "server"
  4. host => "0.0.0.0"
  5. port => 4560
  6. codec => json_lines
  7. }
  8. }
  9. output {
  10. elasticsearch {
  11. # es 连接地址
  12. hosts => ["http://172.16.20.101:9200"]
  13. # 索引名称
  14. index => "cloud-project-logstash-%{+YYYY.MM.dd}"
  15. }
  16. }

 (4)进去 bin 目录,启动 logstash 

./logstash -f logstash-cloud-project.conf 

四 Spring Boot2 集成 logstash 

4.1 pom.xml 添加依赖

  1. <!--集成logstash-->
  2. <dependency>
  3. <groupId>net.logstash.logback</groupId>
  4. <artifactId>logstash-logback-encoder</artifactId>
  5. <version>5.3</version>
  6. </dependency>

4.2 配置日志文件logback.xml让logback的日志输出到logstash

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <!--引用默认日志配置-->
  4. <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
  5. <!--使用默认的控制台日志输出实现-->
  6. <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
  7. <!--应用名称-->
  8. <property name="app_name" value="cloud-project" />
  9. <contextName>${app_name}</contextName>
  10. <!-- 日志存放路径 -->
  11. <property name="log.path" value="${user.dir}/logs" />
  12. <!-- 日志输出格式 -->
  13. <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
  14. <!-- 控制台输出 -->
  15. <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
  16. <encoder>
  17. <pattern>%black %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger) - %cyan(%msg%n)</pattern>
  18. </encoder>
  19. </appender>
  20. <!-- 系统日志输出 -->
  21. <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
  22. <file>${log.path}/info.log</file>
  23. <!-- 循环政策:基于时间创建日志文件 -->
  24. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  25. <!-- 日志文件名格式 -->
  26. <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
  27. <!-- 日志最大的历史 30天 -->
  28. <maxHistory>60</maxHistory>
  29. </rollingPolicy>
  30. <encoder>
  31. <pattern>${log.pattern}</pattern>
  32. </encoder>
  33. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  34. <!-- 过滤的级别 -->
  35. <level>INFO</level>
  36. <!-- 匹配时的操作:接收(记录) -->
  37. <onMatch>ACCEPT</onMatch>
  38. <!-- 不匹配时的操作:拒绝(不记录) -->
  39. <onMismatch>DENY</onMismatch>
  40. </filter>
  41. </appender>
  42. <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
  43. <file>${log.path}/error.log</file>
  44. <!-- 循环政策:基于时间创建日志文件 -->
  45. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  46. <!-- 日志文件名格式 -->
  47. <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
  48. <!-- 日志最大的历史 30天 -->
  49. <maxHistory>30</maxHistory>
  50. </rollingPolicy>
  51. <encoder>
  52. <pattern>${log.pattern}</pattern>
  53. </encoder>
  54. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  55. <!-- 过滤的级别 -->
  56. <level>ERROR</level>
  57. <!-- 匹配时的操作:接收(记录) -->
  58. <onMatch>ACCEPT</onMatch>
  59. <!-- 不匹配时的操作:拒绝(不记录) -->
  60. <onMismatch>DENY</onMismatch>
  61. </filter>
  62. </appender>
  63. <!--输出到logstash的appender-->
  64. <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
  65. <!--可以访问的logstash日志收集端口-->
  66. <destination>172.16.20.101:4560</destination>
  67. <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
  68. </appender>
  69. <root level="info">
  70. <appender-ref ref="console" />
  71. </root>
  72. <!--日志-->
  73. <root level="info">
  74. <appender-ref ref="file_info" />
  75. <appender-ref ref="file_error" />
  76. <appender-ref ref="logstash"/>
  77. </root>
  78. </configuration>

配置要点解析:

一般我们不需要自定义控制台输出,可以采用默认配置,具体配置参考console-appender.xml

  1. <!--引用默认日志配置-->
  2. <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
  3. <!--使用默认的控制台日志输出实现-->
  4. <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

应用名称

  1. <!--应用名称-->
  2. <property name="app_name" value="cloud-project" />
  3. <contextName>${app_name}</contextName>

输出到logstash的appender

  1. <!--输出到logstash的appender-->
  2. <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
  3. <!--可以访问的logstash日志收集端口-->
  4. <destination>172.16.16.9:4560</destination>
  5. <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
  6. </appender>

4.3 启动程序,在 kibana 中查看日志信息

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号