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

如何按文件名统计S3中JSON文件的月度PUT/GET请求量?

如何统计S3单个JSON文件的月度PUT/GET请求次数

首先明确:AWS原生服务(CloudWatch、账单控制台)目前不支持直接按单个对象维度统计请求次数。CloudWatch的S3指标是桶级别的,账单也是按桶或服务维度计费,没法细化到单个文件。不过有两种可行的替代方案,给你详细说明:

方案一:Lambda+CloudWatch自定义指标(实时统计)

这是最直接的实时统计方案,通过监听S3对象操作事件,用Lambda上报自定义指标,之后就能在CloudWatch里查询和导出数据:

1. 配置Lambda函数与S3事件触发

  • 创建一个Python Lambda函数,逻辑是解析S3的PUT/GET事件,提取对象键和操作类型,然后向CloudWatch上报带维度的自定义指标。
  • 给你的S3桶配置事件通知:选择All object create events(对应PUT)和GetObject事件,把这些事件发送到刚才创建的Lambda函数。

示例Lambda代码:

import boto3
from datetime import datetime

cloudwatch = boto3.client('cloudwatch')
# 自定义指标命名空间,可自行命名
METRIC_NAMESPACE = 'S3ObjectRequestMetrics'

def lambda_handler(event, context):
    for record in event['Records']:
        event_name = record['eventName']
        object_key = record['s3']['object']['key']
        
        # 过滤出PUT和GET操作
        if 'PutObject' in event_name:
            op_type = 'PUT'
        elif 'GetObject' in event_name:
            op_type = 'GET'
        else:
            continue
        
        # 按年月生成维度值,格式如"2024-05"
        current_month = datetime.utcnow().strftime('%Y-%m')
        
        # 上报CloudWatch自定义指标
        cloudwatch.put_metric_data(
            Namespace=METRIC_NAMESPACE,
            MetricData=[
                {
                    'MetricName': f'{op_type}Count',
                    'Dimensions': [
                        {'Name': 'ObjectKey', 'Value': object_key},
                        {'Name': 'Month', 'Value': current_month}
                    ],
                    'Value': 1,
                    'Unit': 'Count'
                }
            ]
        )
    return {'statusCode': 200, 'body': 'Metrics reported successfully'}

2. 查询与导出数据

  • 在CloudWatch控制台的「指标」页面,找到你自定义的命名空间,就能按ObjectKey(文件名)和Month维度筛选,查看每个JSON文件每月的PUT/GET次数。
  • 导出CSV:在指标图表页面点击「导出数据」,选择CSV格式即可;如果需要批量获取,也可以调用CloudWatch的get_metric_statistics API来拉取数据,再自行处理成CSV。

注意事项

  • 给Lambda配置IAM权限:需要允许cloudwatch:PutMetricData权限,以及S3事件触发的基础权限。
  • 并发与配额:如果请求量很大,要注意Lambda的并发限制,以及CloudWatch自定义指标的配额(默认每个账号最多10000个自定义指标,超出可申请提升)。
  • 历史数据:这个方案只能统计配置之后的请求,之前的请求无法回溯。

方案二:分析S3访问日志(回溯历史数据)

如果你之前已经开启了S3访问日志,可以通过Athena来分析日志,统计历史的对象级请求:

  1. 确保S3桶已开启访问日志,日志存储到另一个S3桶中。
  2. 在Athena中创建一个表,映射S3日志的结构(Athena有现成的S3日志表模板)。
  3. 编写SQL查询,按月份、对象键、请求类型统计次数,示例:
SELECT
  date_format(date_parse(substring(requestdatetime, 1, 10), '%d/%b/%Y'), '%Y-%m') AS month,
  uri AS object_key,
  CASE WHEN operation = 'REST.PUT.OBJECT' THEN 'PUT' WHEN operation = 'REST.GET.OBJECT' THEN 'GET' END AS request_type,
  count(*) AS request_count
FROM
  your_s3_log_table
WHERE
  uri LIKE '%.json' -- 仅统计JSON文件
GROUP BY
  month, object_key, request_type
ORDER BY
  month, object_key
  1. 查询结果可直接导出为CSV,或通过Athena API获取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:04:05