You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python测量Amazon S3存储桶出入站带宽 定位超额流量成本来源

S3交互IO流量测量Python方案

核心实现路径

不需要引入复杂的第三方监控组件,基于AWS官方的Python SDK生态即可实现精准的流量统计,无需大幅度修改现有业务代码:

  • 优先用botocore全局事件钩子实现无侵入统计,全局钩子会拦截所有S3请求的收发事件,自动统计上下行字节数,适合已经做了大量代码迭代的场景。
    示例代码如下:
import boto3

# 累计统计变量,可根据需求扩展分桶、分接口、分对象前缀维度的统计字典
total_outbound_bytes = 0 # 对应S3侧统计的入站流量(你上传到S3的流量)
total_inbound_bytes = 0 # 对应S3侧统计的出站流量(从S3下载到你服务的流量,即你的计费流量核心组成)

def count_traffic(**kwargs):
    global total_outbound_bytes, total_inbound_bytes
    # 统计上传到S3的流量
    if 'request' in kwargs:
        req = kwargs['request']
        if req.body:
            content_length = int(req.headers.get('Content-Length', 0))
            total_outbound_bytes += content_length
    # 统计从S3下载的流量
    if 'response' in kwargs:
        resp = kwargs['response'][1]
        content_length = int(resp.headers.get('Content-Length', 0))
        total_inbound_bytes += content_length

# 注册全局事件钩子,覆盖所有S3操作
session = boto3.Session()
session.events.register('before-send.s3.*', count_traffic)
session.events.register('after-call.s3.*', count_traffic)

# 之后正常使用session创建S3客户端即可,所有流量会自动统计
s3 = session.client('s3')
# 你的原有业务代码...
  • 如果只需要统计特定S3传输任务的流量,可以用boto3依赖自带的s3transfer库的进度回调接口,给单个上传/下载任务绑定统计逻辑,适合定位特定业务接口的流量消耗。

注意事项

  • 代码统计的纯业务数据流量和S3账单的计费流量会有小幅差值,S3计费会包含请求头、元数据、TCP握手等额外开销,差值在5%以内属于正常情况。
  • 如需精准定位异常流量来源,可在统计逻辑中扩展记录操作类型(GET/PUT/List等)、目标桶名、对象键前缀等维度,导出统计结果后即可快速匹配到异常的业务代码逻辑。

内容的提问来源于stack exchange,提问作者pam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:24:01