一、先搞懂:为什么要折腾这个?

1. 你大概率也遇到过这些痛点

做自动化巡检/监控脚本的人,基本都会卡在「报告怎么分享」这一步:

  • 飞书普通群机器人只能发文字,不能直接传HTML附件,详细报告没法同步到群里;
  • 报告存在本地电脑上,同事想看还要远程连你的机器,步骤多、效率低;
  • 试过在本地开文件分享服务,电脑一关机、一断网、IP一变,链接直接失效;
  • 专门买台云服务器存文件?一年大几百块,就放几十KB的小报告,完全浪费;
  • 报告越存越多,手动清理麻烦,忘了删就越堆越占空间。

2. 阿里云OSS到底是什么?(大白话解释)

阿里云服务器官网

你可以把它理解成:一个插在阿里云机房里、永远不关机、永远有网的公共U盘

  • 你把本地文件(HTML、图片、文档都行)传上去,每个文件会自动生成一个固定的HTTPS链接
  • 任何人拿到这个链接,手机/电脑点开浏览器就能直接看、直接下,不用登录阿里云,不用装任何软件;
  • 不用你搭服务器、不用运维、不用管系统更新,传完文件就不用管了。

3. 落地之后是什么效果?

整套流程全自动,不用人工插手:

  1. 监控脚本按时自动跑,生成HTML格式的详细报告
  2. 脚本自动把报告上传到OSS云端
  3. 飞书机器人往群里发两条消息:
    • 第一条:本次监控结果(正常/有几个异常)
    • 第二条:带OSS链接,点一下直接打开完整报告
  4. 历史报告永久存在云端,监控电脑关机、重装系统都不影响查看

4. 要花多少钱?

结论先说:存小报告的场景,几乎一分钱不用花

阿里云OSS每月有免费额度,完全覆盖小型监控场景:

计费项 每月免费额度 我们实际用量
存储空间 5GB 几十MB(7天留存,每天几份小HTML)
下载流量 10GB 几十MB(每天几个人点开看)
读写请求 100万次 几千次(每天几次上传+下载)

只要不存大视频、大安装包,正常用基本不会产生费用。

二、提前准备好这3样东西

动手操作前,确认你有:

  1. 一个实名认证过的阿里云账号(个人号就行,不用企业资质)
  2. 能正常运行的Python监控脚本,且能生成本地HTML报告
  3. 一个飞书群自定义机器人,能正常发文本消息

三、手把手6步落地,跟着做就行

步骤1:创建一个「云端文件夹」(Bucket)

目标:在OSS里建一个专门放报告的存储空间。

  1. 阿里云控制台顶部搜索「对象存储OSS」,进入产品页面
  2. 左侧菜单点 Bucket列表 → 右上角点 创建Bucket
  3. 照着下面填,新手不用纠结,选最通用的配置:
配置项 怎么填 重点提醒
Bucket名称 自己起一个,比如 auto-report-storage 只能小写字母、数字、短横线,全局唯一,创建后不能改
地域 选离你最近的,比如华北2(北京) 就近选,上传下载速度快
存储类型 标准存储 ⚠️ 别选「低频访问」!低频要求最少存30天,我们7天就删,选了反而多扣钱
存储冗余类型 本地冗余存储 报告丢了能重新生成,不用多副本容灾,省钱
版本控制 关闭 不用保留历史版本,省存储空间
  1. 点底部「确定」,存储空间就建好了。

步骤2:设置权限,让链接能直接打开

目标:默认私有链接别人打不开,改成「公共读」,所有人都能直接看。

  1. 进入刚建好的Bucket详情页
  2. 左侧菜单找 权限控制 → 读写权限
  3. 选择 公共读,保存配置
  4. 等1分钟左右生效,之后链接就能直接在浏览器打开了

安全补充:如果是企业敏感文件,不用开公共读,代码里可以生成临时有效链接,一样能用,只是多一步代码配置。


步骤3:创建专用上传账号(安全第一)

目标:不用主账号密码上传,单独建一个只能传文件的小号,避免密钥泄露影响全部云资源。

  1. 阿里云顶部搜索「访问控制RAM」,进入RAM控制台
  2. 左侧 身份管理 → 用户 → 创建用户
  3. 填写信息:
    • 登录名称:oss-upload-bot
    • 显示名称:自动化报告上传专用账号
    • 访问方式:只勾选 使用永久AccessKey访问,别勾控制台访问
  4. 点「确定」创建,立刻保存好两个值(页面只显示一次,丢了只能重建):
    • AccessKey ID:相当于用户名
    • AccessKey Secret:相当于密码
  5. 给这个小号授权:
    1. 回到用户列表,点刚建的用户名进详情
    2. 切换到 权限管理 标签 → 点 新增授权
    3. 搜索框输入 OSS,勾选 AliOSSFullAccess,点确定

步骤4:Python代码实现自动上传

目标:几行代码,让脚本跑完自动把HTML传到OSS,返回下载链接。

第一步:先装依赖

打开命令行,执行:

pip install oss2
第二步:复制上传工具函数

把下面代码粘到你的脚本里,只改顶部配置区的4个参数就行:

import oss2

# ========== 只改这里:替换成你自己的信息 ==========
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)


def upload_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}"
        return True, download_url
    except Exception as e:
        return False, 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下载链接。

import json
import requests

# 替换成你的飞书机器人Webhook
FEISHU_WEBHOOK = "你的飞书机器人Webhook地址"

def send_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
        )
    except Exception as e:
        print(f"飞书发送失败:{e}")


# 完整执行流程,整合到你的监控主函数里
def run_full_monitor():
    # 1. 执行监控,生成本地HTML
    is_normal, error_list = 你的监控主函数()
    local_html_path, html_name = 你的生成报告函数(error_list)
    
    # 2. 上传到OSS
    upload_ok, result = upload_report_to_oss(local_html_path, html_name)
    
    # 3. 第一条:结果汇总
    status = "✅ 全部正常" if is_normal else "❌ 检测到异常"
    msg1 = f"""【自动化巡检 · 执行结果】
状态:{status}
异常数量:{len(error_list)} 个
下次执行:按定时计划自动运行
"""
    send_feishu_text(msg1)
    
    # 4. 第二条:报告链接
    if upload_ok:
        msg2 = f"""【自动化巡检 · 详细报告】
文件名:{html_name}
在线查看:{result}
链接永久有效,浏览器直接打开即可
"""
    else:
        msg2 = f"""【自动化巡检 · 详细报告】
⚠️ 云端上传失败:{result}
本地报告路径:{local_html_path}
"""
    send_feishu_text(msg2)

步骤6:配置自动清理,永远不用手动删文件

目标:报告只留7天,过期自动删,不用手动清理。

  1. 进入Bucket详情页 → 左侧 数据管理 → 生命周期规则
  2. 点「创建规则」,照着填:
    • 规则名称:auto-delete-7day
    • 匹配前缀:report_files/(只清理报告文件夹里的文件)
    • 执行动作:文件创建满 7天 后删除
  3. 保存生效,之后过期文件会自动清理,不用人工管。

四、新手最容易踩的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云端 → 飞书推送永久链接 → 过期自动清理

不用维护服务器,不用手动传文件,几乎零成本,团队所有人点开链接就能看完整报告,比本地存文件、远程查报告效率高太多。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐