# demo-jar **Repository Path**: attacker/demo-jar ## Basic Information - **Project Name**: demo-jar - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-01 - **Last Updated**: 2026-04-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Demo Jar - 服务日志与指标模拟器 基于 **Java 17** 和 **Spring Boot 3.2** 的服务日志模拟项目,用于生成各类服务日志、Prometheus 业务指标,并提供 WebSocket 在线测试功能。 > **前后端拆分说明**:项目已拆分为 `jar/`(后端服务)和 `vue/`(前端页面)两个目录,后端仅提供 API 与 WebSocket 服务,前端页面可独立部署。 ## 功能特性 | 功能 | 描述 | |------|------| | 🔌 **中间件连接异常** | 模拟 Redis、MongoDB、Kafka、ZooKeeper 等中间件连接失败日志 | | 🐬 **MySQL接口报错** | 模拟 SQL语法错误、死锁、连接超时、连接池耗尽等 MySQL 常见报错 | | 🔔 **业务告警日志** | 模拟订单超时、支付失败率过高、库存不足、限流触发等业务告警 | | 📊 **业务指标模拟** | 订单/支付/登录成功率、活跃用户、队列大小、响应时间等 Prometheus 指标 | | 🔌 **WebSocket测试** | 基于路径 /websocket 提供 WebSocket 长连接在线测试功能 | ## 日志输出 - **控制台输出**: 用于 Kubernetes 标准输出日志采集 - **文件输出**: `./jar/logs/` 目录,方便后期 sidecar 方式采集 - 单文件最大 100MB - 保留最大 3 个文件 - 总大小限制 300MB ## 快速开始 ### 后端运行(jar 目录) ```bash cd jar # 1. 编译并运行 ./start.sh # 2. 后台运行 ./start.sh background # 3. 停止后台运行 ./stop.sh ``` 后端默认端口:**8080** ### 前端运行(vue 目录) ```bash cd vue # 1. 安装依赖 npm install # 2. 本地开发(默认 5173,已代理 /api /actuator /websocket 到 localhost:8080) npm run dev # 3. 生产构建 npm run build ``` 前端默认端口:**5173** ### 本地访问地址 | 服务 | 地址 | 说明 | |------|------|------| | 前端页面 | http://localhost:5173 | Dashboard + WebSocket 测试 | | 后端 API | http://localhost:8080 | Spring Boot 服务 | | 后端根路径 | http://localhost:8080/ | 返回服务说明 JSON | | Prometheus 指标 | http://localhost:8080/actuator/prometheus | | | 健康检查 | http://localhost:8080/actuator/health | | | WebSocket 端点 | `ws://localhost:5173/websocket` | 前端代理到后端 `ws://localhost:8080/websocket` | ### Docker 运行后端(jar 目录) ```bash cd jar # 1. 先编译项目 mvn clean package -DskipTests # 2. 构建镜像 docker build -t demo-jar:1.0.0 . # 3. 运行容器 docker run -d \ --name demo-jar \ -p 8080:8080 \ -v $(pwd)/logs:/app/logs \ demo-jar:1.0.0 # 4. 查看日志 docker logs -f demo-jar ``` ### Docker 运行前端(vue 目录) ```bash cd vue # 1. 构建前端 npm run build # 2. 构建镜像(默认代理到 localhost:8081,可通过环境变量修改) docker build -t demo-jar-ui:1.0.0 . # 3. 运行容器(Mac 本机后端用 host.docker.internal:8080) docker run -d \ --name demo-jar-ui \ -p 5173:80 \ -e BACKEND_HOST=host.docker.internal:8080 \ demo-jar-ui:1.0.0 ``` ### Docker Compose 示例 ```yaml version: '3.8' services: demo-jar: build: ./jar container_name: demo-jar ports: - "8080:8080" volumes: - ./jar/logs:/app/logs environment: - JAVA_OPTS=-Xms512m -Xmx1024m - TZ=Asia/Shanghai demo-jar-ui: build: ./vue container_name: demo-jar-ui ports: - "5173:80" environment: - BACKEND_HOST=demo-jar:8080 ``` ## 前端代理说明 ### 开发环境(Vite) `vue/vite.config.js` 已配置代理: | 前端路径 | 代理目标 | 类型 | |---------|---------|------| | `/api` | `http://localhost:8080` | HTTP | | `/actuator` | `http://localhost:8080` | HTTP | | `/websocket` | `ws://localhost:8080` | WebSocket | ### 生产环境(Nginx) `vue/.nginx.conf` 已配置相同规则的 Nginx 代理,WebSocket 代理已加 `Upgrade` / `Connection` 头: ```nginx location /websocket { proxy_pass http://${BACKEND_HOST}/websocket; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 86400; } ``` > **注意**:`Dockerfile` 通过 `envsubst` 在启动时把 `${BACKEND_HOST}` 替换成实际后端地址。 ## API 控制 ### 查询状态 ```bash curl http://localhost:8080/api/simulator/status ``` ### 开启/关闭中间件错误日志 ```bash curl -X POST http://localhost:8080/api/simulator/middleware/enable curl -X POST http://localhost:8080/api/simulator/middleware/disable ``` ### 开启/关闭 MySQL 错误日志 ```bash curl -X POST http://localhost:8080/api/simulator/mysql/enable curl -X POST http://localhost:8080/api/simulator/mysql/disable ``` ### 开启/关闭业务告警日志 ```bash curl -X POST http://localhost:8080/api/simulator/alert/enable curl -X POST http://localhost:8080/api/simulator/alert/disable ``` ### 开启/关闭业务指标模拟 ```bash curl -X POST http://localhost:8080/api/simulator/metrics/enable curl -X POST http://localhost:8080/api/simulator/metrics/disable ``` ## WebSocket 测试 WebSocket 服务运行在 **8080** 端口的 `/websocket` 路径,支持以下功能: - 多客户端连接 - 心跳检测 (30秒间隔) - 消息广播 - Echo 回显 - 服务器信息查询 ### WebSocket 消息类型 | 类型 | 描述 | |------|------| | `ping` | 心跳请求,服务端返回 `pong` | | `echo` | 回显测试,服务端返回相同内容 | | `broadcast` | 广播消息给所有连接 | | `server_info` | 获取服务器信息 | ### JavaScript 示例 ```javascript const ws = new WebSocket('ws://localhost:8080/websocket'); ws.onopen = () => console.log('连接成功'); ws.onmessage = (event) => console.log('收到:', event.data); // 发送心跳 ws.send(JSON.stringify({ type: 'ping' })); // 发送广播 ws.send(JSON.stringify({ type: 'broadcast', content: 'Hello everyone!' })); ``` ## Prometheus 配置 ```yaml scrape_configs: - job_name: 'demo-jar' metrics_path: '/actuator/prometheus' scrape_interval: 5s static_configs: - targets: ['localhost:8080'] ``` ### 主要指标 | 指标名 | 说明 | |--------|------| | `business_orders_total` | 订单总数 (按状态区分) | | `business_payments_total` | 支付总数 (按状态区分) | | `business_logins_total` | 登录总数 (按状态区分) | | `business_active_users` | 当前活跃用户数 | | `business_queue_size` | 消息队列大小 | | `business_db_connections` | 数据库连接数 | | `business_cache_hit_rate` | 缓存命中率 | | `jvm_*` | JVM 内存、GC、线程等指标 | ## 项目结构 ``` demo-jar/ ├── jar/ # 后端服务(Spring Boot) │ ├── src/main/java/com/demo/demojar/ │ │ ├── DemoJarApplication.java # 主应用 │ │ ├── config/ │ │ │ ├── LogConfig.java # 日志配置 │ │ │ ├── MetricsManager.java # Prometheus 指标管理 │ │ │ └── WebSocketConfig.java # WebSocket 配置 │ │ ├── controller/ │ │ │ ├── SimulatorController.java # 模拟器 API │ │ │ └── WebController.java # Web 根路径 │ │ ├── service/ │ │ │ ├── BusinessMetricsService.java # 业务指标模拟 │ │ │ └── LogSimulatorService.java # 日志模拟 │ │ └── websocket/ │ │ └── DemoWebSocketHandler.java # WebSocket 处理器 │ ├── src/main/resources/ │ │ ├── application.yml # 应用配置 │ │ └── logback-spring.xml # 日志配置 │ ├── Dockerfile # Docker 镜像配置 │ ├── start.sh # 启动脚本 │ ├── stop.sh # 停止脚本 │ └── pom.xml # Maven 配置 ├── vue/ # 前端页面(Vite + Vue 3 + Element Plus) │ ├── src/ │ │ ├── api/simulator.js # 模拟器 API 封装 │ │ ├── components/ # 公共组件 │ │ ├── layout/index.vue # 侧边栏布局 │ │ ├── router/index.js # 路由配置 │ │ ├── utils/request.js # Axios 请求封装 │ │ ├── views/ │ │ │ ├── Dashboard.vue # 控制台页面 │ │ │ └── WebSocket.vue # WebSocket 测试页面 │ │ ├── App.vue │ │ ├── main.js │ │ └── style.css │ ├── index.html │ ├── vite.config.js # Vite 配置(含代理) │ ├── package.json │ ├── Dockerfile # 前端 Docker 镜像配置 │ ├── .nginx.conf # Nginx 代理配置模板 │ ├── .gitignore │ └── README.md └── README.md # 说明文档 ``` ## 技术栈 - Java 17 - Spring Boot 3.2 - Spring Boot Actuator - Micrometer + Prometheus - Spring WebSocket - Logback - Vite - Vue 3 - Vue Router 4 - Element Plus - Axios ## License MIT License