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(®ion, "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(®ion, "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(®ion, "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(®ion, "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(®ion, "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(®ion, "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)
}