通過使用Log ServiceSLS的即時日誌查詢,您可以分析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 陳述式查詢完整的大量刪除記錄。