SpringBoot接入轻量级分布式日志框架GrayLog

电子说

1.3w人已加入

描述

 

  •  
 

在微服务架构中,一个服务通常都会有多个实例,而这些服务实例可能会被部署到不同的机器或虚拟容器上。此时对于日志数据的查看和分析就会变得困难起来,因为这些服务的日志数据都散落在各自实例所在的机器或容器上。例如,我现在要在订单服务里查找一个订单id为1的日志,而订单服务有10个实例并且部署在10台不同的机器上,那么我就得一台台的去找这个日志数据。所以这时候我们就需要有一个可以实现日志聚合的工具,将所有实例的日志数据都聚合在一个地方,那么我们就不需要到每个实例去找日志了,而本文将使用的日志聚合工具为Graylog

部署Graylog

老样子,直接上docker-compose,如果一直跟着我的步伐,应该对着不陌生了。docker-compose.yml 的内容其实我也是抄官网的,这里还是贴下吧(就不用你们翻了)

version: '3'
services:
    mongo:
      image: mongo:4.2
      networks:
        - graylog
    elasticsearch:
      image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
      environment:
        - http.host=0.0.0.0
        - transport.host=localhost
        - network.host=0.0.0.0
        - "ES_JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true -Xms512m -Xmx512m"
      ulimits:
        memlock:
          soft: -1
          hard: -1
      deploy:
        resources:
          limits:
            memory: 1g
      networks:
        - graylog
    graylog:
      image: graylog/graylog:4.2
      environment:
        - GRAYLOG_PASSWORD_SECRET=somepasswordpepper
        - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
        - GRAYLOG_HTTP_EXTERNAL_URI=http://ip:9009/ # 这里注意要改ip
      entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 --  /docker-entrypoint.sh
      networks:
        - graylog
      restart: always
      depends_on:
        - mongo
        - elasticsearch
      ports:
        - 9009:9000
        - 1514:1514
        - 1514:1514/udp
        - 12201:12201
        - 12201:12201/udp
networks:
    graylog:
      driver: bridg

这个文件里唯一需要改动的就是 ip (本来的端口是 9000 的,我由于已经占用了 9000 端口了,所以我这里把端口改成了 9009 ,你们可以随意)

嗯,写完 docker-compose.yml 文件,直接 docker-compose up -d 它就启动起来咯。

启动以后,我们就可以通过 ip:port 访问对应的Graylog后台地址了,默认的账号和密码是 admin/admin

框架

随后,我们配置下 inputs 的配置,找到 GELF UDP ,然后点击 Launch new input ,只需要填写 Title 字段,保存就完事了(其他不用动)。

框架

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

Spring Boot 集成GrayLog

首先创建一个SpringBoot项目,SpringBoot默认自带的日志框架是Logback,我们可以到 Graylog组件市场查找Logback相应的组件。

添加依赖如下:

<dependency>
  <groupId>de.siegmargroupId>
  <artifactId>logback-gelfartifactId>
  <version>3.0.0version>
dependency>

接着在项目的resources目录下,新建一个logback.xml文件,编辑文件内容如下:

<appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
  
  <graylogHost>ipgraylogHost>
  
  <graylogPort>12201graylogPort>
  
  <maxChunkSize>508maxChunkSize>
  
  <useCompression>trueuseCompression>
  <encoder class="de.siegmar.logbackgelf.GelfEncoder">
    
    <includeRawMessage>falseincludeRawMessage>
    <includeMarker>trueincludeMarker>
    <includeMdcData>trueincludeMdcData>
    <includeCallerData>falseincludeCallerData>
    <includeRootCauseData>falseincludeRootCauseData>
    
    <includeLevelName>trueincludeLevelName>
    <shortPatternLayout class="ch.qos.logback.classic.PatternLayout">
      <pattern>%m%nopexpattern>
    shortPatternLayout>
    <fullPatternLayout class="ch.qos.logback.classic.PatternLayout">
      <pattern>%d - [%thread] %-5level %logger{35} - %msg%npattern>
    fullPatternLayout>

    
    <staticField>app_name:austinstaticField>
  encoder>
appender>

在这个配置信息里,唯一要改的也只是 ip 的地址,到这里接入就完毕了,我们再打开控制台,就能看到日志的信息啦。

框架

配置完成后启动项目,启动完成后正常情况下可以在Graylog的Search界面中查看日志信息:

框架

点击一条日志信息会展开详细的字段:

框架

以上是最简单的日志配置,如果希望对更多配置项进行自定义的话,可以参考该组件的GitHub文档,上面有具体的配置项说明

现在我们已经成功将项目的日志数据发送到了Graylog服务,如果我们想在Graylog上检索日志也很简单,只需要使用一些简单的语法即可,例如我要查询包含Mapping的日志信息:

框架

还可以使用一些条件表达式,例如我要查询message字段包含http,并且日志级别为INFO的日志信息:

框架

常用的日志搜索语法如下:

  • 模糊查询:直接输入要查询的内容,例如:orderid
  • 精确查询:要查询的内容加上引号,例如:"orderid: 11"
  • 指定字段查询:message:http 或 message:"http"
  • 多字段查询:message:(base-service base-web)
  • 多条件查询:message:http AND level_name:ERROR OR source:192.168.0.4

 审核编辑 :李倩


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分