一、先搞懂:为什么要折腾这个?
1. 你大概率也遇到过这些痛点
做自动化巡检/监控脚本的人,基本都会卡在「报告怎么分享」这一步:
- 飞书普通群机器人只能发文字,不能直接传HTML附件,详细报告没法同步到群里;
- 报告存在本地电脑上,同事想看还要远程连你的机器,步骤多、效率低;
- 试过在本地开文件分享服务,电脑一关机、一断网、IP一变,链接直接失效;
- 专门买台云服务器存文件?一年大几百块,就放几十KB的小报告,完全浪费;
- 报告越存越多,手动清理麻烦,忘了删就越堆越占空间。
2. 阿里云OSS到底是什么?(大白话解释)
阿里云服务器官网
你可以把它理解成:一个插在阿里云机房里、永远不关机、永远有网的公共U盘。
- 你把本地文件(HTML、图片、文档都行)传上去,每个文件会自动生成一个固定的HTTPS链接;
- 任何人拿到这个链接,手机/电脑点开浏览器就能直接看、直接下,不用登录阿里云,不用装任何软件;
- 不用你搭服务器、不用运维、不用管系统更新,传完文件就不用管了。
3. 落地之后是什么效果?
整套流程全自动,不用人工插手:
- 监控脚本按时自动跑,生成HTML格式的详细报告
- 脚本自动把报告上传到OSS云端
- 飞书机器人往群里发两条消息:
- 第一条:本次监控结果(正常/有几个异常)
- 第二条:带OSS链接,点一下直接打开完整报告
- 历史报告永久存在云端,监控电脑关机、重装系统都不影响查看
4. 要花多少钱?
结论先说:存小报告的场景,几乎一分钱不用花。
阿里云OSS每月有免费额度,完全覆盖小型监控场景:
| 计费项 | 每月免费额度 | 我们实际用量 |
|---|---|---|
| 存储空间 | 5GB | 几十MB(7天留存,每天几份小HTML) |
| 下载流量 | 10GB | 几十MB(每天几个人点开看) |
| 读写请求 | 100万次 | 几千次(每天几次上传+下载) |
只要不存大视频、大安装包,正常用基本不会产生费用。
二、提前准备好这3样东西
动手操作前,确认你有:
- 一个实名认证过的阿里云账号(个人号就行,不用企业资质)
- 能正常运行的Python监控脚本,且能生成本地HTML报告
- 一个飞书群自定义机器人,能正常发文本消息
三、手把手6步落地,跟着做就行
步骤1:创建一个「云端文件夹」(Bucket)
目标:在OSS里建一个专门放报告的存储空间。
- 阿里云控制台顶部搜索「对象存储OSS」,进入产品页面
- 左侧菜单点Bucket列表→ 右上角点创建Bucket
- 照着下面填,新手不用纠结,选最通用的配置:
| 配置项 | 怎么填 | 重点提醒 |
|---|---|---|
| Bucket名称 | 自己起一个,比如auto-report-storage | 只能小写字母、数字、短横线,全局唯一,创建后不能改 |
| 地域 | 选离你最近的,比如华北2(北京) | 就近选,上传下载速度快 |
| 存储类型 | ✅标准存储 | ⚠️ 别选「低频访问」!低频要求最少存30天,我们7天就删,选了反而多扣钱 |
| 存储冗余类型 | ✅本地冗余存储 | 报告丢了能重新生成,不用多副本容灾,省钱 |
| 版本控制 | ✅关闭 | 不用保留历史版本,省存储空间 |
- 点底部「确定」,存储空间就建好了。
步骤2:设置权限,让链接能直接打开
目标:默认私有链接别人打不开,改成「公共读」,所有人都能直接看。
- 进入刚建好的Bucket详情页
- 左侧菜单找权限控制 → 读写权限
- 选择公共读,保存配置
- 等1分钟左右生效,之后链接就能直接在浏览器打开了
安全补充:如果是企业敏感文件,不用开公共读,代码里可以生成临时有效链接,一样能用,只是多一步代码配置。
步骤3:创建专用上传账号(安全第一)
目标:不用主账号密码上传,单独建一个只能传文件的小号,避免密钥泄露影响全部云资源。
- 阿里云顶部搜索「访问控制RAM」,进入RAM控制台
- 左侧身份管理 → 用户 → 创建用户
- 填写信息:
- 登录名称:
oss-upload-bot - 显示名称:
自动化报告上传专用账号 - 访问方式:只勾选使用永久AccessKey访问,别勾控制台访问
- 登录名称:
- 点「确定」创建,立刻保存好两个值(页面只显示一次,丢了只能重建):
- AccessKey ID:相当于用户名
- AccessKey Secret:相当于密码
- 给这个小号授权:
- 回到用户列表,点刚建的用户名进详情
- 切换到权限管理标签 → 点新增授权
- 搜索框输入
OSS,勾选AliOSSFullAccess,点确定
步骤4:Python代码实现自动上传
目标:几行代码,让脚本跑完自动把HTML传到OSS,返回下载链接。
第一步:先装依赖
打开命令行,执行:
pipinstalloss2第二步:复制上传工具函数
把下面代码粘到你的脚本里,只改顶部配置区的4个参数就行:
importoss2# ========== 只改这里:替换成你自己的信息 ==========OSS_AK_ID="你的AccessKey ID"OSS_AK_SECRET="你的AccessKey Secret"OSS_ENDPOINT="oss-cn-beijing.aliyuncs.com"# 对应你选的地域,控制台能复制OSS_BUCKET="你的Bucket名称"OSS_SAVE_FOLDER="report_files/"# 云端存放的子文件夹,不用提前建# =================================================# 初始化连接auth=oss2.Auth(OSS_AK_ID,OSS_AK_SECRET)bucket=oss2.Bucket(auth,OSS_ENDPOINT,OSS_BUCKET)defupload_report_to_oss(local_file_path:str,file_name:str):""" 上传本地HTML到OSS,返回下载链接 :param local_file_path: 本地文件完整路径 :param file_name: 保存到云端的文件名 :return: (是否成功, 成功返回链接/失败返回报错) """oss_file_path=f"{OSS_SAVE_FOLDER}{file_name}"try:bucket.put_object_from_file(oss_file_path,local_file_path)download_url=f"https://{OSS_BUCKET}.{OSS_ENDPOINT}/{oss_file_path}"returnTrue,download_urlexceptExceptionase:returnFalse,f"上传失败:{str(e)}"# 本地测试用if__name__=="__main__":# 替换成你本地一个测试HTML的路径ok,info=upload_report_to_oss(r"D:\test\demo.html","demo_report.html")print(ok,info)测试一下
运行上面的测试代码,打印出True和一串https链接,就说明上传成功了。把链接复制到浏览器,能正常打开HTML,这一步就搞定了。
步骤5:对接飞书,自动发报告链接
目标:监控跑完自动发两条消息,第二条带OSS下载链接。
importjsonimportrequests# 替换成你的飞书机器人WebhookFEISHU_WEBHOOK="你的飞书机器人Webhook地址"defsend_feishu_text(text:str):"""发文本消息到飞书群"""body={"msg_type":"text","content":{"text":text}}try:requests.post(FEISHU_WEBHOOK,data=json.dumps(body),headers={"Content-Type":"application/json"},timeout=10)exceptExceptionase:print(f"飞书发送失败:{e}")# 完整执行流程,整合到你的监控主函数里defrun_full_monitor():# 1. 执行监控,生成本地HTMLis_normal,error_list=你的监控主函数()local_html_path,html_name=你的生成报告函数(error_list)# 2. 上传到OSSupload_ok,result=upload_report_to_oss(local_html_path,html_name)# 3. 第一条:结果汇总status="✅ 全部正常"ifis_normalelse"❌ 检测到异常"msg1=f"""【自动化巡检 · 执行结果】 状态:{status}异常数量:{len(error_list)}个 下次执行:按定时计划自动运行 """send_feishu_text(msg1)# 4. 第二条:报告链接ifupload_ok:msg2=f"""【自动化巡检 · 详细报告】 文件名:{html_name}在线查看:{result}链接永久有效,浏览器直接打开即可 """else:msg2=f"""【自动化巡检 · 详细报告】 ⚠️ 云端上传失败:{result}本地报告路径:{local_html_path}"""send_feishu_text(msg2)步骤6:配置自动清理,永远不用手动删文件
目标:报告只留7天,过期自动删,不用手动清理。
- 进入Bucket详情页 → 左侧数据管理 → 生命周期规则
- 点「创建规则」,照着填:
- 规则名称:
auto-delete-7day - 匹配前缀:
report_files/(只清理报告文件夹里的文件) - 执行动作:文件创建满7天后删除
- 规则名称:
- 保存生效,之后过期文件会自动清理,不用人工管。
四、新手最容易踩的6个坑
1. 报错「NoSuchBucket」找不到存储空间
- 原因:代码里的Bucket名称和控制台里的名字不一样,拼错了
- 解决:去Bucket概览页复制完整名称,粘贴到代码里,注意全是小写
2. 链接打开显示403无权限
- 原因:Bucket没开公共读,或者刚设置完还没生效
- 解决:去读写权限里确认选了「公共读」,等1分钟再试
3. 上传报错「AccessDenied」没有权限
- 原因:RAM子账号没给OSS权限,或者密钥填错了
- 解决:检查子账号有没有加OSS授权,重新复制AK ID和Secret核对
4. 域名连接失败、上传超时
- 原因:Endpoint(地域域名)填错了
- 解决:去Bucket概览页复制官方的「外网Endpoint」,不要自己瞎拼
5. 选了低频存储,删文件还扣钱
- 原因:低频存储要求最少存30天,提前删会补齐剩余天数的费用
- 解决:小文件、短期留存一律选「标准存储」
6. 飞书机器人没收到消息
- 原因:Webhook地址错了、网络不通、机器人设置了关键词
- 解决:先单独测试飞书发送函数,确认机器人能收到消息再整合
五、最后总结
整套方案跑通之后,就是一套完全自动化的闭环:
定时执行监控 → 生成HTML报告 → 自动上传OSS云端 → 飞书推送永久链接 → 过期自动清理
不用维护服务器,不用手动传文件,几乎零成本,团队所有人点开链接就能看完整报告,比本地存文件、远程查报告效率高太多。