太方便了!SpringBoot+轻量级分布式日志框架GrayLog!
SpringBoot集成GrayLog日志系统实践。相比传统ELK方案,GrayLog配置更轻量,通过GELF格式直接推送日志至GrayLog服务,支持多环境分布式日志收集。文中给出Logback配置示例,只需添加GELFAppender即可实现日志集中管理。GrayLog支持traceId追踪、自定义告警和日志存储策略,显著提升分布式系统问题排查效率。部署采用Docker-compose方式,包
最近晚上加班到快十一点半,在公司楼下喝冰可乐那会儿,咱们组那小王突然拍我一下,说他最近把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啊,不然日志再好也找不到全链路,别问我是怎么知道的……
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)