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

Object Storage Service:ログシッピング

最終更新日:Aug 28, 2026

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

注意事項

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

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

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

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

    最終更新日時に基づくライフサイクルルールを使用して、ログファイルを定期的に削除してください。

  • 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 のロギングを有効にし、アクセスログを destBucket にプレフィックス「MyLog-」を付けて保存します。

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="vector put bucket logging sample")
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
    cfg.use_internal_endpoint = True  # パブリックネットワークエンドポイントを使用する場合は False に設定します。
    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", "", "ベクターバケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "ベクターバケットの名前。")
	flag.StringVar(&accountId, "account-id", "", "ベクター アカウントの ID。")
}

func main() {
	flag.Parse()
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーターです。バケット名は必須です。")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーターです。リージョンは必須です。")
	}

	if len(accountId) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメーターです。アカウント ID は必須です。")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region).WithAccountId(accountId).
		// OSS にパブリックインターネット経由でアクセスする場合は、このパラメーターを false に設定するか、この行を削除してください。
		WithUseInternalEndpoint(true)

	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("ベクターバケットのロギング設定に失敗しました: %v", err)
	}

	log.Printf("ベクターバケットのロギング設定結果: %#v\n", result)
}

API

PutBucketLogging API を呼び出して、ベクトルバケットのロギングを有効にします。

ログファイルの命名

ログファイルは、次の命名規則に従います:

<ターゲットプレフィックス><ソースバケット>YYYY-mm-DD-HH-MM-SS-<一意の文字列>

パラメーター

説明

ターゲットプレフィックス

ログファイル名のプレフィックスです。

ソースバケット

アクセスログを生成するソースバケットです。

YYYY-mm-DD-HH-MM-SS

年、月、日、時、分、秒のフォーマットのタイムスタンプです。ログの粒度は 1 時間です。HH = 01 は 01:00:00 から 01:59:59 までを表します。MM と SS は常に 00 です。

一意の文字列

システムによって生成される、ログファイルの一意の識別子です。

ログフォーマットと例

  • ログフォーマット

    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 リクエストの User-Agent ヘッダー。

    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 オリジンリクエスト。

    • lifecycle: ライフサイクルルールによってトリガーされた、データを移行または削除するリクエスト。

    StorageClass

    standard

    宛先オブジェクトのストレージクラス。有効な値は次のとおりです:

    • standard: 標準。

    • ia: 低頻度アクセス。

    • archive: アーカイブ。

    • cold-archive: コールドアーカイブ。

    • deep-cold-archive: ディープコールドアーカイブ。

    • -: オブジェクトのストレージクラスを取得できませんでした。

    TargetStorageClass

    -

    ライフサイクルまたは CopyObject による移行後のストレージクラス。有効な値は次のとおりです:

    • standard: 標準に変更。

    • ia: 低頻度アクセスに変更。

    • archive: アーカイブに変更。

    • cold-archive: コールドアーカイブに変更。

    • deep-cold-archive: ディープコールドアーカイブに変更。

    • -: ストレージクラスの変換は含まれません。

    TransmissionAccelerationAccessPoint

    -

    バケットへのアクセスに使用される転送アクセラレーションエンドポイントのリージョン。例: 中国 (杭州) リージョンの場合は 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***************"

    保存されたログファイルは、SLS にインポートして分析できます (OSS データのインポート、クエリと分析の概要)。

よくある質問

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

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