Simple Log Service (SLS) のリアルタイムログクエリ機能を使用して、Object Storage Service (OSS) のアクセスログと時間単位のメータリングログを分析できます。これにより、OSS の使用状況の監視と最適化、問題の特定と分析、ストレージとアクセス効率の向上が可能になります。このトピックでは、リアルタイムログクエリの一般的なクエリ例を紹介します。
OSS フォルダー内のファイルのインターネットアウトバウンドトラフィックの分析
OSS の使用状況クエリでは、範囲を特定のフォルダーに限定できません。フォルダー内のファイルのインターネットアウトバウンドトラフィックを計算するには、OSS アクセスログを分析します。ログでは、host フィールドを使用してパブリックエンドポイントでフィルタリングし、sync_request フィールドを使用して CDN オリジンリクエストを除外し、object フィールドのプレフィックスを使用してファイルを照合します。最後に、response_body_length フィールドの値を合計して、総トラフィック量を取得します。
クエリステートメント
examplebucket バケットの 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 バケットの exampledir フォルダー内にあるすべてのファイルのインターネットアウトバウンドトラフィックの合計は 11749 バイトです。
OSS フォルダー内のファイルサイズの変更の分析
OSS の使用量のクエリは、バケット内のすべてのファイルのサイズ変更を表示しますが、特定のフォルダーについては表示しません。特定のフォルダー内のファイルサイズの変更を分析するには、OSS アクセスログのオブジェクトフィールドのプレフィックスを照合して、フォルダー内のファイルを特定できます。その後、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 バケットの exampledir フォルダー内のファイルサイズが 941 バイト増加しました。
CDN によって高速化されていない OSS インターネットリクエストの分析
CDN アクセラレーションを有効にした後でも、多数の OSS インターネットリクエストが発生する場合があります。これは、アプリケーション内のリソース URL が、CDN ドメイン名ではなく、依然として OSS ソースを指していることを示します。これらの高速化されていないリクエストを特定するには、OSS アクセスログを分析します。host フィールドを使用して OSS パブリックエンドポイントをフィルタリングし、sync_request フィールドを使用して CDN オリジンリクエストを除外します。また、referer フィールドを使用して、これらのリクエストのソース Web ページまたはアプリケーションを特定することもできます。
クエリステートメント
examplebucket バケットで 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 バケットに対する高速化されていない OSS インターネットリクエストの結果は、トラフィックの上位 3 つのソースを示しています。ソースには、ユーザーがブラウザーに直接 URL を入力した場合に発生する可能性がある Referer フィールドが空のリクエスト、およびドメイン名が .com と .vip で終わる Web サイトからのリクエストが含まれます。
ファイルの一括削除レコードのクエリ
リアルタイムログクエリを使用して、OSS での一括削除操作のレコードをクエリできます。一括削除操作では、削除された各ファイルが個別のログエントリとして記録され、これらのログは同じリクエスト ID を共有します。削除されたファイル名は object フィールドに記録されるため、リクエスト ID を使用して関連するすべてのレコードをクエリできます。
方法 1:既知のリクエスト 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'
クエリを実行すると、結果テーブルに一致する削除レコードが返されます。user_agent 列に aliyun-oss-console と表示されている場合、その削除操作が OSS コンソールから開始されたことを示します。この情報を使用して、削除されたオブジェクトと操作のソースを特定できます。
方法 2:不明なリクエスト ID
リクエスト ID がない場合は、次の手順に従ってクエリを実行します。
-
ファイル名や一括削除の時刻などの情報を使用して、リクエスト ID を特定します。たとえば、クエリを実行するには、次の SQL ステートメントの
bucketnameとファイル名を置き換えます。* and __topic__:oss_batch_delete_log and bucket:bucketname | select request_id where url_decode(object) = 'test/001.bin'クエリは
request_id列を返します。値の例は68666811B2D29830309BC41Eです。 -
リクエスト ID を取得したら、方法 1 の SQL ステートメントを使用して、完全な一括削除レコードをクエリできます。