すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:ログシッピング

最終更新日:May 28, 2026

ログ記録を有効にすると、1 時間ごとのアクセスログファイルを生成し、指定したバケットに保存します。これらのログは、Log Service または Spark クラスターで分析できます。

使用上の注意

  • ソースバケットにリージョン属性がある場合、ターゲットバケットは同じアカウントおよびリージョンに属している必要があります。ターゲットバケットは、ソースバケットと同じでも、異なっていてもかまいません。

    ソースバケットとターゲットバケットが同じ場合、ログ転送によって追加のログが生成され、ループが発生します。これを避けるために、ソースバケットとターゲットバケットは異なるものを指定してください。

  • ログファイルの生成には最大 48 時間かかる場合があります。リクエストは隣接する期間のファイルに記録される可能性があるため、特定の期間のログが完全かつタイムリーであることは保証されません。

  • OSS は、ログ記録を無効にするまで 1 時間ごとにログファイルを生成します。不要なログファイルを削除して、ストレージコストを削減してください。

    最終更新時間に基づくライフサイクルルールを使用すると、ログファイルを定期的に削除できます。

  • OSS-HDFS の操作を中断させたり、データ汚染を引き起こしたりしないように、OSS-HDFS が有効になっているバケットのログ配布ルールを設定する際には、ログ接頭辞 .dlsdata/ に設定しないでください。

  • OSS はログに新しいフィールドを追加する可能性があります。ログ処理ツールが追加に対応できるように設計してください。たとえば、2025 年 9 月 17 日から、バケット ARN フィールドがログに追加されます。

  • ObjectWorm が有効になっているバケットへのログ転送は避けてください。ObjectWorm は、保持期間中のログの削除を妨げ、ストレージコストが着実に増加する原因となります。

ロギングの設定

バケットのロギング設定

コンソール

  1. OSSコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケット をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションペインで、ログ > ロギング を選択します。

  4. ロギング ページで ログストレージを有効にする をオンにし、次のパラメーターを設定します。

    パラメーター

    説明

    ターゲットバケット

    ログを格納するバケットです。 デフォルトは現在のバケットです。 必要に応じて、ドロップダウンリストから別のバケットを選択します。 ターゲットバケットは、同じアカウントおよびリージョンに属している必要があります。

    ログプレフィックス

    ログファイルを格納するターゲットバケット内のディレクトリです。 指定しない場合、ログはルートディレクトリに格納されます。 例:プレフィックスを log/ に設定すると、ログは log/ ディレクトリに格納されます。

    RAM ロール

    OSS がログを書き込むために使用するロールです。

    • デフォルトのサービスロール (推奨)

      アカウント内のすべてのバケットに必要な権限を持つ AliyunOSSLoggingDefaultRole ロールを自動的に作成します。 初めて利用する場合は、権限付与 をクリックしてロールを作成し、承認します。

    • カスタムロール

      ロギング権限を特定のバケットに限定するには、カスタムロールを作成します。

      1. 信頼できる Alibaba Cloud サービス用の RAM ロールを作成します。ロールの作成時に、信頼できるサービスをクラウドサービスに、信頼できるサービスの選択を Object Storage Service (OSS) に設定します。

      2. スクリプトエディターを使用してカスタムポリシーを作成します

        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/*"
            }
          ]
        }
      3. RAM ロールに権限を付与します

  5. 設定 をクリックします。

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 を呼び出して、バケットのロギングを有効にします。

ベクターバケットのロギング設定

コンソール

  1. [ベクターバケット] ページで、ターゲットバケットをクリックします。 左側のナビゲーションペインで、[ログ管理] > [ロギング] を選択します。

  2. [ロギング] スイッチをオンにし、次のパラメーターを設定します:

    • ターゲットストレージの場所:ログファイルを格納するバケットを選択します。 バケットはベクターバケットと同じリージョンにある必要があります。

    • ログプレフィックス:ログファイルのディレクトリとプレフィックス (例: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.json
  • JSON 構成パラメーターを使用できます。コマンド例:

    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(&region, "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 データのインポートクエリと分析の概要

よくある質問

中断されたリクエストの照会

OSS アクセスログには、中断されたリクエストは記録されません。中断の原因を特定するには、SDK の戻り値を確認してください。