ログ記録を有効にすると、1 時間ごとのアクセスログファイルを生成し、指定したバケットに保存します。これらのログは、Log Service または Spark クラスターで分析できます。
使用上の注意
-
ソースバケットにリージョン属性がある場合、ターゲットバケットは同じアカウントおよびリージョンに属している必要があります。ターゲットバケットは、ソースバケットと同じでも、異なっていてもかまいません。
ソースバケットとターゲットバケットが同じ場合、ログ転送によって追加のログが生成され、ループが発生します。これを避けるために、ソースバケットとターゲットバケットは異なるものを指定してください。
-
ログファイルの生成には最大 48 時間かかる場合があります。リクエストは隣接する期間のファイルに記録される可能性があるため、特定の期間のログが完全かつタイムリーであることは保証されません。
-
OSS は、ログ記録を無効にするまで 1 時間ごとにログファイルを生成します。不要なログファイルを削除して、ストレージコストを削減してください。
最終更新時間に基づくライフサイクルルールを使用すると、ログファイルを定期的に削除できます。
-
OSS-HDFS の操作を中断させたり、データ汚染を引き起こしたりしないように、OSS-HDFS が有効になっているバケットのログ配布ルールを設定する際には、ログ接頭辞を
.dlsdata/に設定しないでください。 -
OSS はログに新しいフィールドを追加する可能性があります。ログ処理ツールが追加に対応できるように設計してください。たとえば、2025 年 9 月 17 日から、バケット ARN フィールドがログに追加されます。
-
ObjectWorm が有効になっているバケットへのログ転送は避けてください。ObjectWorm は、保持期間中のログの削除を妨げ、ストレージコストが着実に増加する原因となります。
ロギングの設定
バケットのロギング設定
コンソール
OSSコンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。
-
左側のナビゲーションペインで、 を選択します。
-
ロギング ページで ログストレージを有効にする をオンにし、次のパラメーターを設定します。
パラメーター
説明
ターゲットバケット
ログを格納するバケットです。 デフォルトは現在のバケットです。 必要に応じて、ドロップダウンリストから別のバケットを選択します。 ターゲットバケットは、同じアカウントおよびリージョンに属している必要があります。
ログプレフィックス
ログファイルを格納するターゲットバケット内のディレクトリです。 指定しない場合、ログはルートディレクトリに格納されます。 例:プレフィックスを log/ に設定すると、ログは log/ ディレクトリに格納されます。
RAM ロール
OSS がログを書き込むために使用するロールです。
-
デフォルトのサービスロール (推奨)
アカウント内のすべてのバケットに必要な権限を持つ
AliyunOSSLoggingDefaultRoleロールを自動的に作成します。 初めて利用する場合は、権限付与 をクリックしてロールを作成し、承認します。 -
カスタムロール
ロギング権限を特定のバケットに限定するには、カスタムロールを作成します。
-
信頼できる Alibaba Cloud サービス用の RAM ロールを作成します。ロールの作成時に、信頼できるサービスをクラウドサービスに、信頼できるサービスの選択を Object Storage Service (OSS) に設定します。
-
スクリプトエディターを使用してカスタムポリシーを作成します。
KMS 暗号化
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:List*", "kms:Describe*", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "oss:PutObject", "oss:AbortMultipartUpload" ], "Resource": "acs:oss:*:*:examplebucket/*" } ] }KMS 暗号化なし
このポリシーは、暗号化されていないバケット、または OSS が管理するサーバー側の暗号化が有効なバケットに使用します。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:PutObject", "oss:AbortMultipartUpload" ], "Resource": "acs:oss:*:*:examplebucket/*" } ] }
-
-
-
設定 をクリックします。
Ossutil
ossutil CLI を使用してロギングを有効にします。 ossutil をインストールします。
次のコマンドは、examplebucket のロギングを有効にし、アクセスログをプレフィックス MyLog- で destBucket に格納します。
ossutil api put-bucket-logging --bucket examplebucket --bucket-logging-status "{\"LoggingEnabled\":{\"TargetBucket\":\"destBucket\",\"TargetPrefix\":\"MyLog-\"}}"
詳細については、「put-bucket-logging」をご参照ください。
SDK
次の SDK の例を使用してロギングを設定します。 その他の SDK は、「SDK」に記載されています。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.SetBucketLoggingRequest;
public class Demo {
public static void main(String[] args) throws Exception {
// 中国 (杭州) のエンドポイントを例として使用します。実際のリージョンに応じたエンドポイントを指定してください。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// ロギングを有効にするバケットの名前 (例: examplebucket) を指定します。
String bucketName = "examplebucket";
// ログファイルを保存する宛先バケットを指定します。宛先バケットは、ソースバケットと同じでも異なっていてもかまいません。
String targetBucketName = "yourTargetBucketName";
// ログファイルが保存されるフォルダを log/ に設定します。このパラメーターを指定すると、ログファイルは宛先バケットの指定されたフォルダに保存されます。このパラメーターを指定しない場合、ログファイルは宛先バケットのルートディレクトリに保存されます。
String targetPrefix = "log/";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、このパラメーターを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
SetBucketLoggingRequest request = new SetBucketLoggingRequest(bucketName);
request.setTargetBucket(targetBucketName);
request.setTargetPrefix(targetPrefix);
ossClient.setBucketLogging(request);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
// 環境変数からアクセス認証情報を取得します。 このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = "yourEndpoint";
// bucket を、ロギングを有効にするバケットの名前に設定します (例: examplebucket)。
$bucket= "examplebucket";
$option = array();
// ログファイルを格納する宛先バケットを設定します。
$targetBucket = "destbucket";
// ログファイルを格納するディレクトリを設定します。 このパラメーターを指定すると、ログファイルは宛先バケット内の指定されたディレクトリに保存されます。 このパラメーターを指定しない場合、ログファイルは宛先バケットのルートディレクトリに保存されます。
$targetPrefix = "log/";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// ロギングを有効にします。
$ossClient->putBucketLogging($bucket, $targetBucket, $targetPrefix, $option);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n"); const OSS = require('ali-oss')
const client = new OSS({
// バケットが配置されているリージョンに region を設定します。 たとえば、中国 (杭州) の場合は、リージョンを oss-cn-hangzhou に設定します。
region: 'yourregion',
// 環境変数からアクセス認証情報を取得します。 このコードサンプルを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// bucket をご利用のバケット名に設定します。
bucket: 'yourbucketname'
});
async function putBucketLogging () {
try {
const result = await client.putBucketLogging('bucket-name', 'logs/');
console.log(result)
} catch (e) {
console.log(e)
}
}
putBucketLogging();# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import BucketLogging
# 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (例: cn-hangzhou) を指定します。注意: このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"
# examplebucket をバケット名に置き換えます。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# ログファイルを現在のバケットに保存します。
# ログファイルの保存先ディレクトリを log/ に設定します。このパラメーターを指定すると、ログファイルはバケット内の指定されたディレクトリに保存されます。このパラメーターを指定しない場合、ログファイルはバケットのルートディレクトリに保存されます。
# ロギング機能を有効にします。
logging = bucket.put_bucket_logging(BucketLogging(bucket.bucket_name, 'log/'))
if logging.status == 200:
print("アクセスロギングを有効化しました")
else:
print("request_id: ", logging.request_id)
print("resp: ", logging.resp.response) using Aliyun.OSS;
using Aliyun.OSS.Common;
// エンドポイントを設定します。この例では、中国 (杭州) リージョンのパブリックエンドポイントである https://oss-cn-hangzhou.aliyuncs.com を使用します。他のリージョンについては、エンドポイントを実際の値に設定します。
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// ロギングを有効にするバケットの名前 (例: examplebucket) を設定します。
var bucketName = "examplebucket";
// ログファイルを保存する宛先バケットを設定します。宛先バケットは、ソースバケットと同じでも異なっていてもかまいません。
var targetBucketName = "destbucket";
// バケットが配置されているリージョンを設定します。この例では、中国 (杭州) リージョンの ID である cn-hangzhou を使用します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、必要に応じてデフォルトパラメーターを変更します。
var conf = new ClientConfiguration();
// 署名バージョン 4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OssClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// ログファイルが保存されるフォルダを log/ に設定します。このフォルダを指定すると、ログファイルは宛先バケットの指定されたフォルダに保存されます。このフォルダを指定しない場合、ログファイルは宛先バケットのルートディレクトリに保存されます。
var request = new SetBucketLoggingRequest(bucketName, targetBucketName, "log/");
// ロギング機能を有効にします。
client.SetBucketLogging(request);
Console.WriteLine("Set bucket:{0} Logging succeeded ", bucketName);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}. Error message: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error message: {0}", ex.Message);
}PutBucketLoggingRequest request = new PutBucketLoggingRequest();
// アクセスロギングを有効にするソースバケットを指定します。
request.setBucketName("yourSourceBucketName");
// アクセスログを保存するターゲットバケットを指定します。
// ターゲットバケットとソースバケットは同じリージョンにある必要があります。 ソースバケットとターゲットバケットは、同じでも異なっていてもかまいません。
request.setTargetBucketName("yourTargetBucketName");
// ログファイルが保存されるフォルダを設定します。
request.setTargetPrefix("<yourTargetPrefix>");
OSSAsyncTask task = oss.asyncPutBucketLogging(request, new OSSCompletedCallback<PutBucketLoggingRequest, PutBucketLoggingResult>() {
@Override
public void onSuccess(PutBucketLoggingRequest request, PutBucketLoggingResult result) {
OSSLog.logInfo("code::"+result.getStatusCode());
}
@Override
public void onFailure(PutBucketLoggingRequest request, ClientException clientException, ServiceException serviceException) {
OSSLog.logError("error: "+serviceException.getRawMessage());
}
});
task.waitUntilFinished();package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用してください。
// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを使用してください。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// ロギングを有効にするバケットの名前 (例: examplebucket) を指定します。
bucketName := "examplebucket"
// ログファイルを格納する宛先バケットを指定します。宛先バケットとソースバケットは同じリージョンにある必要があります。これらは同じバケットでも、異なるバケットでもかまいません。
targetBucketName := "destbucket"
// ログファイルが格納されるフォルダを log/ に設定します。このパラメーターを指定すると、ログファイルは宛先バケットの指定されたフォルダに保存されます。このパラメーターを指定しない場合、ログファイルは宛先バケットのルートディレクトリに保存されます。
targetPrefix := "log/"
// ロギング機能を有効にします。
err = client.SetBucketLogging(bucketName, targetBucketName, targetPrefix, true)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。*/
/* バケットが所在するリージョンのエンドポイントに Endpoint を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、Endpoint を https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* バケットが所在するリージョンに Region を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、Region を cn-hangzhou に設定します。*/
std::string Region = "yourRegion";
/* ロギングを有効にするバケットの名前 (例: examplebucket) を入力します。*/
std::string BucketName = "examplebucket";
/* ログファイルを保存する宛先バケットを入力します。targetBucketName と bucketName は同じでも異なっていてもかまいません。*/
std::string TargetBucketName = "destbucket";
/* ログファイルが保存されるフォルダを log/ に設定します。このパラメーターを指定すると、ログファイルは宛先バケットの指定されたフォルダに保存されます。このパラメーターを指定しない場合、ログファイルは宛先バケットのルートディレクトリに保存されます。*/
std::string TargetPrefix ="log/";
/* ネットワークリソースを初期化します。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* ロギング機能を有効にします。*/
SetBucketLoggingRequest request(BucketName, TargetBucketName, TargetPrefix);
auto outcome = client.SetBucketLogging(request);
if (!outcome.isSuccess()) {
/* 例外を処理します。*/
std::cout << "SetBucketLogging fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースを解放します。*/
ShutdownSdk();
return 0;
}#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
const char *endpoint = "yourEndpoint";
/* バケット名を指定します。 たとえば、examplebucket です。 */
const char *bucket_name = "examplebucket";
/* ログファイルを格納する宛先バケットを指定します。 targetBucketName と bucketName は、同じでも異なっていてもかまいません。 */
const char *target_bucket_name = "yourTargetBucketName";
/* ログファイルが格納されるフォルダを設定します。 このパラメーターを指定すると、ログファイルは宛先バケットの指定されたフォルダに保存されます。 このパラメーターを指定しない場合、ログファイルは宛先バケットのルートディレクトリに保存されます。 */
const char *target_logging_prefix = "yourTargetPrefix";
/* yourRegion を、バケットが配置されているリージョンに設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* aos_string_t 型を char* 文字列で初期化します。 */
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
// 次の 2 つのパラメーターも設定する必要があります。
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* CNAME ドメイン名を使用するかどうかを指定します。 値 0 は、CNAME ドメイン名が使用されないことを示します。 */
options->config->is_cname = 0;
/* タイムアウト期間などのネットワークパラメーターを設定します。 */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* プログラムのエントリで aos_http_io_initialize メソッドを呼び出して、ネットワークやメモリなどのグローバルリソースを初期化します。 */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* メモリ管理用のメモリプール (pool) は apr_pool_t と同等です。 実装コードは apr ライブラリにあります。 */
aos_pool_t *pool;
/* メモリプールを作成します。 2 番目のパラメーターは NULL で、メモリプールが別のメモリプールから継承しないことを示します。 */
aos_pool_create(&pool, NULL);
/* オプションを作成して初期化します。 このパラメーターには、エンドポイント、access_key_id、access_key_secret、is_cname、curl などのグローバル構成情報が含まれます。 */
oss_request_options_t *oss_client_options;
/* メモリプール内のオプションにメモリを割り当てます。 */
oss_client_options = oss_request_options_create(pool);
/* クライアントオプション oss_client_options を初期化します。 */
init_options(oss_client_options);
/* パラメーターを初期化します。 */
aos_string_t bucket;
oss_logging_config_content_t *content;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_str_set(&bucket, bucket_name);
content = oss_create_logging_rule_content(pool);
aos_str_set(&content->target_bucket, target_bucket_name);
aos_str_set(&content->prefix, target_logging_prefix);
/* バケットのアクセスロギングを有効にします。 */
resp_status = oss_put_bucket_logging(oss_client_options, &bucket, content, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("put bucket logging succeeded\n");
} else {
printf("put bucket logging failed, code:%d, error_code:%s, error_msg:%s, request_id:%s\n",
resp_status->code, resp_status->error_code, resp_status->error_msg, resp_status->req_id);
}
/* メモリプールをリリースします。 これにより、リクエスト中にリソースに割り当てられたメモリが解放されます。 */
aos_pool_destroy(pool);
/* 以前に割り当てられたグローバルリソースをリリースします。 */
aos_http_io_deinitialize();
return 0;
}require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# エンドポイントの例として、中国 (杭州) リージョンが使用されています。必要に応じてリージョンを指定してください。
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# 環境変数からアクセス認証情報を取得します。このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET を設定してください。
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# バケット名を指定します (例: examplebucket)。
bucket = client.get_bucket('examplebucket')
# logging_bucket をログファイルの宛先バケットに設定します。
# my-log をログファイルの保存先フォルダに設定します。このパラメーターを指定すると、ログファイルは指定されたフォルダに保存されます。このパラメーターを指定しない場合、ログファイルは宛先バケットのルートディレクトリに保存されます。
bucket.logging = Aliyun::OSS::BucketLogging.new(
enable: true, target_bucket: 'logging_bucket', target_prefix: 'my-log')API
PutBucketLogging API を呼び出して、バケットのロギングを有効にします。
ベクターバケットのロギング設定
コンソール
-
[ベクターバケット] ページで、ターゲットバケットをクリックします。 左側のナビゲーションペインで、[ログ管理] > [ロギング] を選択します。
-
[ロギング] スイッチをオンにし、次のパラメーターを設定します:
-
ターゲットストレージの場所:ログファイルを格納するバケットを選択します。 バケットはベクターバケットと同じリージョンにある必要があります。
-
ログプレフィックス:ログファイルのディレクトリとプレフィックス (例:
MyLog-) を設定します。 -
RAM ロール:ロギングにはデフォルトのサービスロール AliyunOSSLoggingDefaultRole を使用するか、カスタムロールを選択します。
-
Ossutil
次の例は、examplebucket という名前のバケットのロギングを有効にする方法を示しています。ログファイルのプレフィックスは MyLog- で、アクセスログは examplebucket バケットに保存されます。
JSON 構成ファイルを使用できます。bucket-logging-status.json ファイルには、次の内容が含まれています。
{ "BucketLoggingStatus": { "LoggingEnabled": { "TargetBucket": "examplebucket", "TargetPrefix": "MyLog-", "LoggingRole": "AliyunOSSLoggingDefaultRole" } } }コマンド例:
ossutil vectors-api put-bucket-logging --bucket examplebucket --bucket-logging-status file://bucket-logging-status.jsonJSON 構成パラメーターを使用できます。コマンド例:
ossutil vectors-api put-bucket-logging --bucket examplebucket --bucket-logging-status "{\"BucketLoggingStatus\":{\"LoggingEnabled\":{\"TargetBucket\":\"examplebucket\",\"TargetPrefix\":\"MyLog-\",\"LoggingRole\":\"AliyunOSSLoggingDefaultRole\"}}}"
SDK
Python
import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors
parser = argparse.ArgumentParser(description="ベクターバケットのログストレージを有効にするサンプル")
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケット名。', required=True)
parser.add_argument('--endpoint', help='OSS にアクセスするためのエンドポイント。')
parser.add_argument('--account_id', help='アカウント ID。', required=True)
parser.add_argument('--target_bucket', help='ログを保存する先のバケット。', required=True)
def main():
args = parser.parse_args()
# 環境変数から認証情報値を読み込みます
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト構成を使用します
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = args.region
cfg.account_id = args.account_id
if args.endpoint is not None:
cfg.endpoint = args.endpoint
vector_client = oss_vectors.Client(cfg)
result = vector_client.put_bucket_logging(oss_vectors.models.PutBucketLoggingRequest(
bucket=args.bucket,
bucket_logging_status=oss_vectors.models.BucketLoggingStatus(
logging_enabled=oss_vectors.models.LoggingEnabled(
target_bucket=args.target_bucket,
target_prefix='log-prefix',
logging_role='AliyunOSSLoggingDefaultRole'
)
)
))
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
)
if __name__ == "__main__":
main()
Go
package main
import (
"context"
"flag"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/vectors"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
var (
region string
bucketName string
accountId string
)
func init() {
flag.StringVar(®ion, "region", "", "The region in which the vector bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the vector bucket.")
flag.StringVar(&accountId, "account-id", "", "The ID of the vector account.")
}
func main() {
flag.Parse()
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
if len(accountId) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, accountId required")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).WithAccountId(accountId)
client := vectors.NewVectorsClient(cfg)
request := &vectors.PutBucketLoggingRequest{
Bucket: oss.Ptr(bucketName),
BucketLoggingStatus: &vectors.BucketLoggingStatus{
&vectors.LoggingEnabled{
TargetBucket: oss.Ptr("TargetBucket"),
TargetPrefix: oss.Ptr("TargetPrefix"),
LoggingRole: oss.Ptr("AliyunOSSLoggingDefaultRole"),
},
},
}
result, err := client.PutBucketLogging(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put vector bucket logging %v", err)
}
log.Printf("put vector bucket logging result:%#v\n", result)
}
API
PutBucketLogging API を呼び出して、ベクターバケットのロギングを有効にします。
ログファイルの命名
ログファイルは、以下の命名規則に従って命名されます。
<TargetPrefix><SourceBucket>YYYY-mm-DD-HH-MM-SS-UniqueString
|
パラメーター |
説明 |
|
TargetPrefix |
ログファイル名のプレフィックスです。 |
|
SourceBucket |
アクセスログを生成するソースバケットです。 |
|
YYYY-mm-DD-HH-MM-SS |
年、月、日、時、分、秒フォーマットのタイムスタンプです。 ログは 1 時間ごとの粒度です。 HH=01 は、01:00:00 から 01:59:59 までを対象とします。 MM と SS は常に 00 です。 |
|
UniqueString |
システムによって生成される、ログファイルの一意の識別子です。 |
ログフォーマットと例
-
ログフォーマット
OSS アクセスログには、リクエスターとアクセスされたリソースに関する情報が含まれます。フォーマットは次のとおりです。
RemoteIP Reserved Reserved Time "RequestURL" HTTPStatus SentBytes RequestTime "Referer" "UserAgent" "HostName" "RequestID" "LoggingFlag" "RequesterAliyunID" "Operation" "BucketName" "ObjectName" ObjectSize ServerCostTime "ErrorCode" RequestLength "UserID" DeltaDataSize "SyncRequest" "StorageClass" "TargetStorageClass" "TransmissionAccelerationAccessPoint" "AccessKeyID" "BucketARN"フィールド
例
説明
RemoteIP
192.168.0.1
リクエスターの IP アドレスです。
Reserved
-
予約済みフィールドです。値は常にハイフン (-) です。
Reserved
-
予約済みフィールドです。値は常にハイフン (-) です。
Time
03/Jan/2021:14:59:49 +0800
OSS がリクエストを受信した時刻です。
RequestURL
GET /example.jpg HTTP/1.0
クエリ文字列を含むリクエスト URL です。
OSS は、
x-で始まるクエリ文字列パラメーターを無視しますが、アクセスログにはそれらを記録します。特定のリクエストのタグ付けや特定には、x-プレフィックス付きのパラメーターを使用します。HTTPStatus
200
OSS が返した HTTP ステータスコードです。
SentBytes
999131
リクエストによって生成された下りトラフィック (バイト単位) です。
RequestTime
127
リクエストの完了時間 (ミリ秒単位) です。
Referer
http://www.aliyun.com/product/oss
リクエストの HTTP Referer です。
UserAgent
curl/7.15.5
HTTP リクエストのユーザーエージェントヘッダーです。
HostName
examplebucket.oss-cn-hangzhou.aliyuncs.com
送信先ドメイン名です。
RequestID
5FF16B65F05BC932307A3C3C
リクエスト ID です。
LoggingFlag
true
ロギングが有効かどうかを示します。有効な値:
-
true:ロギングが有効です。
-
false:ロギングは無効です。
RequesterAliyunID
16571836914537****
リクエスターのユーザー ID。ハイフン (-) は匿名リクエストを示します。
Operation
GetObject
実行された操作です。
BucketName
examplebucket
送信先バケットの名前です。
ObjectName
example.jpg
送信先オブジェクトの名前です。
ObjectSize
999131
送信先オブジェクトのサイズ (バイト単位) です。
ServerCostTime
88
OSS がリクエストを処理するのにかかった時間 (ミリ秒単位) です。
ErrorCode
-
OSS が返すエラーコードです。ハイフン (-) は、エラーが返されなかったことを示します。
RequestLength
302
リクエストの長さ (バイト単位) です。
UserID
16571836914537****
バケット所有者の ID です。
DeltaDataSize
-
オブジェクトサイズの変更量。ハイフン (-) は、リクエストに書き込み操作が含まれていなかったことを示します。
SyncRequest
cdn
リクエストのタイプです。有効な値:
-
-:一般的なリクエスト。
-
cdn:CDN オリジンリクエスト。
-
lifecycle:ライフサイクルルールによってトリガーされた、データの移行または削除のリクエスト。
StorageClass
standard
送信先オブジェクトのストレージクラスです。有効な値:
-
Standard:スタンダード。
-
IA:低頻度アクセス。
-
Archive:アーカイブ。
-
Cold Archive:コールドアーカイブ。
-
Deep Cold Archive:ディープコールドアーカイブ。
-
-:オブジェクトのストレージクラスが取得できなかったことを示します。
TargetStorageClass
-
ライフサイクルまたは CopyObject 移行後のストレージクラスです。有効な値:
-
Standard:スタンダードに変更。
-
IA:低頻度アクセスに変更。
-
Archive:アーカイブに変更。
-
Cold Archive:コールドアーカイブに変更。
-
Deep Cold Archive:ディープコールドアーカイブに変更。
-
-:オブジェクトストレージクラスの変換操作は含まれていません。
TransmissionAccelerationAccessPoint
-
バケットへのアクセスに使用された転送アクセラレーションエンドポイントのリージョンです。例: China (Hangzhou) リージョンの場合は cn-hangzhou です。
ハイフン (-) は、転送アクセラレーションドメインが使用されなかったこと、またはエンドポイントがバケットと同じリージョンにあることを示します。
AccessKeyID
LTAI****************
リクエスターの AccessKey ID です。
-
コンソールからのリクエストの場合、ログフィールドには TMP で始まる一時的な AccessKey ID が表示されます。
-
長期キーを使用するツールまたは SDK からのリクエストの場合、ログフィールドには通常の AccessKey ID が表示されます。例:
LTAI****************。 -
Security Token Service (STS) からの一時アクセス認証情報を使用するリクエストの場合、ログには STS で始まる一時的な AccessKey ID が表示されます。
説明このフィールドのハイフン (-) は、匿名リクエストを示します。
BucketARN
acs:oss***************
バケットのグローバルに一意なリソース記述子です。
-
-
ログの例
192.168.0.1 - - [03/Jan/2021:14:59:49 +0800] "GET /example.jpg HTTP/1.0" 200 999131 127 "http://www.aliyun.com/product/oss" "curl/7.15.5" "examplebucket.oss-cn-hangzhou.aliyuncs.com" "5FF16B65F05BC932307A3C3C" "true" "16571836914537****" "GetObject" "examplebucket" "example.jpg" 999131 88 "-" 302 "16571836914537****" - "cdn" "standard" "-" "-" "LTAI****************" "acs:oss***************"保存されたログファイルを Log Service にインポートして分析できます。 OSS データのインポート。 クエリと分析の概要。