实时OSS日志查询常见示例

通过使用日志服务SLS的实时日志查询,您可以分析OSS的访问日志和每小时计量日志,以监控和优化OSS的使用,定位和分析问题,提升存储和访问效率。本文介绍实时日志查询的常见示例。

分析某个OSS目录下文件的外网流出流量

OSS用量查询无法精确到某个目录。您可以通过OSS访问日志中的host字段过滤外网访问域名,sync_request字段排除CDN回源请求,object字段前缀匹配目录文件,最后通过response_body_length字段计算总和,获得指定目录下文件的外网流出流量。

查询和分析语句

统计examplebucketbucketexampledir目录下所有文件的外网流出流量。

* 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外网流出流量的实际费用请以账单为准。

名为examplebucketbucketexampledir目录下所有文件的外网流出流量总计为11749字节。

1.png

分析某个OSS目录下文件的大小增减情况

OSS用量查询可以查看Bucket下所有文件的大小增减,但无法精确到某个目录。若需分析某个OSS目录下文件的大小增减情况,您可以通过匹配OSS访问日志中的object字段前缀统计目录下的文件,并计算delta_data_size字段的总和,从而获得指定目录下所有文件大小的增减情况。

查询和分析语句

统计examplebucketexampledir目录下文件的大小增减情况。

* and __topic__ : oss_access_log and bucket: examplebucket | select
  SUM(delta_data_size) AS total_delta_data_size
WHERE
  url_decode(object) LIKE 'exampledir/%'

查询和分析结果

名为examplebucketbucketexampledir目录下文件的大小增加了941字节。

2.png

分析未通过CDN加速的OSS外网请求

在开启CDN加速服务后,如果依然能观察到显著的OSS外网请求,则说明您的业务中引用的资源URL仍指向OSS源站,而非CDN加速域名。为了识别未通过CDN加速的外网请求,您可以通过OSS访问日志中的host字段过滤出OSS外网访问域名,通过sync_request字段排除CDN回源请求。您还可以结合使用referer字段确定这些请求的来源网页或应用程序。

查询和分析语句

分析名为examplebucketbucket未通过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外网流出流量的实际费用请以账单为准。

分析名为examplebucketbucket未通过CDN加速的OSS外网请求的结果显示,引起流量最多的前三个来源分别是:Referer字段为空的请求(可能是由于用户直接在浏览器地址栏输入URL),以及来自以.com.vip域名结尾的网站的请求。

3.png

查询文件的批量删除记录

通过实时日志查询 OSS 文件的批量删除的记录。批量删除的文件信息存放在 HTTP 请求的 Body 中,通过 Request ID 可以关联查询相关记录。

方法一:已知 Request ID

替换以下 SQL 语句中的bucketnamerequest_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'

1

方法二:未知Request ID

如果没有Request ID 信息,可通过以下步骤查询:

  1. 通过批量删除文件时的文件名称或时间等信息定位 Request ID,例如替换以下 SQL 语句中的bucketname和文件名称进行查询:

    * and __topic__: oss_batch_delete_log and bucket: bucketname | select request_id where url_decode(object) = 'test/001.bin'

    1

  2. 获取 Request ID 后,按方法一的 SQL 语句查询完整的批量删除记录。