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

如何对比S3两个文件夹的CloudWatch指标?子级指标是否付费?

关于AWS S3文件夹级CloudWatch指标的疑问解答

一、S3子文件夹(前缀)级指标是否付费?

首先给你明确清楚:

  • AWS S3默认的CloudWatch指标是桶级别的,这部分完全免费,但没法直接获取文件夹(前缀)维度的细分指标。
  • 要拿到前缀级的指标,主要有两种路径,费用情况各有不同:
    1. S3 Storage Lens:
      • 有免费基础层,可以提供前缀级的核心指标(包括你需要的NumberOfObjects和BucketSizeBytes),最多支持10个存储桶,完全能满足你对比两个前缀的需求。
      • 如果需要更高级的功能(比如跨账户多桶分析、自定义过滤规则、导出详细报告等),就得用付费的高级层,费用按存储桶数量和分析的数据量计算。
    2. 自定义CloudWatch指标(通过Lambda实现):
      • 这种方式需要你写一段Lambda代码,定期遍历指定前缀下的所有对象,统计数量和大小,再把数据推送到CloudWatch自定义指标里。这里的费用来自Lambda的执行时长/调用次数,以及CloudWatch自定义指标的存储和查询成本。如果你的文件夹对象数量不多,这个成本其实极低,甚至可能落在AWS免费额度范围内。

二、如何绘制两个文件夹的指标对比图表?

针对你的需求,最快上手的方式是用S3 Storage Lens:

  1. 打开AWS控制台的S3服务,进入Storage Lens页面。
  2. 新建一个仪表盘(或者直接用默认仪表盘),在筛选条件里指定你的logs-bucket,然后添加两个前缀过滤项:error/2019/01/和info/2019/01/。
  3. 在指标列表里勾选NumberOfObjects和BucketSizeBytes,Storage Lens会自动生成对比图表,你可以调整时间范围、切换图表类型(比如柱状图、折线图)来直观查看两个前缀的指标差异。

如果不想用Storage Lens,用自定义指标的思路大概是这样:

  • 编写Lambda函数(Python示例参考):
    import boto3
    
    s3_client = boto3.client('s3')
    cloudwatch_client = boto3.client('cloudwatch')
    
    def lambda_handler(event, context):
        # 定义目标桶和两个前缀
        bucket_name = 'logs-bucket'
        target_prefixes = ['error/2019/01/', 'info/2019/01/']
    
        for prefix in target_prefixes:
            obj_count = 0
            total_size = 0
            # 分页遍历前缀下的所有对象
            paginator = s3_client.get_paginator('list_objects_v2')
            for page in paginator.paginate(Bucket=bucket_name, Prefix=prefix):
                if 'Contents' in page:
                    obj_count += len(page['Contents'])
                    total_size += sum(obj['Size'] for obj in page['Contents'])
            
            # 推送指标到CloudWatch
            cloudwatch_client.put_metric_data(
                Namespace='S3/PrefixMetrics',
                MetricData=[
                    {
                        'MetricName': 'NumberOfObjects',
                        'Dimensions': [{'Name': 'Bucket', 'Value': bucket_name}, {'Name': 'Prefix', 'Value': prefix}],
                        'Value': obj_count,
                        'Unit': 'Count'
                    },
                    {
                        'MetricName': 'BucketSizeBytes',
                        'Dimensions': [{'Name': 'Bucket', 'Value': bucket_name}, {'Name': 'Prefix', 'Value': prefix}],
                        'Value': total_size,
                        'Unit': 'Bytes'
                    }
                ]
            )
    
  • 给Lambda配置合适的IAM权限(允许读取目标S3桶的对象、写入CloudWatch指标)。
  • 设置Lambda的触发规则(比如每天定时运行一次,或者手动按需触发)。
  • 等指标推送到CloudWatch后,进入CloudWatch控制台创建图表,添加两个前缀对应的NumberOfObjects和BucketSizeBytes指标,就能生成对比图表了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:24:55