Logback+kafka+ELK搭建微服务日志

痛定思痛。 2021-11-05 05:48 806阅读 0赞

Logback+kafka+ELK搭建微服务日志

  • 前言
  • 环境准备
    • 安装zookeeper
    • 安装kafka
    • 安装elasticsearch
    • 安装logstash
    • 安装kibana
    • 配置Logback
      • pom文件改造
      • 新增logback-spring.xml
      • boot配置文件一下
    • 测试
    • kibana使用

前言

微服务下的日志不能采用原先单一架构的日志系统,因为日志文件分散在各个服务器上面,对于排查问题很不友好。我们的目标是把所有的服务产生的日志都聚合到一起。所以采用Logback+kafka+ELK的方法来搭建微服务日志。
大体流程是是通过logback打印日志,然后将日志通过kafka消息队列发送到Logstash,经过处理以后存储到Elasticsearch中,然后通过Kibana图形化界面进行分析和处理。

环境准备

  1. window环境
  2. Spring boot 2.0.3.RELEASE
  3. elasticsearch-7.3.0
  4. kafka_2.11-2.3.0
  5. kibana-7.3.0-windows-x86_64
  6. logstash-7.3.0
  7. zookeeper-3.4.12

安装zookeeper

下载地址:http://mirror.bit.edu.cn/apache/zookeeper/
因为kafka依赖zookeeper,所以我们需要按照zookeeper。下载下来之后直接解压。
将目录中conf下的配置文件 zoo_sample.cfg 重命名 zoo.cfg即可(使用默认配置即可)。

  1. #默认端口2181
  2. clientPort=2181
  3. 之后 双击bin\zkServer.cmd 即可

安装kafka

下载地址:http://kafka.apache.org/downloads
注意要下载二进制的别下载源码
下载下来之后直接解压。一样使用默认的配置文件即可

  1. # 如果zookeeper的端口修改过 则需要将这里需要改一下
  2. zookeeper.connect=localhost:2181
  3. (建议把地址改成ip)
  4. listeners=PLAINTEXT://172.16.12.67:9092
  5. cmd启动 bin\windows>kafka-server-start.bat ..\..\config\server.properties

安装elasticsearch

下载地址:https://www.elastic.co/cn/downloads/elasticsearch
下载下来之后直接解压。一样使用默认的配置文件即可

  1. 双击 bin\elasticsearch.bat

安装logstash

下载地址:https://www.elastic.co/cn/downloads/logstash
下载下来之后直接解压。

  1. # 修改logstash-simple.con 注意这里写的kafka配置到时候要和Logback配置的一样
  2. input {
  3. kafka {
  4. bootstrap_servers => "172.16.12.67:9092"
  5. topics => ["kafka-log"]
  6. codec => json
  7. }
  8. }
  9. output {
  10. elasticsearch {
  11. hosts => ["127.0.0.1:9200"]
  12. index => "kafka-log-%{+YYYY.MM.dd}"
  13. }
  14. stdout{
  15. codec=>rubydebug
  16. }
  17. }
  18. cmd启动 logstash.bat -f logstash-simple.conf (我把配置文件放到bin目录下了 不放的话就写配置文件的相对地址)

安装kibana

下载地址:https://www.elastic.co/cn/downloads/kibana
下载下来之后直接解压。一样使用默认的配置文件即可

  1. 双击启动 kibana.bat即可

配置Logback

pom文件改造

  1. <!-- 日志同步至kafka -->
  2. <dependency>
  3. <groupId>org.apache.kafka</groupId>
  4. <artifactId>kafka-clients</artifactId>
  5. <version>2.1.1</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>net.logstash.logback</groupId>
  9. <artifactId>logstash-logback-encoder</artifactId>
  10. <version>4.11</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>com.github.danielwegener</groupId>
  14. <artifactId>logback-kafka-appender</artifactId>
  15. <version>0.1.0</version>
  16. <scope>runtime</scope>
  17. </dependency>

新增logback-spring.xml

在这里插入图片描述

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,
  3. 默认单位是毫秒当scan为true时,此属性生效。默认的时间间隔为1分钟。 debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。
  4. 默认值为false。 -->
  5. <!-- <configuration scan="false" scanPeriod="60 seconds" debug="false"> -->
  6. <configuration>
  7. <!--设置上下文名称,用于区分不同应用程序的记录。一旦设置不能修改, 可以通过%contextName来打印日志上下文名称 -->
  8. <contextName>kafka-log-test</contextName>
  9. <!-- 定义日志的根目录 -->
  10. <property name="logDir" value="D:/springcloud-log/kafka-log" />
  11. <!-- 定义日志文件名称 -->
  12. <property name="logName" value="kafkaLog"></property>
  13. <!-- ConsoleAppender 表示控制台输出 -->
  14. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  15. <!-- 日志输出格式: %d表示日期时间, %thread表示线程名, %-5level:级别从左显示5个字符宽度, %logger{50}
  16. 表示logger名字最长50个字符,否则按照句点分割。 %msg:日志消息, %n是换行符 -->
  17. <encoder>
  18. <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
  19. </encoder>
  20. </appender>
  21. <!-- 异常错误日志记录到文件 -->
  22. <appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  23. <!-- <Encoding>UTF-8</Encoding> -->
  24. <File>${logDir}/${logName}.log</File>
  25. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  26. <FileNamePattern>${logDir}/history/${myspringboottest_log}.%d{yyyy-MM-dd}.rar</FileNamePattern>
  27. <maxHistory>30</maxHistory>
  28. </rollingPolicy>
  29. <encoder>
  30. <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
  31. </encoder>
  32. </appender>
  33. <appender name="kafkaAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender">
  34. <encoder class="com.github.danielwegener.logback.kafka.encoding.LayoutKafkaMessageEncoder">
  35. <layout class="net.logstash.logback.layout.LogstashLayout" >
  36. <includeContext>false</includeContext>
  37. <includeCallerData>true</includeCallerData>
  38. <customFields>{"system":"kafka-log-test"}</customFields>
  39. <fieldNames class="net.logstash.logback.fieldnames.ShortenedFieldNames"/>
  40. </layout>
  41. <charset>UTF-8</charset>
  42. </encoder>
  43. <!--kafka topic 需要与配置文件里面的topic一致 否则kafka会沉默并鄙视你-->
  44. <topic>kafka</topic>
  45. <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.HostNameKeyingStrategy" />
  46. <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" />
  47. <producerConfig>bootstrap.servers=172.16.12.67:9092</producerConfig>
  48. </appender>
  49. <!--异步写入kafka,尽量不占用主程序的资源-->
  50. <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
  51. <neverBlock>true</neverBlock>
  52. <includeCallerData>true</includeCallerData>
  53. <discardingThreshold>0</discardingThreshold>
  54. <queueSize>2048</queueSize>
  55. <appender-ref ref="kafkaAppender" />
  56. </appender>
  57. <root level="INFO">
  58. <appender-ref ref="CONSOLE" />
  59. <appender-ref ref="logfile"/>
  60. <appender-ref ref="ASYNC" />
  61. </root>
  62. </configuration>

boot配置文件一下

  1. logging:
  2. config: classpath:logback-spring.xml

测试

  1. logger.info("调用成功");

如果出现这种的日志则说明ok了
在这里插入图片描述

kibana使用

新建一下index patterns 就行了 索引就是logstash配置文件里面配置的。
在这里插入图片描述
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,806人围观)

还没有评论,来说两句吧...

相关阅读