通过使用日志服务SLS的实时日志查询,您可以分析OSS的访问日志和每小时计量日志,以监控和优化OSS的使用,定位和分析问题,提升存储和访问效率。本文介绍实时日志查询的常见示例。
分析某个OSS目录下文件的外网流出流量
OSS用量查询无法精确到某个目录。您可以通过OSS访问日志中的host
字段过滤外网访问域名,sync_request
字段排除CDN回源请求,object
字段前缀匹配目录文件,最后通过response_body_length
字段计算总和,获得指定目录下文件的外网流出流量。
查询和分析语句
统计examplebucket
的bucket中exampledir
目录下所有文件的外网流出流量。
* and __topic__ : oss_access_log and bucket: examplebucket and host : "examplebucket.oss-cn-hangzhou.aliyuncs.com" not sync_request : cdn | select
SUM(response_body_length) AS total_traffic_out_byte
WHERE
url_decode(object) LIKE 'exampledir/%'
查询和分析结果
由于请求的host
字段可能被伪造,因此以下查询结果仅供预估。关于OSS外网流出流量的实际费用请以账单为准。
名为examplebucket
的bucket中exampledir
目录下所有文件的外网流出流量总计为11749字节。
分析某个OSS目录下文件的大小增减情况
OSS用量查询可以查看Bucket下所有文件的大小增减,但无法精确到某个目录。若需分析某个OSS目录下文件的大小增减情况,您可以通过匹配OSS访问日志中的object字段前缀统计目录下的文件,并计算delta_data_size
字段的总和,从而获得指定目录下所有文件大小的增减情况。
查询和分析语句
统计examplebucket
中exampledir
目录下文件的大小增减情况。
* and __topic__ : oss_access_log and bucket: examplebucket | select
SUM(delta_data_size) AS total_delta_data_size
WHERE
url_decode(object) LIKE 'exampledir/%'
查询和分析结果
名为examplebucket
的bucket中exampledir
目录下文件的大小增加了941字节。
分析未通过CDN加速的OSS外网请求
在开启CDN加速服务后,如果依然能观察到显著的OSS外网请求,则说明您的业务中引用的资源URL仍指向OSS源站,而非CDN加速域名。为了识别未通过CDN加速的外网请求,您可以通过OSS访问日志中的host
字段过滤出OSS外网访问域名,通过sync_request
字段排除CDN回源请求。您还可以结合使用referer
字段确定这些请求的来源网页或应用程序。
查询和分析语句
分析名为examplebucket
的bucket未通过CDN加速的OSS外网请求。
* and __topic__: oss_access_log and bucket: examplebucket and host : "examplebucket.oss-cn-hangzhou.aliyuncs.com" not sync_request: cdn | select
referer,
host,
count(*) as request_count
group by
referer,
host
order by request_count desc
查询和分析结果
由于请求的host
字段可能被伪造,因此以下查询结果仅供预估。关于OSS外网流出流量的实际费用请以账单为准。
分析名为examplebucket
的bucket未通过CDN加速的OSS外网请求的结果显示,引起流量最多的前三个来源分别是:Referer字段为空的请求(可能是由于用户直接在浏览器地址栏输入URL),以及来自以.com
和.vip
域名结尾的网站的请求。
查询文件的批量删除记录
通过实时日志查询 OSS 文件的批量删除的记录。批量删除的文件信息存放在 HTTP 请求的 Body 中,通过 Request ID 可以关联查询相关记录。
方法一:已知 Request ID
替换以下 SQL 语句中的bucketname
和request_id
进行查询:
* and __topic__: oss_batch_delete_log and operation : DeleteObjects and bucket: bucketname | select from_unixtime( __time__) as Time,url_decode(object) as objectname,user_agent where request_id = '68xxxxxxxxxxxxxxxxxxxxxx'
方法二:未知Request ID
如果没有Request ID 信息,可通过以下步骤查询:
通过批量删除文件时的文件名称或时间等信息定位 Request ID,例如替换以下 SQL 语句中的
bucketname
和文件名称进行查询:* and __topic__: oss_batch_delete_log and bucket: bucketname | select request_id where url_decode(object) = 'test/001.bin'
获取 Request ID 后,按方法一的 SQL 语句查询完整的批量删除记录。