SpringBoot+轻量级分布式日志框架GrayLog实践

 更新时间:2025年08月12日 09:09:28   作者:Java程序员 拥抱ai  
将SpringBoot日志迁移至GrayLog的实战经验,称其配置简单、轻量高效,支持多环境分布式,通过GELF格式实现快速日志追踪与报警,尤其强调traceId在跨服务定位中的关键作用,降低维护成本并提升故障排查效率

最近晚上加班到快十一点半,在公司楼下喝冰可乐那会儿,咱们组那小王突然拍我一下,说他最近把SpringBoot配GrayLog,日志这一块感觉有点上头。

我说GrayLog那个玩意儿不是挺轻量的嘛,以前搞ELK动不动就一堆依赖一堆配置,现在整GrayLog感觉人都轻松不少。

刚好今天正好有空,啰嗦两句,要是你哪天日志搞崩溃了可以直接抄作业。

场景拉满:生产线上日志怎么搞?

先说背景啊,我们组一直搞SpringBoot,之前日志那一套都是ELK,Logstash天天吃内存,配置复杂不说,有时候线上临时加个字段得重启,麻烦得一批。

后来有一天我在茶水间刷到GrayLog,想了想,这东西能不能直接上SpringBoot,顺手带一下多环境分布式?你们懂的,现在服务都拆小了,日志要是不能快速定位,真的要人命。

GrayLog配SpringBoot,配置真的就...

其实全流程非常丝滑,直接讲代码,没啥复杂的地方。

比如你们如果用的Logback,直接加一个GELF appender,GELF是GrayLog的日志格式。

贴个配置,别嫌啰嗦:

<!-- resources/logback-spring.xml -->
<configuration>
    <appender name="GRAYLOG" class="me.moocar.logbackgelf.GelfAppender">
        <host>udp:graylog.yourdomain.com</host>
        <port>12201</port>
        <facility>springboot-app</facility>
        <includeFullMDC>true</includeFullMDC>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

    <root level="INFO">
        <appender-ref ref="GRAYLOG"/>
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

就这个配置,我去年做的项目,生产环境一上线就能用。GrayLog这边连UDP端口就行,根本不用折腾ELK那些配置脚本。

有一次我们线上流量一上来,日志量也大,GrayLog直接撑住,浏览器查日志秒出结果。关键是字段还能自定义,想加啥业务字段随便加,MDC那一套直接塞。

举个例子啊,前几天我在调一个分布式的下单链路,三个服务之间互相调用,日志全都聚在GrayLog里。我直接用traceId串起来,点两下就能查到完整调用链,连前端报错都能溯源回后端,前端小姐姐都说“你怎么定位这么快”。其实不是我牛,纯粹是GrayLog香。

你们试试用Logback自带的PatternLayout打印traceId、userId之类的,然后MDC塞一下:

// 每次请求处理加上traceId
MDC.put("traceId", traceId);

GrayLog那边直接搜traceId,跨服务、跨机器全搞定。有一回深夜查线上事故,全靠GrayLog救命,老板还夸了两句。

部署GrayLog其实就一docker-compose,MongoDB和Elasticsearch别太旧,GrayLog本体开起来。你要是本地测随便搞,线上建议挂点盘,日志多的时候Elasticsearch吃点资源,其他真没啥。

version: '3'
services:
mongo:
    image:mongo:5
elasticsearch:
    image:docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    environment:
      -discovery.type=single-node
graylog:
    image:graylog/graylog:5.0
    environment:
      -GRAYLOG_PASSWORD_SECRET=xxxxxx
      -GRAYLOG_ROOT_PASSWORD_SHA2=xxxxxx
      -GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
    depends_on:
      -mongo
      -elasticsearch
    ports:
      -"9000:9000"
      -"12201:12201/udp"

启动完直接网页打开登录就行。配置输入源选GELF/UDP,SpringBoot那边就开始推日志,真的没啥门槛。

对了,还有一个,GrayLog支持自定义Alert,某些严重级别的日志可以直接发钉钉、邮件、Slack,都是点点鼠标的事儿。有回我们数据库挂了,GrayLog一分钟内自动报警,运维直接就拉人进群排查。

还有日志存储策略,可以设自动归档、分组、定期清理,你不用再怕磁盘爆掉。ELK玩过都知道,那玩意儿不手动维护很快就挂了,GrayLog基本不用操心,出事也能很快恢复。

你说GrayLog是不是最强日志框架,这我真不敢说。但反正咱们现在SpringBoot配GrayLog,维护成本低,查日志体验又好,连业务线的同事都能自己搜。搞分布式一定要记得加traceId啊,不然日志再好也找不到全链路,别问我是怎么知道的……

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解IDEA使用Maven项目不能加入本地Jar包的解决方法

    详解IDEA使用Maven项目不能加入本地Jar包的解决方法

    这篇文章主要介绍了详解IDEA使用Maven项目不能加入本地Jar包的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • springboot整合log4j的踩坑实战记录

    springboot整合log4j的踩坑实战记录

    log日志的重要性不言而喻,所以我们需要在系统内根据实际的业务进行日志的整合,下面这篇文章主要给大家介绍了关于springboot整合log4j的踩坑实战记录,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Java 字符终端上获取输入三种的方式分享

    Java 字符终端上获取输入三种的方式分享

    这篇文章主要介绍了Java 字符终端上获取输入三种的方式,有需要的朋友可以参考一下
    2013-11-11
  • spring boot 自动更新静态文件和后台代码的实例

    spring boot 自动更新静态文件和后台代码的实例

    下面小编就为大家分享一篇spring boot 自动更新静态文件和后台代码的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • File.createTempFile创建临时文件的示例详解

    File.createTempFile创建临时文件的示例详解

    这篇文章主要介绍了File.createTempFile创建临时文件的示例详解,在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。 如果感兴趣来了解一下
    2020-07-07
  • springboot自带的缓存@EnableCaching用法

    springboot自带的缓存@EnableCaching用法

    这篇文章主要介绍了springboot自带的缓存@EnableCaching用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • java开发https请求ssl不受信任问题解决方法

    java开发https请求ssl不受信任问题解决方法

    这篇文章主要介绍了java开发https请求ssl不受信任问题解决方法,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • SpringBoot读取yaml文件操作详解

    SpringBoot读取yaml文件操作详解

    YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • Struts 2 实现Action的几种方式

    Struts 2 实现Action的几种方式

    本篇文章主要介绍了Struts 2 实现Action的几种方式,Struts 2框架下实现Action类有三种方式,有兴趣的可以了解一下
    2017-10-10
  • SpringBoot如何将applicaton.properties中的数据绑定到bean中

    SpringBoot如何将applicaton.properties中的数据绑定到bean中

    SpringBoot中我们该如何将applicaton.properties中的数据绑定到bean中呢?在之间我们是可以通过@value注解,在SpringBoot自动启动后,会自动的去相应的路径中去寻找applicaton.properties配置文件,然后将相应的值赋值上,感兴趣的朋友一起看看吧
    2025-05-05

最新评论