# rust-study **Repository Path**: andnnl/rust-study ## Basic Information - **Project Name**: rust-study - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-19 - **Last Updated**: 2026-04-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 短信业务实时监控数据平台 基于 Flink + Spring Boot + Vue3 的短信业务实时监控数据平台,支持多时间窗口统计、可视化展示和智能告警。 ## 项目简介 本平台用于实时监控短信网关的回执率,支持多时间窗口统计(10s、30s、60s、90s、91s),提供可视化数据展示和智能告警功能,帮助运维人员及时发现和处理短信业务异常。 ## 技术栈 ### 后端技术 - **Java**: 1.8 - **Flink**: 1.17.2(实时计算) - **Spring Boot**: 2.7.18(后端服务) - **MySQL**: 8.0.33(数据存储) - **Kafka**: 消息队列 - **SLF4J + Logback**: 日志框架 - **Spring Data JPA**: 数据持久化 ### 前端技术 - **Vue**: 3.3.11 - **Vite**: 5.0.11(构建工具) - **Vue Router**: 4.2.5(路由管理) - **Pinia**: 2.1.7(状态管理) - **Element Plus**: 2.4.4(UI组件库) - **ECharts**: 5.4.3(数据可视化) - **Axios**: 1.6.2(HTTP客户端) ## 项目结构 ``` log-collect/ ├── sms-monitor-common/ # 通用工具模块 │ ├── src/main/java/com/sms/monitor/common/ │ │ ├── constants/ # 常量定义 │ │ ├── entity/ # 实体类 │ │ └── utils/ # 工具类 ├── sms-flink-job/ # Flink作业模块 │ ├── src/main/java/com/sms/monitor/flink/ │ │ ├── function/ # Flink函数 │ │ ├── sink/ # 数据输出 │ │ └── SmsGatewayStatsJob.java │ └── src/main/resources/ │ ├── application.properties.template │ ├── application.properties │ └── logback.xml ├── sms-monitor-backend/ # Spring Boot后端模块 │ ├── src/main/java/com/sms/monitor/ │ │ ├── controller/ # 控制器 │ │ ├── entity/ # 实体类 │ │ ├── repository/ # 数据访问层 │ │ ├── service/ # 服务层 │ │ └── SmsMonitorApplication.java │ └── src/main/resources/ │ ├── application.yml.template │ ├── application.yml │ └── logback-spring.xml ├── sms-monitor-frontend/ # Vue3前端模块 │ ├── src/ │ │ ├── router/ # 路由配置 │ │ ├── utils/ # 工具类 │ │ ├── views/ # 页面组件 │ │ ├── App.vue │ │ └── main.js │ ├── index.html │ ├── package.json │ └── vite.config.js ├── deploy-backend.sh # 后端服务部署脚本 ├── deploy-flink-job.sh # Flink作业部署脚本 ├── deploy-frontend.sh # 前端应用部署脚本 ├── deploy-all.sh # 一键部署所有模块 ├── deploy-password.conf # 密码配置文件(已忽略) ├── deploy-password.conf.example # 密码配置示例 ├── deploy.conf # 部署配置文件(已忽略) ├── deploy.conf.example # 部署配置示例 ├── .gitignore # Git忽略配置 ├── README.md # 项目说明文档 ├── 环境配置.md # 环境配置文档 ├── GIT提交说明.md # Git提交和敏感信息处理说明 └── Git历史敏感信息清理指南.md # Git历史敏感信息清理指南 ``` ## 核心功能 ### 1. 实时监控 - 实时消费 Kafka 中的短信日志 - 多时间窗口统计(10s、30s、60s、90s、91s) - 计算成功回执率和失败回执率 - 实时写入 MySQL 数据库 ### 2. 数据可视化 - 仪表盘展示整体监控概况 - 网关统计报表展示详细数据 - ECharts 图表展示趋势变化 - 支持数据导出功能 ### 3. 智能告警 - 可配置的告警规则(网关、时间窗口、失败率阈值) - 支持企业微信通知 - 支持 HTTP 接口调用 - 告警记录查询和管理 ### 4. 用户管理 - 用户登录认证 - 基于 JWT 的授权机制 - 用户信息管理 ## 快速开始 ### 环境要求 - JDK 1.8+ - Maven 3.6+ - Node.js 16+ - MySQL 8.0+ - Kafka 2.8+ - Flink 1.17+ ### 数据库初始化 创建数据库并执行以下 SQL: ```sql CREATE DATABASE sms_monitor DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; USE sms_monitor; -- 短信网关统计数据表 CREATE TABLE `sms_gateway_stats` ( `id` bigint NOT NULL AUTO_INCREMENT, `gateway` int NOT NULL COMMENT '网关号', `window` int NOT NULL COMMENT '时间窗口(秒)', `success_count` int NOT NULL DEFAULT '0' COMMENT '成功数', `failure_count` int NOT NULL DEFAULT '0' COMMENT '失败数', `total_count` int NOT NULL DEFAULT '0' COMMENT '总数', `success_rate` decimal(5,2) NOT NULL DEFAULT '0.00' COMMENT '成功回执率', `failure_rate` decimal(5,2) NOT NULL DEFAULT '0.00' COMMENT '失败回执率', `stats_time` datetime NOT NULL COMMENT '统计时间', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_gateway_time` (`gateway`,`stats_time`), KEY `idx_time` (`stats_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='短信网关统计数据'; -- 告警配置表 CREATE TABLE `sms_alert_config` ( `id` bigint NOT NULL AUTO_INCREMENT, `gateway` int NOT NULL COMMENT '网关号', `window` int NOT NULL COMMENT '时间窗口(秒)', `failure_threshold` decimal(5,2) NOT NULL COMMENT '失败率阈值', `alert_enabled` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用告警', `wx_webhook` varchar(255) DEFAULT NULL COMMENT '企业微信Webhook', `http_url` varchar(255) DEFAULT NULL COMMENT 'HTTP告警接口', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_gateway_window` (`gateway`,`window`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='短信告警配置'; -- 告警记录表 CREATE TABLE `sms_alert_record` ( `id` bigint NOT NULL AUTO_INCREMENT, `gateway` int NOT NULL COMMENT '网关号', `window` int NOT NULL COMMENT '时间窗口(秒)', `failure_rate` decimal(5,2) NOT NULL COMMENT '实际失败率', `threshold` decimal(5,2) NOT NULL COMMENT '阈值', `alert_time` datetime NOT NULL COMMENT '告警时间', `alert_type` varchar(20) NOT NULL COMMENT '告警类型', `alert_status` tinyint NOT NULL DEFAULT '0' COMMENT '告警状态:0-未处理,1-已处理', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_gateway_time` (`gateway`,`alert_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='短信告警记录'; -- 用户表 CREATE TABLE `sys_user` ( `id` bigint NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL COMMENT '用户名', `password` varchar(100) NOT NULL COMMENT '密码', `nickname` varchar(50) DEFAULT NULL COMMENT '昵称', `email` varchar(100) DEFAULT NULL COMMENT '邮箱', `phone` varchar(20) DEFAULT NULL COMMENT '手机', `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:0-禁用,1-启用', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='系统用户'; ``` ### 后端编译与运行 #### 1. 编译项目 ```bash # 编译整个项目 mvn clean install # 单独编译某个模块 mvn clean install -pl sms-monitor-common mvn clean install -pl sms-flink-job mvn clean install -pl sms-monitor-backend ``` #### 2. 配置文件 项目提供了配置文件模板,使用环境变量方式配置敏感信息。首次使用时需要复制模板文件并修改配置。 **Flink作业配置**(sms-flink-job/src/main/resources/application.properties): ```bash # 复制模板文件 cp sms-flink-job/src/main/resources/application.properties.template \ sms-flink-job/src/main/resources/application.properties # 编辑配置文件 vim sms-flink-job/src/main/resources/application.properties ``` 配置内容: ```properties # Kafka 配置 kafka.bootstrap.servers=kafka1.91jianmi.cn:9092,kafka2.91jianmi.cn:9092,kafka3.91jianmi.cn:9092 kafka.group.id=sms-gateway-stats-group kafka.topic=sms-log-topic kafka.auto.offset.reset=latest # MySQL 配置 mysql.url=jdbc:mysql://192.168.5.87:3306/sms_monitor?useSSL=false&serverTimezone=Asia/Shanghai mysql.username=root mysql.password=123456 # Flink 配置 flink.parallelism=1 flink.window.sizes=10,30,60,90,91 # 日志配置 logging.level.root=INFO logging.config=classpath:logback.xml ``` **后端服务配置**(sms-monitor-backend/src/main/resources/application.yml): ```bash # 复制模板文件 cp sms-monitor-backend/src/main/resources/application.yml.template \ sms-monitor-backend/src/main/resources/application.yml # 编辑配置文件 vim sms-monitor-backend/src/main/resources/application.yml ``` 配置内容: ```yaml # 服务器配置 server: port: 8071 servlet: context-path: /api # Spring 配置 spring: # 应用配置 application: name: sms-monitor-backend # 数据库配置 datasource: url: jdbc:mysql://192.168.5.87:3306/sms_monitor?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver # JPA 配置 jpa: hibernate: ddl-auto: update show-sql: true properties: hibernate: format_sql: true dialect: org.hibernate.dialect.MySQL8Dialect # Redis 配置(可选) redis: host: 127.0.0.1 port: 6379 password: database: 0 # JWT 配置 jwt: secret: ${JWT_SECRET:sms-monitor-secret-key} expiration: 86400 # 告警配置 alert: enabled: true default-threshold: 5.0 # CORS 配置 cors: allowed-origins: "*" allowed-methods: "GET, POST, PUT, DELETE, OPTIONS" allowed-headers: "*" allow-credentials: true # Swagger 配置 springdoc: api-docs: path: /v3/api-docs swagger-ui: path: /swagger-ui.html enabled: true # 日志配置 logging: level: root: INFO com.sms.monitor: DEBUG config: classpath:logback-spring.xml ``` #### 3. 运行后端服务 ```bash # 编译并打包 cd sms-monitor-backend D:\maven-mvnd-1.0.3\bin\mvnd -s D:\tools\settings-chenss.xml clean package -DskipTests # 运行打包后的 JAR java -jar target/sms-monitor-backend-1.0-SNAPSHOT.jar ``` 后端服务启动后访问:http://localhost:8071/api 默认登录账号: - 用户名:admin - 密码:123456 #### 4. 运行 Flink 作业 ```bash # 编译 Flink 作业模块 D:\maven-mvnd-1.0.3\bin\mvnd -s D:\tools\settings-chenss.xml clean package -DskipTests -f sms-flink-job/pom.xml # 方式1:本地运行 cd sms-flink-job D:\maven-mvnd-1.0.3\bin\mvnd -s D:\tools\settings-chenss.xml exec:java -Dexec.mainClass="com.sms.monitor.flink.SmsGatewayStatsJob" # 方式2:提交到 Flink 集群 flink run -c com.sms.monitor.flink.SmsGatewayStatsJob target/sms-flink-job-1.0-SNAPSHOT-jar-with-dependencies.jar ``` ### 前端编译与运行 #### 1. 安装依赖 ```bash cd sms-monitor-frontend npm install ``` #### 2. 配置文件 创建 `.env.development` 文件: ```env # 开发环境配置 VITE_APP_TITLE = 短信业务实时监控平台 VITE_APP_BASE_API = http://localhost:8071/api ``` 创建 `.env.production` 文件: ```env # 生产环境配置 VITE_APP_TITLE = 短信业务实时监控平台 VITE_APP_BASE_API = http://192.168.5.87:8071/api ``` #### 3. 运行开发服务器 ```bash npm run dev ``` 前端服务启动后访问:http://localhost:5173 默认登录账号: - 用户名:admin - 密码:123456 #### 4. 构建生产版本 ```bash npm run build ``` 构建产物在 `dist` 目录下,可部署到 Nginx 等静态服务器。 ## 配置说明 ### 日志配置 项目使用 SLF4J + Logback 进行日志管理,配置规则如下: - 每天一个日志文件 - 单个日志文件大小 1G - 超过大小自动滚动 - 保留 7 天日志 日志文件位置: - Flink作业:`logs/sms-flink-job.log` - 后端服务:`logs/sms-monitor-backend.log` ### Maven 配置 项目使用自定义 Maven settings 文件: ```bash D:\tools\settings-chenss.xml ``` 编译命令示例: ```bash # 使用自定义 settings 文件编译 D:\maven-mvnd-1.0.3\bin\mvnd -s D:\tools\settings-chenss.xml clean package -DskipTests # 编译整个项目 D:\maven-mvnd-1.0.3\bin\mvnd -s D:\tools\settings-chenss.xml clean install # 编译单个模块 D:\maven-mvnd-1.0.3\bin\mvnd -s D:\tools\settings-chenss.xml clean install -pl sms-monitor-backend ``` ## API 文档 后端服务集成了 Swagger UI,启动后访问: - Swagger UI: http://localhost:8071/api/swagger-ui.html - API Docs: http://localhost:8071/api/v3/api-docs ### 主要 API 接口 | 接口 | 方法 | 说明 | |------|------|------| | /api/gateway-stats | GET | 查询网关统计数据 | | /api/gateway-stats/export | GET | 导出统计数据 | | /api/alert-config | GET | 查询告警配置 | | /api/alert-config | POST | 创建告警配置 | | /api/alert-config/{id} | PUT | 更新告警配置 | | /api/alert-config/{id} | DELETE | 删除告警配置 | | /api/alert-record | GET | 查询告警记录 | | /api/user/login | POST | 用户登录 | ## 部署指南 ### 部署架构 ``` ┌─────────────┐ │ Kafka │ │ 消息队列 │ └──────┬──────┘ │ ▼ ┌─────────────────┐ │ Flink 集群 │ │ (独立模块) │ │ - JobManager │ │ - TaskManager │ └──────┬──────────┘ │ ▼ ┌─────────────┐ │ MySQL │ │ 数据存储 │ └──────┬──────┘ │ ▼ ┌─────────────────┐ │ Spring Boot │ │ 后端服务 │ │ (端口: 8071) │ └──────┬──────────┘ │ ▼ ┌─────────────────┐ │ Vue3 前端 │ │ (Nginx:8073) │ └─────────────────┘ ``` ### 部署脚本 项目提供了自动化部署脚本,支持一键部署各个模块到远程服务器。 #### 1. 配置密码 创建 `deploy-password.conf` 文件(已忽略,不会提交到 Git): ```bash # 部署密码配置(敏感信息) # 此文件不应提交到Git # 服务器密码 SERVER_PASSWORD=your_password_here ``` #### 2. 部署后端服务 ```bash # 部署后端服务到远程服务器 ./deploy-backend.sh ``` 部署内容包括: - JAR 文件传输 - 配置文件传输 - 启动脚本和停止脚本 - 自动停止旧服务并启动新服务 #### 3. 部署 Flink 作业 ```bash # 部署 Flink 作业到远程服务器 ./deploy-flink-job.sh ``` 部署内容包括: - Flink 作业 JAR 文件传输 - 配置文件传输 - 启动脚本和停止脚本 - 自动提交到 Flink 集群 #### 4. 部署前端应用 ```bash # 部署前端应用到远程服务器 ./deploy-frontend.sh ``` 部署内容包括: - 前端构建产物传输 - Nginx 配置更新 - 自动重启 Nginx 服务 #### 5. 一键部署所有模块 ```bash # 一键部署所有模块 ./deploy-all.sh ``` ### 远程服务器配置 默认部署到服务器:`192.168.5.87` 端口配置: - 后端服务:8071 - 前端服务:8073(通过 Nginx) - Flink 集群:默认配置 ### 配置文件模板 项目提供了配置文件模板,使用环境变量方式配置敏感信息: #### 后端配置模板 文件位置:`sms-monitor-backend/src/main/resources/application.yml.template` 使用方式: ```bash # 复制模板文件 cp application.yml.template application.yml # 修改配置文件中的环境变量 vim application.yml ``` #### Flink 配置模板 文件位置:`sms-flink-job/src/main/resources/application.properties.template` 使用方式: ```bash # 复制模板文件 cp application.properties.template application.properties # 修改配置文件中的环境变量 vim application.properties ``` ### 敏感信息管理 项目已配置完善的敏感信息管理机制: #### .gitignore 配置 已忽略以下敏感文件: - `**/application.yml` - 后端配置文件 - `**/application.properties` - Flink 配置文件 - `deploy-password.conf` - 密码配置文件 - `deploy.conf` - 部署配置文件 #### 环境变量支持 配置文件支持使用环境变量,避免硬编码敏感信息: ```yaml # 示例:使用环境变量 datasource: url: jdbc:mysql://${DB_HOST:192.168.5.87}:${DB_PORT:3306}/${DB_NAME:sms_monitor} username: ${DB_USER:root} password: ${DB_PASSWORD:123456} ``` ### Git 提交说明 详细的 Git 提交和敏感信息处理说明请参考:[GIT提交说明.md](GIT提交说明.md) ### 环境配置文档 完整的环境配置信息请参考:[环境配置.md](环境配置.md) ### 监控与维护 #### 监控指标 - Flink 作业运行状态 - Kafka 消费延迟 - MySQL 写入性能 - 告警触发次数 - 系统响应时间 #### 日志查看 ```bash # 查看实时日志 tail -f logs/sms-flink-job.log tail -f logs/sms-monitor-backend.log # 查看错误日志 grep ERROR logs/sms-flink-job.log grep ERROR logs/sms-monitor-backend.log ``` #### 服务管理 **后端服务管理**: ```bash # 启动服务 cd /data/log-collect/sms-monitor-backend/bin ./start.sh # 停止服务 ./stop.sh all # 查看日志 tail -f /data/log-collect/sms-monitor-backend/logs/stdout.log ``` **Flink 作业管理**: ```bash # 启动作业 cd /data/log-collect/sms-flink-job/bin ./start-flink-job.sh # 停止作业 ./stop-flink-job.sh # 查看状态 ./start-flink-job.sh status ``` **前端服务管理**: ```bash # 重启 Nginx /usr/local/nginx/sbin/nginx -s reload # 查看 Nginx 状态 ps aux | grep nginx ``` ## 开发规范 ### 代码规范 - 遵循阿里巴巴 Java 开发手册 - 使用 Lombok 简化代码 - 统一使用 SLF4J 进行日志打印 - 实体类使用 Jakarta Persistence API(Spring Boot 3.x) ### Git 提交规范 ``` feat: 新功能 fix: 修复bug docs: 文档更新 style: 代码格式调整 refactor: 重构 test: 测试相关 chore: 构建/工具链相关 ``` ## 常见问题 ### 1. Flink 作业无法启动 检查 Kafka 连接配置是否正确,确保 Kafka 服务正常运行。 ### 2. 数据库连接失败 检查 MySQL 连接配置,确保数据库服务正常运行,用户名密码正确。 ### 3. 前端无法访问后端接口 检查 CORS 配置,确保后端服务已启动,端口配置正确。 ### 4. 日志文件过大 日志已配置自动滚动和清理,默认保留 7 天,单个文件最大 1G。 ## 版本历史 - **v1.0.0** (2024-01-13) - 初始版本发布 - 实现核心监控功能 - 实现数据可视化 - 实现智能告警 ## 贡献指南 欢迎提交 Issue 和 Pull Request。 ## 许可证 本项目采用 MIT 许可证。 ## 联系方式 如有问题或建议,请通过以下方式联系: - 提交 Issue - 发送邮件 --- **注意**: 本项目仅用于学习和研究目的,请勿用于生产环境。