SpringBoot一键集成GrayLog,那叫一个丝滑

📅 发布时间:2026/7/5 19:49:29 👁️ 浏览次数:
SpringBoot一键集成GrayLog,那叫一个丝滑
在微服务架构中一个服务通常都会有多个实例而这些服务实例可能会被部署到不同的机器或虚拟容器上。此时对于日志数据的查看和分析就会变得困难起来因为这些服务的日志数据都散落在各自实例所在的机器或容器上。例如我现在要在订单服务里查找一个订单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.host0.0.0.0 - transport.hostlocalhost - network.host0.0.0.0 - ES_JAVA_OPTS-Dlog4j2.formatMsgNoLookupstrue -Xms512m -Xmx512m ulimits: memlock: soft: -1 hard: -1 deploy: resources: limits: memory: 1g networks: - graylog graylog: image: graylog/graylog:4.2 environment: - GRAYLOG_PASSWORD_SECRETsomepasswordpepper - GRAYLOG_ROOT_PASSWORD_SHA28c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 - GRAYLOG_HTTP_EXTERNAL_URIhttp://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 集成GrayLog首先创建一个SpringBoot项目SpringBoot默认自带的日志框架是Logback我们可以到 Graylog组件市场查找Logback相应的组件。添加依赖如下dependency groupIdde.siegmar/groupId artifactIdlogback-gelf/artifactId version3.0.0/version /dependency接着在项目的resources目录下新建一个logback.xml文件编辑文件内容如下appender nameGELF classde.siegmar.logbackgelf.GelfUdpAppender !-- Graylog服务的地址 -- graylogHostip/graylogHost !-- UDP Input端口 -- graylogPort12201/graylogPort !-- 最大GELF数据块大小单位字节508为建议最小值最大值为65467 -- maxChunkSize508/maxChunkSize !-- 是否使用压缩 -- useCompressiontrue/useCompression encoder classde.siegmar.logbackgelf.GelfEncoder !-- 是否发送原生的日志信息 -- includeRawMessagefalse/includeRawMessage includeMarkertrue/includeMarker includeMdcDatatrue/includeMdcData includeCallerDatafalse/includeCallerData includeRootCauseDatafalse/includeRootCauseData !-- 是否发送日志级别的名称否则默认以数字代表日志级别 -- includeLevelNametrue/includeLevelName shortPatternLayout classch.qos.logback.classic.PatternLayout pattern%m%nopex/pattern /shortPatternLayout fullPatternLayout classch.qos.logback.classic.PatternLayout pattern%d - [%thread] %-5level %logger{35} - %msg%n/pattern /fullPatternLayout !-- 配置应用名称服务名称通过staticField标签可以自定义一些固定的日志字段 -- staticFieldapp_name:austin/staticField /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