Object Storage Service (OSS) は、バケットへのすべてのリクエストに対してアクセスログを生成します。ロギング機能は、これらのログを 1 時間ごとのファイルとして、固定の命名規則を使用してターゲットバケットに書き込みます。
すべての例では、パブリックエンドポイントを持つ中国 (杭州) リージョン (cn-hangzhou) を使用します。同じリージョン内の別の Alibaba Cloud サービスから OSS にアクセスするには、代わりに内部エンドポイントを使用します。リージョンとエンドポイントの完全なリストについては、「OSS のリージョンとエンドポイント」をご参照ください。
前提条件
開始する前に、以下を確認してください:
各操作に必要な権限:RAM ユーザーにこれらの権限を付与するには、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。
操作 必要な権限 ロギングの有効化 oss:PutBucketLoggingログストレージ設定の表示 oss:GetBucketLoggingロギングの無効化 oss:DeleteBucketLoggingユーザー定義ログフィールドのクエリ oss:GetUserDefinedLogFieldsConfigAccessKey ペアで
OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていること。
対象となる操作
| 操作 | API メソッド | 説明 |
|---|---|---|
| ロギングの有効化 | putBucketLogging | バケットのロギングを設定し、ログファイルのターゲットバケットとプレフィックスを設定します |
| ログストレージ設定の表示 | getBucketLogging | バケットの現在のログストレージ設定を返します |
| ロギングの無効化 | deleteBucketLogging | バケットからログストレージ設定を削除します |
| ユーザー定義ログフィールドの設定 | putUserDefinedLogFieldsConfig | リアルタイムログでキャプチャするカスタムリクエストヘッダーまたはクエリパラメーターを設定します |
| ユーザー定義ログフィールドのクエリ | getUserDefinedLogFieldsConfig | バケットの現在のユーザー定義ログフィールド設定を返します |
| ユーザー定義ログフィールドの削除 | deleteUserDefinedLogFieldsConfig | バケットからユーザー定義ログフィールド設定を削除します |
ロギングの有効化
PutBucketLogging を呼び出してロギングを有効にし、OSS がログファイルを書き込む場所を指定します。
<?php
// Composer のオートロードを介して SDK の依存関係をロードします。
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドライン引数を定義します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True],
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False],
"bucket" => ['help' => 'バケットの名前。', 'required' => True],
];
$longopts = \array_map(function ($key) { return "$key:"; }, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$bucket = $options["bucket"];
// 環境変数 (OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET) から認証情報をロードします。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
$client = new Oss\Client($cfg);
// ロギングの設定:ログを "log/" プレフィックスで同じバケットに書き込みます。
$request = new Oss\Models\PutBucketLoggingRequest(
bucket: $bucket,
bucketLoggingStatus: new Oss\Models\BucketLoggingStatus(
loggingEnabled: new Oss\Models\LoggingEnabled(
targetBucket: $bucket, // ログファイルのターゲットバケット。
targetPrefix: 'log/' // すべてのログファイル名に適用されるプレフィックス。
)
)
);
$result = $client->putBucketLogging($request);
printf(
'status code: ' . $result->statusCode . PHP_EOL .
'request id: ' . $result->requestId
);主要なパラメーター
| パラメーター | 説明 | 例 |
|---|---|---|
targetBucket | OSS がログファイルを書き込むバケット。 | my-log-bucket |
targetPrefix | すべてのログファイル名に追加されるプレフィックス。これを使用して、ターゲットバケット内のログを整理します。 | log/ |
ログストレージ設定の表示
GetBucketLogging を呼び出して、バケットのログストレージ設定を取得します。
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True],
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False],
"bucket" => ['help' => 'バケットの名前。', 'required' => True],
];
$longopts = \array_map(function ($key) { return "$key:"; }, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$bucket = $options["bucket"];
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
$client = new Oss\Client($cfg);
$request = new Oss\Models\GetBucketLoggingRequest(
bucket: $bucket
);
$result = $client->getBucketLogging($request);
printf(
'status code: ' . $result->statusCode . PHP_EOL .
'request id: ' . $result->requestId . PHP_EOL .
'logging status: ' . var_export($result->bucketLoggingStatus, true) . PHP_EOL
);返されるフィールド
| フィールド | 説明 |
|---|---|
statusCode | HTTP 応答のステータスコード |
requestId | トラブルシューティングに使用されるリクエストの一意の ID |
bucketLoggingStatus | 現在のロギングの構成を含むオブジェクトで、targetBucket および targetPrefix |
ロギングの無効化
DeleteBucketLogging を呼び出して、バケットからログストレージ設定を削除します。設定が削除されると、OSS はログファイルの書き込みを停止します。
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True],
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False],
"bucket" => ['help' => 'バケットの名前。', 'required' => True],
];
$longopts = \array_map(function ($key) { return "$key:"; }, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$bucket = $options["bucket"];
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
$client = new Oss\Client($cfg);
$request = new Oss\Models\DeleteBucketLoggingRequest(
bucket: $bucket
);
$result = $client->deleteBucketLogging($request);
printf(
'status code: ' . $result->statusCode . PHP_EOL .
'request id: ' . $result->requestId
);ユーザー定義ログフィールドの設定
PutUserDefinedLogFieldsConfig を呼び出して、リアルタイムログに追加のコンテキストをキャプチャします。これにより、OSS リクエストから特定のリクエストヘッダーまたはクエリパラメーターを user_defined_log_fields フィールドに記録し、後で分析することができます。
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True],
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False],
"bucket" => ['help' => 'バケットの名前。', 'required' => True],
];
$longopts = \array_map(function ($key) { return "$key:"; }, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$bucket = $options["bucket"];
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
$client = new Oss\Client($cfg);
// リアルタイムログでキャプチャするクエリパラメーターとリクエストヘッダーを指定します。
$request = new Oss\Models\PutUserDefinedLogFieldsConfigRequest(
bucket: $bucket,
userDefinedLogFieldsConfiguration: new Oss\Models\UserDefinedLogFieldsConfiguration(
new Oss\Models\LoggingParamSet(parameters: ['param1', 'params2']), // キャプチャするクエリパラメーター。
new Oss\Models\LoggingHeaderSet(headers: ['header1', 'header2']) // キャプチャするリクエストヘッダー。
)
);
$result = $client->putUserDefinedLogFieldsConfig($request);
printf(
'status code: ' . $result->statusCode . PHP_EOL .
'request id: ' . $result->requestId
);主要なパラメーター
| パラメーター | クラス | 説明 | 例 |
|---|---|---|---|
parameters | LoggingParamSet | OSS リクエストからキャプチャするクエリパラメーター名 | ['param1', 'params2'] |
headers | LoggingHeaderSet | OSS リクエストからキャプチャするリクエストヘッダー名 | ['header1', 'header2'] |
ユーザー定義ログフィールドのクエリ
GetUserDefinedLogFieldsConfig を呼び出して、バケットの現在のユーザー定義ログフィールド設定を取得します。
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True],
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False],
"bucket" => ['help' => 'バケットの名前。', 'required' => True],
];
$longopts = \array_map(function ($key) { return "$key:"; }, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$bucket = $options["bucket"];
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
$client = new Oss\Client($cfg);
$request = new Oss\Models\GetUserDefinedLogFieldsConfigRequest(bucket: $bucket);
$result = $client->getUserDefinedLogFieldsConfig($request);
printf(
'status code: ' . $result->statusCode . PHP_EOL .
'request id: ' . $result->requestId . PHP_EOL .
'user defined log fields config: ' . var_export($result->userDefinedLogFieldsConfiguration, true)
);返されるフィールド
| フィールド | 説明 |
|---|---|
statusCode | HTTP 応答のステータスコード |
requestId | リクエストの一意の ID |
userDefinedLogFieldsConfiguration | 設定された LoggingParamSet (クエリパラメーター) と LoggingHeaderSet (リクエストヘッダー) を含むオブジェクト |
ユーザー定義ログフィールドの削除
DeleteUserDefinedLogFieldsConfig を呼び出して、バケットからユーザー定義ログフィールド設定を削除します。
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True],
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False],
"bucket" => ['help' => 'バケットの名前。', 'required' => True],
];
$longopts = \array_map(function ($key) { return "$key:"; }, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$bucket = $options["bucket"];
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
$client = new Oss\Client($cfg);
$request = new Oss\Models\DeleteUserDefinedLogFieldsConfigRequest(bucket: $bucket);
$result = $client->deleteUserDefinedLogFieldsConfig($request);
printf(
'status code: ' . $result->statusCode . PHP_EOL .
'request id: ' . $result->requestId
);次のステップ
PutBucketLogging — ロギングを有効化するためのAPI リファレンス
GetBucketLogging — ログストレージ設定を表示するための API リファレンス
DeleteBucketLogging — ロギングを無効化するための API リファレンス
PutUserDefinedLogFieldsConfig ― ユーザー定義ログフィールドを設定するための API リファレンス
GetUserDefinedLogFieldsConfig — ユーザー定義ログフィールドのクエリ用 API リファレンス
DeleteUserDefinedLogFieldsConfig — API リファレンス(ユーザー定義ログフィールドの削除)