OSS にアクセスすると、多くのアクセスログが生成されます。ロギング機能を使用すると、これらのログに対して固定の命名規則に基づいて時間単位のログファイルを生成し、指定したバケットに書き込むことができます。
注意事項
このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID
cn-hangzhouを使用します。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。同じリージョン内の他の Alibaba Cloud サービスからバケット内のリソースにアクセスする場合は、内部エンドポイントを使用することをお勧めします。OSS のリージョンとエンドポイントのリストについては、「リージョンとエンドポイント」をご参照ください。このトピックでは、アクセス資格情報は環境変数から読み取られます。アクセス資格情報の設定の詳細については、「アクセス資格情報の設定」をご参照ください。
ロギングを有効にするには、
oss:PutBucketLogging権限が必要です。ロギング設定を表示するには、oss:GetBucketLogging権限が必要です。ロギングを無効にするには、oss:DeleteBucketLogging権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。
サンプルコード
ロギングの有効化
次のコードは、ロギング機能を有効にする方法を示しています。
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 // バケット名。
)
// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
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)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットのロギング機能を有効にするリクエストを作成します。
putRequest := &oss.PutBucketLoggingRequest{
Bucket: oss.Ptr(bucketName), // ロギング機能を有効にするバケットの名前を指定します。
BucketLoggingStatus: &oss.BucketLoggingStatus{
LoggingEnabled: &oss.LoggingEnabled{
TargetBucket: oss.Ptr("TargetBucket"), // ログファイルを保存する宛先バケットを指定します。宛先バケットとソースバケットは同じリージョンにある必要があります。同じバケットでも異なるバケットでもかまいません。
TargetPrefix: oss.Ptr("log"), // ログファイルが保存されるディレクトリを指定します。このパラメーターを指定すると、ログファイルは宛先バケットの指定されたディレクトリに保存されます。このパラメーターを指定しない場合、ログファイルは宛先バケットのルートディレクトリに保存されます。
},
},
}
// バケットのロギング機能を有効にするリクエストを実行します。
putResult, err := client.PutBucketLogging(context.TODO(), putRequest)
if err != nil {
log.Fatalf("failed to put bucket logging %v", err)
}
// バケットのロギング機能を有効にした結果を出力します。
log.Printf("put bucket logging result:%#v\n", putResult)
}
ロギング設定の表示
次のコードは、ロギング設定を表示する方法を示しています。
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 // バケット名。
)
// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
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)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットのロギング設定を取得するリクエストを作成します。
getRequest := &oss.GetBucketLoggingRequest{
Bucket: oss.Ptr(bucketName), // バケット名。
}
// バケットのロギング設定を取得する操作を実行し、結果を処理します。
getResult, err := client.GetBucketLogging(context.TODO(), getRequest)
if err != nil {
log.Fatalf("failed to get bucket logging %v", err)
}
// バケットのロギング設定を取得した結果を出力します。
log.Printf("get bucket logging result target bucket:%#v\n", getResult.BucketLoggingStatus.LoggingEnabled.TargetBucket)
}
ロギングの無効化
次のコードは、ロギング機能を無効にする方法を示しています。
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 // バケット名。
)
// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
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)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットのロギング機能を無効にするリクエストを作成します。
delRequest := &oss.DeleteBucketLoggingRequest{
Bucket: oss.Ptr(bucketName), // バケット名。
}
// バケットのロギğング機能を無効にする操作を実行し、結果を処理します。
delResult, err := client.DeleteBucketLogging(context.TODO(), delRequest)
if err != nil {
log.Fatalf("failed to delete bucket logging %v", err)
}
// バケットのロギング機能を無効にした結果を出力します。
log.Printf("delete bucket logging result:%#v\n", delResult)
}
カスタムログフィールドを構成する
PutUserDefinedLogFieldsConfig 操作を呼び出して、バケットのリアルタイムログの user_defined_log_fields フィールドを設定できます。このフィールドを使用して、後続の分析のために 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 // OSS バケットが配置されているリージョン。
bucketName string // 操作するバケットの名前。
)
// init 関数は、コマンドラインパラメーターの解析を初期化するために使用されます。
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")
}
// region パラメーターが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントインスタンスを作成します。
client := oss.NewClient(cfg)
// PutUserDefinedLogFieldsConfig リクエストを構築します。
request := &oss.PutUserDefinedLogFieldsConfigRequest{
Bucket: oss.Ptr(bucketName), // 宛先バケット名を設定します。
UserDefinedLogFieldsConfiguration: &oss.UserDefinedLogFieldsConfiguration{
HeaderSet: &oss.LoggingHeaderSet{
Headers: []string{"header1", "header2"}, // カスタムログに記録される HTTP ヘッダーフィールド。
},
ParamSet: &oss.LoggingParamSet{
Parameters: []string{"param"}, // カスタムログに記録される URL パラメーターフィールド。
},
},
}
// リクエストを開始し、結果を取得します。
result, err := client.PutUserDefinedLogFieldsConfig(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put user defined log fields config %v", err)
}
// 成功した応答のコンテンツを出力します。
log.Printf("put user defined log fields config result:%#v\n", result)
}
カスタムログフィールドのクエリ
GetUserDefinedLogFieldsConfig 操作を呼び出して、バケットのリアルタイムログの 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 // OSS バケットが配置されているリージョン。
bucketName string // 操作するバケットの名前。
)
// init 関数は、コマンドラインパラメーターの解析を初期化するために使用されます。
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")
}
// region パラメーターが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントインスタンスを作成します。
client := oss.NewClient(cfg)
// GetUserDefinedLogFieldsConfig リクエストを構築します。
getRequest := &oss.GetUserDefinedLogFieldsConfigRequest{
Bucket: oss.Ptr(bucketName), // 宛先バケット名を設定します。
}
// リクエストを開始し、結果を取得します。
getResult, err := client.GetUserDefinedLogFieldsConfig(context.TODO(), getRequest)
if err != nil {
// エラーが発生した場合は、エラーメッセージを出力して終了します。
log.Fatalf("failed to get user defined log fields config %v", err)
}
// 成功した応答のコンテンツを出力します。
log.Printf("get user defined log fields config result:%#v\n", getResult)
}
カスタムログフィールドの削除
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 // OSS バケットが配置されているリージョン。
bucketName string // 操作するバケットの名前。
)
// init 関数は、コマンドラインパラメーターの解析を初期化するために使用されます。
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")
}
// region パラメーターが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントインスタンスを作成します。
client := oss.NewClient(cfg)
// DeleteUserDefinedLogFieldsConfig リクエストを構築します。
request := &oss.DeleteUserDefinedLogFieldsConfigRequest{
Bucket: oss.Ptr(bucketName), // 宛先バケット名を設定します。
}
// リクエストを開始し、結果を取得します。
result, err := client.DeleteUserDefinedLogFieldsConfig(context.TODO(), request)
if err != nil {
log.Fatalf("failed to delete user defined log fields config %v", err)
}
// 成功した応答のコンテンツを出力します。
log.Printf("delete user defined log fields config result:%#v\n", result)
}
関連情報
ロギング機能を有効にする API 操作の詳細については、「PutBucketLogging」をご参照ください。
ロギング設定を表示する API 操作の詳細については、「GetBucketLogging」をご参照ください。
ロギング機能を無効にする API 操作の詳細については、「DeleteBucketLogging」をご参照ください。
カスタムログフィールドを設定する API 操作の詳細については、「PutUserDefinedLogFieldsConfig」をご参照ください。
カスタムログフィールドをクエリする API 操作の詳細については、「GetUserDefinedLogFieldsConfig」をご参照ください。
カスタムログフィールドを削除する API 操作の詳細については、「DeleteUserDefinedLogFieldsConfig」をご参照ください。