logstash采集springboot微服务日志

前面一篇文章介绍了logstash采集nginx日志,这次介绍一下通过logstash采集springboot微服务中指定格式的日志。

需求

现有日志示例格式如下:

bash 复制代码
2025-07-21 11:16:37.629  INFO 8 --- [reactor-http-nio-1] c.test.authgateway.filter.GateWayFilter  : logstashVO:{"body":"{}","fullName":"TEST","time":1753067797629,"url":"/test/findUserInfo.do","userId":1088479580471164928}
2025-07-21 11:16:37.629  INFO 8 --- [reactor-http-nio-1] c.test.authgateway.filter.GateWayFilter  : logstashVO:{"body":"{}","fullName":"TEST","time":1753067797629,"url":"/test/findUserInfo.do","userId":1088479580471164928}
2025-07-21 11:16:37.629  INFO 8 --- [reactor-http-nio-1] c.test.authgateway.filter.GateWayFilter  : logstashVO:{"body":"{}","fullName":"TEST","time":1753067797629,"url":"/test/findUserInfo.do","userId":1088479580471164928}

需要采集"logstashVO:"之后的JSON格式字符串,该功能主要通过网关服务收集用户访问行为,当然根据用户需求可以做的事情还可以很多,这里就不一一列举。

logstash配置

bash 复制代码
input {
    file {
        path => ["/data/logs/spring.log"]
        type => "test"
        start_position => "beginning"
    }
}
filter {
    if "c.test.authgateway.filter.GateWayFilter  : logstashVO:" not in [message] { 
        drop {}
    }
    ruby {
        code => "
            event.set('@timestamp', LogStash::Timestamp.at(event.get('@timestamp').time.localtime + 8*60*60))
        "
    }
    grok {
        match => { 
           "message" => "c\.test\.authgateway\.filter\.GateWayFilter  \: logstashVO\:%{GREEDYDATA:logstashVO}"
        }
    }
    json {
        source => "logstashVO"
    }
    json {
        source => "body"
        target => "body"
    }
    mutate {
        remove_field => ["@version","event","host","logstashVO"]
    }   
}

output {
    stdout {
        codec => rubydebug
    }
    kafka {
        bootstrap_servers => "10.16.39.121:9092"
        topic_id => "test2-logs"
        codec => json
        acks => "all"
        retries => 5
        batch_size => 16384
    }
}

注意这里的输入input.file.path对应的路径一定要是镜像中的路径/data/logs/,而不能为宿主机里的路径/data/public/logstash/logs

启动镜像

bash 复制代码
docker run --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 \
--privileged=true --network=host --restart=always --name logstash \
-v /data/public/logstash/config/:/usr/share/logstash/config/ \
-v /data/public/logstash/logs/:/data/logs/ \
-d logstash:8.4.0

检查日志采集

启动后,可以通过Offset Explorer连接Kafka检查是否正确采集到了相关的日志。

测试

bash 复制代码
echo '2025-07-21 11:16:37.629  INFO 8 --- [reactor-http-nio-1] c.test.authgateway.filter.GateWayFilter  : logstashVO:{"body":"{}","fullName":"TEST","time":1753067797629,"url":"/test/findUserInfo.do","userId":1088479580471164928}' >> /data/public/logstash/logs/spring.log

执行一下,可以看到新日志进入到Kafka中

写入Kafka中日志格式如下:

bash 复制代码
{
  "@timestamp": "2025-07-26T17:48:58.874280406Z",
  "body": {},
  "url": "/test/findUserInfo.do",
  "fullName": "TEST",
  "log": {
    "file": {
      "path": "/data/logs/spring.log"
    }
  },
  "type": "test",
  "time": 1753067797629,
  "userId": 1088479580471164928,
  "message": "2025-07-21 11:16:37.629  INFO 8 --- [reactor-http-nio-1] c.test.authgateway.filter.GateWayFilter  : logstashVO:{\"body\":\"{}\",\"fullName\":\"TEST\",\"time\":1753067797629,\"url\":\"/test/findUserInfo.do\",\"userId\":1088479580471164928}"
}
相关推荐
z晨晨1 小时前
互联网大厂Java求职面试实战:Spring Boot与微服务场景深度解析
java·spring boot·redis·微服务·kafka·spring security·电商
码农飞哥1 小时前
AI编程开发系统001-基于SpringBoot+Vue的旅游民宿租赁系统
vue.js·spring boot·毕业设计·ai编程·计算机源码
武子康3 小时前
Java-138 深入浅出 MySQL Spring Boot 事务传播机制全解析:从 REQUIRED 到 NESTED 的实战详解 传播机制原理
java·大数据·数据库·spring boot·sql·mysql·事务
一只学java的小汉堡4 小时前
Spring Boot 配置详解:从引导器到注解实战(初学者指南)
java·spring boot·后端
学编程的小鬼13 小时前
SpringBoot 自动装配原理剖析
java·spring boot·后端
老华带你飞16 小时前
机电公司管理小程序|基于微信小程序的机电公司管理小程序设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·微信小程序·小程序·机电公司管理小程序
拾忆,想起16 小时前
AMQP协议深度解析:消息队列背后的通信魔法
java·开发语言·spring boot·后端·spring cloud
不会吃萝卜的兔子17 小时前
springboot websocket 原理
spring boot·后端·websocket
Fency咖啡18 小时前
Spring Boot 内置日志框架 Logback - 以及 lombok 介绍
spring boot·后端·logback
西岭千秋雪_19 小时前
RAG核心特性:ETL
数据仓库·人工智能·spring boot·ai编程·etl