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

Object Storage Service:OSS SDK for Go 2.0 を使用したロギング

最終更新日:Mar 20, 2026

Object Storage Service (OSS) は、事前定義された命名規則に基づいて 1 時間ごとにアクセスログを生成し、指定したターゲットバケットに保存します。このトピックでは、OSS SDK for Go 2.0 を使用して、バケットのロギングを有効化、クエリ、無効化する方法、およびカスタムログフィールドを設定する方法について説明します。

前提条件

開始する前に、以下が準備できていることを確認してください。

  • OSS バケット

  • 環境変数として設定された認証情報。設定手順については、「アクセス認証情報を設定する」をご参照ください。

  • 各操作に必要な Resource Access Management (RAM) 権限。権限の付与手順については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。

    操作必要な権限
    ロギングの有効化oss:PutBucketLogging
    クエリ ログ記録の設定oss:GetBucketLogging
    ロギングの無効化oss:DeleteBucketLogging

注意事項

サンプルコードでは、リージョン ID cn-hangzhou を使用します。デフォルトでは、パブリックエンドポイントが使用されます。他の Alibaba Cloud サービスから同一リージョン内でアクセスする場合は、代わりに内部エンドポイントを使用してください。リージョンとエンドポイントの完全なリストについては、「OSS のリージョンとエンドポイント」をご参照ください。

ロギングの有効化

次のコードは、バケットのロギングを有効化し、オプションのキープレフィックスを付けて、指定されたターゲットバケットにログオブジェクトを保存します。

package main

import (
	"context"
	"flag"
	"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
)

func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケット名。")
}

func main() {
	flag.Parse()

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

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

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.PutBucketLoggingRequest{
		Bucket: oss.Ptr(bucketName),
		BucketLoggingStatus: &oss.BucketLoggingStatus{
			LoggingEnabled: &oss.LoggingEnabled{
				// ログオブジェクトが保存されるターゲットバケット。
				// ソースバケットとターゲットバケットは、同一リージョン内の同じバケットでも異なるバケットでもかまいません。
				TargetBucket: oss.Ptr("TargetBucket"),
				// ログオブジェクトキーのプレフィックス。省略した場合、ログはターゲットバケットのルートディレクトリに保存されます。
				TargetPrefix: oss.Ptr("log"),
			},
		},
	}

	result, err := client.PutBucketLogging(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケットロギングの配置に失敗しました %v", err)
	}

	log.Printf("バケットロギング配置の結果: %#v\n", result)
}

ロギング設定のクエリ

次のコードは、ターゲットバケットやキープレフィックスなど、バケットのロギング設定を取得します。

package main

import (
	"context"
	"flag"
	"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
)

func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}

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")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.DeleteBucketLoggingRequest{
		Bucket: oss.Ptr(bucketName),
	}

	result, err := client.DeleteBucketLogging(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to delete bucket logging %v", err)
	}

	log.Printf("delete bucket logging result: %#v\n", result)
}

ロギングの無効化

次のコードは、バケットのロギングを無効化します。

package main

import (
	"context"
	"flag"
	"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
)

func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケット名。")
}

func main() {
	flag.Parse()

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

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

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.DeleteBucketLoggingRequest{
		Bucket: oss.Ptr(bucketName),
	}

	result, err := client.DeleteBucketLogging(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケットロギングの削除に失敗しました %v", err)
	}

	log.Printf("バケットロギング削除の結果: %#v\n", result)
}

カスタムログフィールドの設定

PutUserDefinedLogFieldsConfig を使用して、アクセスログの user_defined_log_fields フィールドにカスタムフィールドを追加します。カスタムログフィールドは、下流での分析のために、特定のリクエストヘッダーまたはクエリパラメーターをキャプチャします。

package main

import (
	"context"
	"flag"
	"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
)

func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケット名。")
}

func main() {
	flag.Parse()

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

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

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.PutUserDefinedLogFieldsConfigRequest{
		Bucket: oss.Ptr(bucketName),
		UserDefinedLogFieldsConfiguration: &oss.UserDefinedLogFieldsConfiguration{
			HeaderSet: &oss.LoggingHeaderSet{
				Headers: []string{"header1", "header2"}, // ログに記録する HTTP リクエストヘッダー。
			},
			ParamSet: &oss.LoggingParamSet{
				Parameters: []string{"param"}, // ログに記録するクエリパラメーター。
			},
		},
	}

	result, err := client.PutUserDefinedLogFieldsConfig(context.TODO(), request)
	if err != nil {
		log.Fatalf("ユーザー定義ログフィールド設定の配置に失敗しました %v", err)
	}

	log.Printf("ユーザー定義ログフィールド設定配置の結果: %#v\n", result)
}

カスタムログフィールド設定のクエリ

GetUserDefinedLogFieldsConfig を使用して、バケットに設定されているカスタムログフィールドを取得します。

package main

import (
	"context"
	"flag"
	"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
)

func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケット名。")
}

func main() {
	flag.Parse()

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

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

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.GetUserDefinedLogFieldsConfigRequest{
		Bucket: oss.Ptr(bucketName),
	}

	result, err := client.GetUserDefinedLogFieldsConfig(context.TODO(), request)
	if err != nil {
		log.Fatalf("ユーザー定義ログフィールド設定の取得に失敗しました %v", err)
	}

	log.Printf("ユーザー定義ログフィールド設定取得の結果: %#v\n", result)
}

カスタムログフィールド設定の削除

DeleteUserDefinedLogFieldsConfig を使用して、バケットからカスタムの user_defined_log_fields 設定を削除します。

package main

import (
	"context"
	"flag"
	"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
)

func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケット名。")
}

func main() {
	flag.Parse()

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

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

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.DeleteUserDefinedLogFieldsConfigRequest{
		Bucket: oss.Ptr(bucketName),
	}

	result, err := client.DeleteUserDefinedLogFieldsConfig(context.TODO(), request)
	if err != nil {
		log.Fatalf("ユーザー定義ログフィールド設定の削除に失敗しました %v", err)
	}

	log.Printf("ユーザー定義ログフィールド設定削除の結果: %#v\n", result)
}

リファレンス