# 数据验证与短信告警系统 - 使用说明 ## 📋 功能概述 自动执行数据验证(JSON/CSV/数据库),当验证失败时通过阿里云短信服务发送告警通知。 **核心功能:** - ✅ 每天定时执行数据验证(默认上午9点) - ✅ 验证失败自动发送短信告警(错误代码:2222) - ✅ 支持多个手机号接收告警 - ✅ 生成详细的验证报告 --- ## 🚀 快速开始 ### 1. 安装依赖 ```bash # 安装阿里云短信SDK pip install alibabacloud_dysmsapi20170525 pip install alibabacloud_credentials pip install alibabacloud_tea_openapi pip install alibabacloud_tea_util ``` ### 2. 配置短信服务 编辑 `sms_config.json` 文件,填写您的阿里云配置: ```json { "access_key_id": "您的AccessKey ID", "access_key_secret": "您的AccessKey Secret", "sign_name": "您的短信签名", "template_code": "SMS_486210104", "phone_numbers": "13621242430,13800138000" } ``` **获取方式:** - AccessKey:https://ram.console.aliyun.com/manage/ak - 短信签名和模板:https://dysms.console.aliyun.com/ ### 3. 测试短信功能 ```bash # 测试短信发送 python data_validation_with_sms.py --test-sms ``` ### 4. 手动执行验证 ```bash # 验证昨天的数据 python data_validation_with_sms.py # 验证指定日期 python data_validation_with_sms.py --date 2025-12-29 # 验证特定表 python data_validation_with_sms.py --table ai_statistics_day ``` ### 5. 配置定时任务 **Windows系统:** ```bash # 查看任务计划配置命令 python data_validation_with_sms.py --setup-schedule ``` 然后使用管理员权限运行显示的PowerShell命令,或者手动配置: 1. 打开 `任务计划程序` (按 Win+R,输入 `taskschd.msc`) 2. 点击 "创建基本任务" 3. 填写任务信息: - **名称**: DataValidationWithSMS - **描述**: 每天9点执行数据验证并发送短信告警 4. 触发器:**每天**,时间:**上午 9:00** 5. 操作:**启动程序** - 程序:`C:\Python\python.exe` (您的Python路径) - 参数:`D:\workspace\xhh_baijiahao\data_validation_with_sms.py` 6. 完成 **Linux/macOS系统:** 编辑crontab: ```bash crontab -e ``` 添加定时任务(每天9点执行): ``` 0 9 * * * /usr/bin/python3 /path/to/data_validation_with_sms.py ``` --- ## 📖 使用示例 ### 示例1:验证JSON和CSV ```bash python data_validation_with_sms.py --source json csv ``` ### 示例2:验证CSV和数据库 ```bash python data_validation_with_sms.py --source csv database ``` ### 示例3:完整验证(三个数据源) ```bash python data_validation_with_sms.py --source json csv database ``` ### 示例4:验证 ai_statistics_day 表 ```bash python data_validation_with_sms.py --table ai_statistics_day --source csv database ``` --- ## 📧 短信告警说明 ### 触发条件 以下情况会发送短信告警(错误代码:2222): 1. **顺序不一致**:JSON和CSV中记录的顺序不匹配 2. **缺失记录**:某个数据源缺少记录 3. **多余记录**:某个数据源有多余的记录 4. **字段差异**:相同记录的字段值不一致 ### 短信内容 短信格式(使用验证码模板): ``` 【北京乐航时代科技】您的验证码是2222 ``` **说明**:由于使用的是验证码模板,错误代码固定为 `2222`,具体错误详情请查看生成的验证报告文件。 ### 多号码配置 在 `sms_config.json` 中配置多个手机号: ```json { "phone_numbers": "13621242430,13800138000,13900139000" } ``` --- ## 📊 验证报告 每次验证后会自动生成详细报告,保存在项目根目录: ``` validation_report_20250104_090000.txt ``` 报告内容包括: - 顺序验证结果 - 交叉验证结果 - 数据差异统计 - 详细的错误列表 --- ## ⚙️ 配置说明 ### SMSAlertConfig 类 在 `data_validation_with_sms.py` 中可以修改配置: ```python class SMSAlertConfig: # 阿里云访问凭据 ACCESS_KEY_ID = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '默认值') ACCESS_KEY_SECRET = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '默认值') # 短信签名和模板 SIGN_NAME = '北京乐航时代科技' TEMPLATE_CODE = 'SMS_486210104' # 接收号码 PHONE_NUMBERS = '13621242430' # endpoint ENDPOINT = 'dysmsapi.aliyuncs.com' ``` ### 环境变量方式(推荐) 为了安全起见,建议使用环境变量存储敏感信息: **Windows PowerShell:** ```powershell $env:ALIBABA_CLOUD_ACCESS_KEY_ID="您的AccessKey ID" $env:ALIBABA_CLOUD_ACCESS_KEY_SECRET="您的AccessKey Secret" ``` **Linux/macOS:** ```bash export ALIBABA_CLOUD_ACCESS_KEY_ID="您的AccessKey ID" export ALIBABA_CLOUD_ACCESS_KEY_SECRET="您的AccessKey Secret" ``` --- ## 🔍 故障排查 ### 1. 短信发送失败 **检查项:** - AccessKey ID 和 Secret 是否正确 - 短信签名是否已审核通过 - 短信模板是否已审核通过 - 账户余额是否充足 - 手机号格式是否正确(国内号码11位) **查看错误日志:** ```bash python data_validation_with_sms.py --test-sms ``` ### 2. 数据库连接失败 检查 `database_config.py` 中的配置是否正确。 ### 3. 验证失败 查看生成的验证报告文件,了解详细错误信息。 ### 4. 定时任务不执行 **Windows:** - 检查任务计划程序中任务状态 - 查看任务历史记录 - 确认Python路径和脚本路径正确 **Linux/macOS:** - 检查crontab配置:`crontab -l` - 查看系统日志:`grep CRON /var/log/syslog` --- ## 📝 日志位置 - 验证报告:`validation_report_*.txt` - 短信发送日志:控制台输出 - 系统日志:根据日志配置(如有) --- ## 🔐 安全建议 1. **不要提交敏感信息到Git** - 将 `sms_config.json` 添加到 `.gitignore` - 使用环境变量存储AccessKey 2. **定期轮换AccessKey** - 建议每3-6个月更换一次 3. **使用RAM子账号** - 为短信服务创建专用的RAM子账号 - 仅授予必要的短信发送权限 4. **设置IP白名单** - 在阿里云RAM控制台设置IP访问限制 --- ## 📞 联系支持 如有问题,请联系技术支持。 --- ## 📅 更新日志 ### v1.0.0 (2025-01-04) - ✨ 初始版本 - ✅ 集成数据验证功能 - ✅ 阿里云短信告警 - ✅ 定时任务调度 - ✅ 多数据源支持