如何统计AWS CloudFront中整段HLS视频的总传输数据量?
当然可行!CloudFront自带的报表确实只展示Top50对象,但我们有几种靠谱的方法可以拿到整个视频文件夹的总传输字节数,下面给你详细拆解:
方法1:用CloudFront访问日志+Athena分析(最推荐)
这是最准确、通用的方案,不管你之前有没有提前配置,只要开启了CloudFront日志就能用:
- 第一步:确认CloudFront的标准访问日志已开启。如果还没开,去CloudFront控制台找到你的分发,进入「设置」→「日志」,开启后指定一个S3存储桶来存放日志(日志会按小时自动生成)。
- 第二步:在Athena中创建关联日志的表。用下面的SQL语句(记得替换成你的日志存储S3路径):
CREATE EXTERNAL TABLE cloudfront_logs ( date DATE, time STRING, x_edge_location STRING, sc_bytes BIGINT, c_ip STRING, cs_method STRING, cs_host STRING, cs_uri_stem STRING, sc_status INT, cs_referer STRING, cs_user_agent STRING, cs_uri_query STRING, cs_cookie STRING, x_edge_result_type STRING, x_edge_request_id STRING, x_host_header STRING, cs_protocol STRING, cs_bytes BIGINT, time_taken FLOAT, x_forwarded_for STRING, ssl_protocol STRING, ssl_cipher STRING, x_edge_response_result_type STRING, cs_protocol_version STRING, fle_status STRING, fle_encrypted_fields STRING, c_port INT, time_to_first_byte FLOAT, x_edge_detailed_result_type STRING, sc_content_type STRING, sc_content_len BIGINT, sc_range_start BIGINT, sc_range_end BIGINT ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)' ) LOCATION 's3://your-log-bucket/path/to/cloudfront-logs/';
- 第三步:运行查询统计总传输量。假设你的视频文件夹路径是
/videos/summer-vacation/,执行下面的SQL就能得到所有.ts文件的总传输字节数:
SELECT SUM(sc_bytes) AS total_transferred_bytes FROM cloudfront_logs WHERE cs_uri_stem LIKE '/videos/summer-vacation/%.ts';
这个查询会遍历所有日志,把匹配路径的.ts文件传输字节全部累加,结果完全准确。
方法2:CloudWatch指标+自定义维度(需提前配置)
如果你之前给视频文件夹的对象设置了自定义标签,或者在CloudFront里配置了自定义维度(比如给/videos/summer-vacation/下的对象打上VideoFolder: summer-vacation的维度),可以直接用CloudWatch聚合数据:
- 打开CloudWatch控制台,找到CloudFront的
BytesDownloaded指标; - 按自定义维度筛选出目标文件夹的指标,就能直接看到该文件夹的总传输量。
不过这个方法需要提前配置,如果你之前没设置,还是方法1更适合。
方法3:S3访问日志(仅作参考)
如果CloudFront日志没开,你可以试试查看S3的访问日志(前提是S3日志也开启了)。但要注意:S3日志里的字节数是CloudFront回源时的请求字节数,而CloudFront有缓存机制,大部分用户请求会直接命中缓存,不会回源,所以这个数据会比实际分发量小很多,只能作为粗略参考,不建议用来做准确统计。
总的来说,方法1是首选,只要开启了CloudFront日志,不管日志积累了多久,Athena都能快速帮你算出整个文件夹的总传输字节数。
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

