Object Storage Service (OSS) にアクセスすると、多数のアクセスログが生成されます。ロギング機能を使用すると、1時間ごとのログファイルを生成できます。これらのファイルは、固定の命名規則に従い、指定したバケットに書き込まれます。保存されたログは、Alibaba Cloud Simple Log Service を使用するか、Spark クラスターを構築して分析できます。
注意事項
ログを生成するソースバケットにリージョン属性がある場合、ロギング用のターゲットバケットはソースバケットと同じでも異なっていてもかまいません。ただし、ターゲットバケットは同じリージョンにあり、同じアカウントに属している必要があります。
ソースバケットのロギングを設定すると、ログのプッシュ操作自体が新しいログを生成します。ソースバケットとターゲットバケットが同じ場合、ロギング機能はこれらの新しいログを記録してプッシュします。これにより、ロギングループが発生します。これを防ぐには、ソースバケットとターゲットバケットを別々に設定してください。
ログファイルは 48 時間以内に生成されることが想定されています。特定の期間のログファイルには、その期間のすべてのリクエストが記録されない場合があります。一部のリクエストは、前の期間または次の期間のログファイルに表示されることがあります。したがって、特定の期間のログレコードが完全またはタイムリーであることは保証されません。
OSS は、ロギング機能を無効にするまで、1 時間ごとにログファイルを生成します。ストレージコストを削減するために、不要になったログファイルは速やかにクリアしてください。
ライフサイクルルールを使用して、ログファイルを定期的に削除できます。詳細については、「最終更新時間に基づくライフサイクルルール」をご参照ください。
OSS-HDFS の可用性を維持し、データの汚染を防ぐために、OSS-HDFS が有効になっているバケットのロギングを設定する際は、ログプレフィックスを
.dlsdata/に設定しないでください。OSS は必要に応じてログの末尾にフィールドを追加することがあります。ログ処理ツールを開発する際には、互換性の問題を考慮する必要があります。2025年9月17日より、ログの内容にバケット ARN フィールドが追加されます。
ロギングの設定
バケットのロギング設定
コンソール
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションウィンドウで、 を選択します。
[ロギング] ページで、[ロギングを有効にする] をオンにし、次の表の説明に従ってパラメーターを設定します。
設定
説明
ログストレージの場所
デフォルトでは、ログは現在のバケットに保存されます。ログを別のバケットに保存するには、ドロップダウンリストからロギング用のバケットの名前を選択します。同じリージョンにあり、同じアカウントに属するバケットのみを選択できます。
ログプレフィックス
ログファイルが保存されるディレクトリ。このパラメーターを指定すると、ログファイルはターゲットバケットの指定されたディレクトリに保存されます。このパラメーターを指定しない場合、ログファイルはターゲットバケットのルートディレクトリに保存されます。たとえば、ログプレフィックスを log/ に設定すると、ログファイルは log/ ディレクトリに記録されます。
ロール
デフォルトのロールまたはカスタムロールを引き受けることで、OSS にロギング操作を実行する権限を付与します。
デフォルトのロギング権限付与 (推奨)
このオプションを選択すると、デフォルトのロール
AliyunOSSLoggingDefaultRoleが自動的に作成され、権限が付与されます。このロールは、アカウント配下のすべてのバケットに対するロギング権限付与をサポートします。初めてロギング機能を使用する際に、[ワンクリック権限付与] をクリックすると、デフォルトのロールが自動的に作成され、権限が付与されます。カスタム権限付与
特定のバケットにのみロギングの権限を付与する必要がある場合は、カスタムロールを使用します。カスタムロールを使用する場合は、次の手順を実行します。
サービスロールの作成。ロールの作成中に、[信頼できるエンティティタイプ] を [Alibaba Cloud Service] に、[信頼できるエンティティ] を [Object Storage Service] に設定します。
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 マネージド暗号化を使用している場合の 2 つのケースが含まれます。どちらの場合も、次の例に示すようにカスタムポリシーを設定します。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:PutObject", "oss:AbortMultipartUpload" ], "Resource": "acs:oss:*:*:examplebucket/*" } ] }
[保存] をクリックします。
ossutil
ossutil コマンドラインインターフェイス (CLI) ツールを使用して、ロギングを有効にできます。ossutil のインストール方法の詳細については、「ossutil のインストール」をご参照ください。
次のコマンドは、examplebucket バケットのロギングを有効にします。ログファイルのプレフィックスは MyLog- で、アクセスログを保存するバケットは dest-bucket です。
ossutil vectors-api put-bucket-logging --bucket examplebucket --bucket-logging-status "{\"BucketLoggingStatus\":{\"LoggingEnabled\":{\"TargetBucket\":\"examplebucket\",\"TargetPrefix\":\"MyLog-\",\"LoggingRole\":\"AliyunOSSLoggingDefaultRole\"}}}"このコマンドの詳細については、「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 インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
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 をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) の場合は、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("Enable access logging")
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 操作を呼び出して、バケットのロギングを有効にします。
ベクターバケットのロギング設定
コンソール
[ベクターバケット] ページで、目的のバケットの名前をクリックします。左側のナビゲーションウィンドウで、[ログ管理] > [ロギング] を選択します。
[ロギング] スイッチをオンにし、次のパラメーターを設定します:
宛先ストレージの場所:ログファイルを保存するバケットを選択します。バケットはベクターバケットと同じリージョンにある必要があります。
ログプレフィックス:ログファイルのプレフィックス (例:
MyLog-) を設定します。ロール:ロギングにはデフォルトのサービスロール 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.jsonJSON 設定パラメーターを使用できます。コマンド例:
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(®ion, "region", "", "ベクターバケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "ベクターバケットの名前。")
flag.StringVar(&accountId, "account-id", "", "ベクターアカウントの ID。")
}
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 操作を呼び出して、ベクターバケットのロギングを有効にします。
ログファイルの命名規則
保存されるログファイルの命名規則は次のとおりです:
<TargetPrefix><SourceBucket>YYYY-mm-DD-HH-MM-SS-UniqueStringフィールド | 説明 |
TargetPrefix | ログファイル名のプレフィックス。 |
SourceBucket | アクセスログを生成するソースバケットの名前。 |
YYYY-mm-DD-HH-MM-SS | ログの時間パーティション。左から順に、年、月、日、時、分、秒を表します。保存されたログは時間単位で整理されます。たとえば、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 リクエストの 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:コールドアーカイブ。
DeepCold Archive:ディープコールドアーカイブ。
-:オブジェクトストレージクラスが取得されませんでした。
TargetStorageClass
-
オブジェクトのストレージクラスがライフサイクルルールまたは CopyObject 操作によって変更されたかどうかを示します。有効な値:
Standard:ストレージクラスが標準に変更されます。
IA:ストレージクラスが低頻度アクセスに変更されます。
Archive:ストレージクラスがアーカイブストレージに変更されます。
Cold Archive:ストレージクラスがコールドアーカイブに変更されます。
DeepCold Archive:ストレージクラスがディープコールドアーカイブに変更されます。
-:ストレージクラスの変換操作は含まれていません。
TransmissionAccelerationAccessPoint
-
転送アクセラレーションドメイン名を介して宛先バケットにアクセスする際に使用されるアクセラレーションエンドポイント。たとえば、リクエスタが中国 (杭州) のエンドポイントを介して宛先バケットにアクセスする場合、値は cn-hangzhou です。
値 - は、転送アクセラレーションドメイン名が使用されなかったか、アクセラレーションエンドポイントが宛先バケットと同じリージョンにあることを示します。
AccessKeyID
LTAI****************
リクエスタの AccessKey ID。
リクエストがコンソールから開始された場合、ログフィールドには TMP で始まる一時的な AccessKey ID が表示されます。
リクエストがツールまたは SDK から長期キーを使用して開始された場合、ログフィールドには一般的な AccessKey ID が表示されます。例:
LTAI****************。リクエストがセキュリティトークンサービス (STS) からの一時的なアクセス認証情報を使用して開始された場合、STS で始まる一時的な AccessKey ID が表示されます。
説明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***************"ログファイルが指定された OSS バケットに保存された後、Simple Log Service を使用してそれらを分析できます。ログファイルを分析する前に、それらを Simple Log Service にインポートする必要があります。データのインポート方法の詳細については、「OSS データのインポート」をご参照ください。Simple Log Service の分析機能の詳細については、「クエリと分析の概要」をご参照ください。