Tidak Ada Deskripsi

Builder 648d1e1488 Add Grafana dashboards, HPA configs, and Prometheus alert rules for Shop Recycle monitoring 2 bulan lalu
k8s 648d1e1488 Add Grafana dashboards, HPA configs, and Prometheus alert rules for Shop Recycle monitoring 2 bulan lalu
shop-recycle-common 184746ccb8 gather all stuff 2 bulan lalu
shop-recycle-gateway 1652401914 fix: correct logback JSON configuration and add build verification script 2 bulan lalu
shop-recycle-order-service 1652401914 fix: correct logback JSON configuration and add build verification script 2 bulan lalu
shop-recycle-payment-service 1652401914 fix: correct logback JSON configuration and add build verification script 2 bulan lalu
shop-recycle-web 648d1e1488 Add Grafana dashboards, HPA configs, and Prometheus alert rules for Shop Recycle monitoring 2 bulan lalu
.dockerignore 184746ccb8 gather all stuff 2 bulan lalu
.gitignore 184746ccb8 gather all stuff 2 bulan lalu
Dockerfile.multiarch 921e632cc9 修改了代码问题,CI新版本 2 bulan lalu
Jenkinsfile d77f8d30af 优化:启用 Docker 并行构建和 Maven 缓存 2 bulan lalu
Jenkinsfile.optimized 921e632cc9 修改了代码问题,CI新版本 2 bulan lalu
README.md 184746ccb8 gather all stuff 2 bulan lalu
build-docker-optimized.ps1 921e632cc9 修改了代码问题,CI新版本 2 bulan lalu
build-docker-optimized.sh b1f023d88c feat: Fix Helm deployment configuration and add startupProbe for Java application startup 2 bulan lalu
build-docker-optimized.sh.backup b1f023d88c feat: Fix Helm deployment configuration and add startupProbe for Java application startup 2 bulan lalu
build-docker.ps1 184746ccb8 gather all stuff 2 bulan lalu
build-docker.sh 921e632cc9 修改了代码问题,CI新版本 2 bulan lalu
docker-compose.yml 921e632cc9 修改了代码问题,CI新版本 2 bulan lalu
init-dependencies.ps1 921e632cc9 修改了代码问题,CI新版本 2 bulan lalu
init-dependencies.sh 921e632cc9 修改了代码问题,CI新版本 2 bulan lalu
k8s-rendered.yaml 921e632cc9 修改了代码问题,CI新版本 2 bulan lalu
pom.xml 184746ccb8 gather all stuff 2 bulan lalu
start.ps1 184746ccb8 gather all stuff 2 bulan lalu
start.sh a2ea3a3bac Initial commit: Complete Spring Cloud log demo system with batch testing APIs 2 bulan lalu
verify-build.sh 1652401914 fix: correct logback JSON configuration and add build verification script 2 bulan lalu

README.md

Spring Cloud日志测试演示系统

完整的Spring Cloud + Vue前端日志系统,用于测试和演示结构化JSON日志的生成。

✨ 核心特性

无UI快速测试 - 一条命令生成100个订单,观看JSON日志
结构化JSON日志 - 完全兼容Loki/ELK/Splunk的日志格式
零侵入MDC - 业务代码无需改动,拦截器自动注入日志字段
前后端完整 - Vue UI + Spring Cloud Gateway + 微服务
多种测试模式 - 单条、批量、场景、压力测试
生产级配置 - Docker支持、日志异步处理、环境化配置

📋 项目结构

spring-cloud-log-demo/
├── shop-recycle-common/              # 公共模块 (日志拦截器、DTO)
├── shop-recycle-gateway/             # API网关 (端口 8080)
├── shop-recycle-order-service/       # 订单服务 (端口 8081)
├── shop-recycle-payment-service/     # 支付服务 (端口 8082)
└── shop-recycle-web/                 # Vue前端 (端口 5173)

🚀 快速开始

1. 后端服务启动

前置条件:

  • JDK 1.8+
  • Maven 3.6+

构建项目:

cd spring-cloud-log-demo
mvn clean install

快速命令 - 启动所有服务 (Windows PowerShell):

.\start.ps1

或 Linux/Mac:

chmod +x start.sh && ./start.sh

2. 快速测试 (无需UI!)

一句命令生成50个订单,观看日志:

curl http://localhost:8080/api/test/order/batch?count=50

在后端Terminal中立即看到类似的JSON日志:

{
  "ts":"2024-02-06T10:30:45.123Z",
  "level":"INFO",
  "msg":"测试订单生成成功 orderId=ORD-A1B2C3D4",
  "traceId":"550e8400-e29b-41d4-a716",
  "uri_group":"/test/*",
  "event_class":"order",
  "status":"success",
  "duration":"145",
  "app":"shop-recycle-order-service"
}

3. 或使用前端UI

访问 http://localhost:5173,点击按钮一键生成数据。

📚 详细文档

日志观察

生成的日志格式 (JSON)

每个请求都会生成以下格式的结构化日志:

{
  "ts":"2024-02-06T10:30:45.123Z",
  "level":"INFO",
  "logger":"com.shop.recycle.order.service.OrderService",
  "msg":"订单已创建 orderId=ORD-12345678",
  "traceId":"550e8400-e29b-41d4-a716-446655440000",
  "uri":"/api/order/create",
  "uri_group":"/order/*",
  "duration":"145",
  "userId":"user123",
  "event_class":"order",
  "error":"-",
  "status":"success",
  "thread":"http-nio-8081-exec-1",
  "app":"shop-recycle-order-service",
  "env":"local"
}

关键字段说明

字段 含义 示例
traceId 链路追踪ID 550e8400-e29b-41d4
uri_group 规范化URI分组 /order/*
event_class 业务事件分类 order, payment
duration 请求耗时(ms) 145
status 请求状态 success, client_error, server_error
app 应用名 shop-recycle-order-service
env 环境标识 local, dev, prod

🧪 Testing Scenarios 测试场景

Order Service 订单服务

场景1: 创建订单

curl -X POST http://localhost:8080/api/order/create \
  -H "Content-Type: application/json" \
  -H "X-User-Id: user001" \
  -d '{
    "userId":"user001",
    "price":99.99,
    "description":"test order"
  }'

场景2: 删除订单

curl -X POST http://localhost:8080/api/order/delete/ORD-XXXXXXXX

Payment Service 支付服务

场景3: 支付订单

curl -X POST http://localhost:8080/api/payment/pay \
  -H "Content-Type: application/json" \
  -d '{
    "orderId":"ORD-XXXXXXXX",
    "amount":99.99,
    "paymentMethod":"WECHAT"
  }'

场景4: 退款

curl -X POST http://localhost:8080/api/payment/refund/PAY-XXXXXXXX

📝 实现的日志功能

自动MDC注入 - LoggingMdcInterceptor自动填充:

  • traceId (链路追踪)
  • uri / uri_group (URL规范化)
  • event_class (事件分类)
  • duration (请求耗时)
  • status (HTTP状态)

异步日志输出 - AsyncAppender确保业务不阻塞

JSON结构化输出 - LogstashEncoder生成可被Loki/ELK解析的JSON

零业务代码侵入 - 拦截器层统一处理,业务代码无需改动

🔍 日志监控查询

命令行查询示例

查看所有订单相关日志:

grep "event_class.*order" logs/app.log | jq .

查看失败请求:

grep "status.*error" logs/app.log | jq '.[] | {uri_group, error, duration}'

P95延迟分析:

grep "duration" logs/app.log | jq '.duration' | sort -n | tail -5

接入Loki/Grafana后的查询

订单QPS (Loki LogQL):

sum by (uri_group) (rate({app="shop-recycle-order-service", event_class="order"}[1m]))

错误率告警 (Prometheus):

(rate(requests_total{status="error"}[5m]) / rate(requests_total[5m])) > 0.05

📦 打包部署

Docker部署

构建Gateway镜像:

cd shop-recycle-gateway
mvn clean package docker:build

启动容器:

docker run -d -p 8080:8080 \
  -e SPRING_PROFILES_ACTIVE=prod \
  shop-recycle-gateway:1.0.0

🔧 故障排查

问题1: 前端无法连接后端

检查: 
1. 所有后端服务是否启动
2. http://localhost:8080 是否可访问
3. 浏览器控制台是否有CORS错误

问题2: 日志未出现

1. 检查logback-spring.xml是否正确加载
2. 确认logging.level配置为DEBUG
3. 查看启动日志是否有错误

问题3: 支付服务报错

Payment Service有30%的失败率用于测试异常处理
重新尝试支付请求即可

📚 相关资源

许可证

MIT License