All Products
Search
Document Center

Object Storage Service:Pengiriman log

Last Updated:May 28, 2026

Aktifkan pencatatan untuk menghasilkan file log akses setiap jam dan menyimpannya di bucket yang ditentukan. Analisis log tersebut menggunakan Log Service atau kluster Spark.

Catatan penggunaan

  • Jika bucket sumber memiliki atribut wilayah, bucket tujuan harus berada dalam akun dan wilayah yang sama. Bucket tujuan dapat sama dengan atau berbeda dari bucket sumber.

    Jika bucket sumber dan tujuan sama, operasi dorong log akan menghasilkan log tambahan, sehingga menciptakan loop. Gunakan bucket sumber dan tujuan yang berbeda untuk menghindari hal ini.

  • File log dapat memerlukan waktu hingga 48 jam untuk dihasilkan. Permintaan mungkin muncul di file periode waktu yang berdekatan, sehingga log untuk periode tertentu tidak dijamin lengkap atau tepat waktu.

  • OSS menghasilkan satu file log setiap jam hingga Anda menonaktifkan pencatatan. Hapus file log yang tidak diperlukan untuk mengurangi biaya penyimpanan.

    Gunakan Aturan siklus hidup berdasarkan waktu modifikasi terakhir untuk menghapus file log secara berkala.

  • Untuk mencegah gangguan layanan atau kontaminasi data saat mengonfigurasi pengiriman log untuk bucket dengan OSS-HDFS diaktifkan, jangan atur Log Prefix ke.dlsdata/.

  • OSS dapat menambahkan field baru ke log. Rancang alat pemrosesan log Anda agar mampu menangani penambahan tersebut. Sebagai contoh, field Bucket ARN akan ditambahkan ke log mulai 17 September 2025.

  • Hindari mengirimkan log ke bucket yang telah mengaktifkan ObjectWorm. ObjectWorm mencegah penghapusan log selama periode retensi, sehingga biaya penyimpanan meningkat terus-menerus.

Konfigurasikan pencatatan

Konfigurasikan pencatatan untuk bucket

Konsol

  1. Masuk ke Konsol OSS.

  2. Di panel navigasi kiri, klik Buckets. Di halaman yang muncul, klik nama bucket tujuan.

  3. Di panel navigasi kiri, pilih Logging > Logging.

  4. Di halaman Logging, aktifkan Logging, lalu konfigurasikan parameter berikut.

    Parameter

    Deskripsi

    Target bucket

    Bucket tempat menyimpan log. Default: bucket saat ini. Pilih bucket berbeda dari daftar drop-down jika diperlukan. Bucket tujuan harus berada dalam akun dan wilayah yang sama.

    Log prefix

    Direktori di bucket tujuan untuk file log. Jika tidak ditentukan, log disimpan di direktori root. Contoh: mengatur awalan menjadi log/ menyimpan log di direktori log/.

    RAM role

    Peran yang diasumsikan oleh OSS untuk menulis log.

    • Peran layanan default (Disarankan)

      Membuat peran AliyunOSSLoggingDefaultRole secara otomatis dengan izin yang diperlukan untuk semua bucket di akun Anda. Pengguna pertama kali: klik Authorize Now untuk membuat dan mengotorisasi peran tersebut.

    • Peran kustom

      Untuk membatasi izin pencatatan hanya pada bucket tertentu, buat peran kustom:

      1. Buat RAM role untuk layanan Alibaba Cloud tepercaya. Saat membuat peran, atur Trusted Service ke Cloud Service dan pilih Trusted Service sebagai OSS.

      2. Buat kebijakan kustom menggunakan editor skrip.

        Enkripsi 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/*"
            }
          ]
        }

        Tanpa enkripsi KMS

        Gunakan kebijakan ini untuk bucket tanpa enkripsi atau dengan enkripsi sisi server yang dikelola OSS.

        {
          "Version": "1",
          "Statement": [  
            {
              "Effect": "Allow",
              "Action": [
                "oss:PutObject",
                "oss:AbortMultipartUpload"
              ],
              "Resource": "acs:oss:*:*:examplebucket/*"
            }
          ]
        }
      3. Berikan izin kepada RAM role.

  5. Klik Save.

Ossutil

Aktifkan pencatatan dengan CLI ossutil. Instal ossutil.

Perintah berikut mengaktifkan pencatatan untuk examplebucket, menyimpan log akses di destBucket dengan awalan MyLog-.

ossutil vectors-api put-bucket-logging --bucket examplebucket --bucket-logging-status "{\"BucketLoggingStatus\":{\"LoggingEnabled\":{\"TargetBucket\":\"examplebucket\",\"TargetPrefix\":\"MyLog-\",\"LoggingRole\":\"AliyunOSSLoggingDefaultRole\"}}}"

put-bucket-logging.

SDK

Konfigurasikan pencatatan dengan contoh SDK berikut. SDK lainnya tercantum di SDKs.

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 {
        // Dalam contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir aktual Anda. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket sumber tempat Anda ingin mengaktifkan pencatatan. Contoh: examplebucket. 
        String bucketName = "examplebucket";
        // Tentukan nama bucket tujuan tempat objek log akan disimpan. Bucket sumber dan tujuan bisa sama atau berbeda. 
        String targetBucketName = "yourTargetBucketName";
        // Atur direktori tempat objek log akan disimpan menjadi log/. Jika Anda menentukan parameter ini, objek log akan disimpan di direktori yang ditentukan di bucket tujuan. Jika tidak, objek log akan disimpan di direktori root bucket tujuan. 
        String targetPrefix = "log/";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan sumber daya ketika OSSClient tidak lagi digunakan. 
        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;

// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.  
$provider = new EnvironmentVariableCredentialsProvider();
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. 
$endpoint = "yourEndpoint";
// Tentukan nama bucket sumber tempat Anda ingin mengaktifkan pencatatan. Contoh: examplebucket. 
$bucket= "examplebucket";

$option = array();
// Tentukan nama bucket tujuan tempat objek log disimpan. 
$targetBucket = "destbucket";
// Tentukan direktori tempat objek log disimpan. Jika Anda menentukan parameter ini, objek log akan disimpan di direktori yang ditentukan di bucket tujuan. Jika tidak, objek log akan disimpan di direktori root bucket tujuan. 
$targetPrefix = "log/";

try {
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

    // Aktifkan pencatatan untuk bucket sumber. 
    $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({
  // Atur region ke wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur region menjadi oss-cn-hangzhou.
  region: 'yourregion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Atur bucket ke nama bucket Anda.
  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

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan ID wilayah yang sesuai dengan titik akhir. Contoh: cn-hangzhou. Parameter ini diperlukan jika Anda menggunakan algoritma tanda tangan V4.
region = "cn-hangzhou"

# Tentukan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# Tentukan bahwa objek log yang dihasilkan disimpan di bucket saat ini. 
# Atur direktori tempat objek log disimpan ke log/. Jika Anda menentukan parameter ini, objek log disimpan di direktori yang ditentukan pada bucket. Jika Anda tidak menentukan parameter ini, objek log disimpan di direktori root bucket. 
# Aktifkan pencatatan log untuk bucket. 
logging = bucket.put_bucket_logging(BucketLogging(bucket.bucket_name, 'log/'))
if logging.status == 200:
    print("Aktifkan pencatatan log akses")
else:
    print("request_id:", logging.request_id)
    print("resp : ", logging.resp.response)            
using Aliyun.OSS;
using Aliyun.OSS.Common;

// Atur Endpoint. Contoh ini menggunakan https://oss-cn-hangzhou.aliyuncs.com, yaitu Endpoint publik untuk wilayah China (Hangzhou). Untuk wilayah lain, atur Endpoint ke nilai aktualnya.
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Atur nama bucket tempat fitur penyimpanan log akan diaktifkan, misalnya examplebucket.
var bucketName = "examplebucket";
// Atur bucket tujuan untuk menyimpan file log. Bucket tujuan bisa sama atau berbeda dari bucket sumber.
var targetBucketName = "destbucket";
// Atur wilayah tempat bucket berada. Contoh ini menggunakan cn-hangzhou, yaitu ID wilayah China (Hangzhou).
const string region = "cn-hangzhou";

// Buat instance ClientConfiguration dan ubah parameter default sesuai kebutuhan.
var conf = new ClientConfiguration();

// Gunakan Signature Version 4.
conf.SignatureVersion = SignatureVersion.V4;

// Buat instance OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    // Atur folder tempat file log disimpan menjadi log/. Jika Anda menentukan folder ini, file log akan disimpan di folder yang ditentukan di bucket tujuan. Jika tidak, file log akan disimpan di direktori root bucket tujuan.
    var request = new SetBucketLoggingRequest(bucketName, targetBucketName, "log/");
    // Aktifkan fitur penyimpanan 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();
// Tentukan bucket sumber tempat pencatatan akses akan diaktifkan.
request.setBucketName("yourSourceBucketName");
// Tentukan bucket tujuan untuk menyimpan log akses.
// Bucket tujuan dan sumber harus berada di wilayah yang sama. Bucket sumber dan tujuan bisa sama atau berbeda.
request.setTargetBucketName("yourTargetBucketName");
// Atur folder tempat file log disimpan.
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() {
	// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instance OSSClient. 
        // Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. Tentukan titik akhir aktual Anda. 
	// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. Tentukan wilayah aktual.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Tentukan versi algoritma signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Tentukan nama bucket sumber tempat Anda ingin mengaktifkan pencatatan. Contoh: examplebucket. 
	bucketName := "examplebucket"
	// Tentukan nama bucket tujuan tempat objek log akan disimpan. Bucket sumber dan tujuan bisa sama atau berbeda, tetapi harus berada di wilayah yang sama. 
	targetBucketName := "destbucket"
	// Atur direktori tempat objek log akan disimpan menjadi log/. Jika Anda menentukan parameter ini, objek log akan disimpan di direktori yang ditentukan di bucket tujuan. Jika tidak, objek log akan disimpan di direktori root bucket tujuan. 
	targetPrefix := "log/"

	// Aktifkan pencatatan untuk bucket. 
	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)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Atur Endpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Atur Region ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Region menjadi cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Masukkan nama bucket tempat Anda ingin mengaktifkan penyimpanan log, misalnya examplebucket. */
    std::string BucketName = "examplebucket";
    /* Masukkan bucket tujuan untuk menyimpan file log. TargetBucketName dan bucketName bisa sama atau berbeda. */
    std::string TargetBucketName = "destbucket";
    /* Atur folder tempat file log disimpan menjadi log/. Jika Anda menentukan parameter ini, file log akan disimpan di folder yang ditentukan di bucket tujuan. Jika tidak, file log akan disimpan di direktori root bucket tujuan. */
    std::string TargetPrefix  ="log/";

    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region); 

    /* Aktifkan fitur penyimpanan log. */
    SetBucketLoggingRequest request(BucketName, TargetBucketName, TargetPrefix);
    auto outcome = client.SetBucketLogging(request);

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "SetBucketLogging fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* Atur yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Misalnya, examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan bucket tujuan untuk menyimpan file log. TargetBucketName dan bucketName bisa sama atau berbeda. */
const char *target_bucket_name = "yourTargetBucketName";
/* Atur folder tempat file log disimpan. Jika Anda menentukan parameter ini, file log akan disimpan di folder yang ditentukan di bucket tujuan. Jika tidak, file log akan disimpan di direktori root bucket tujuan. */
const char *target_logging_prefix = "yourTargetPrefix";
/* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Inisialisasi tipe aos_string_t dengan string char*. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    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"));
    // Anda juga harus mengonfigurasi dua parameter berikut.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Tentukan apakah CNAME digunakan. Nilai 0 menunjukkan bahwa CNAME tidak digunakan. */
    options->config->is_cname = 0;
    /* Atur parameter jaringan, seperti periode timeout. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* Panggil metode aos_http_io_initialize di awal program untuk menginisialisasi sumber daya global seperti jaringan dan memori. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Pool memori (pool) untuk manajemen memori setara dengan apr_pool_t. Kode implementasinya ada di library apr. */
    aos_pool_t *pool;
    /* Buat pool memori. Parameter kedua adalah NULL, yang menunjukkan bahwa pool memori tidak mewarisi dari pool memori lain. */
    aos_pool_create(&pool, NULL);
    /* Buat dan inisialisasi opsi. Parameter ini mencakup informasi konfigurasi global seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
    oss_request_options_t *oss_client_options;
    /* Alokasikan memori untuk opsi di pool memori. */
    oss_client_options = oss_request_options_create(pool);
    /* Inisialisasi opsi klien oss_client_options. */
    init_options(oss_client_options);
    /* Inisialisasi parameter. */
    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);
    /* Aktifkan pencatatan akses untuk bucket. */
    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); 
    }
    /* Lepaskan pool memori. Ini melepaskan memori yang dialokasikan untuk sumber daya selama permintaan. */
    aos_pool_destroy(pool);
    /* Lepaskan sumber daya global yang sebelumnya dialokasikan. */
    aos_http_io_deinitialize();
    return 0;
}
require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Wilayah China (Hangzhou) digunakan sebagai contoh untuk endpoint. Tentukan wilayah sesuai kebutuhan.
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, atur variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)

# Tentukan nama bucket, misalnya examplebucket.
bucket = client.get_bucket('examplebucket')
# Atur logging_bucket ke bucket tujuan untuk file log.
# Atur my-log ke folder tempat file log disimpan. Jika Anda menentukan parameter ini, file log akan disimpan di folder yang ditentukan. Jika tidak, file log akan disimpan di direktori root bucket tujuan.
bucket.logging = Aliyun::OSS::BucketLogging.new(
  enable: true, target_bucket: 'logging_bucket', target_prefix: 'my-log')

API

Panggil operasi PutBucketLogging untuk mengaktifkan pencatatan untuk bucket.

Konfigurasikan pencatatan untuk bucket vektor

Konsol

  1. Di halaman Vector Buckets, klik bucket tujuan. Di panel navigasi kiri, pilih Log Management > Logging.

  2. Aktifkan sakelar Logging dan konfigurasikan parameter berikut:

    • Target storage location: Pilih bucket untuk menyimpan file log. Bucket harus berada di wilayah yang sama dengan bucket vektor.

    • Log prefix: Atur direktori dan awalan untuk file log, seperti MyLog-.

    • RAM role: Gunakan peran layanan default AliyunOSSLoggingDefaultRole untuk pencatatan atau pilih peran kustom.

Ossutil

Contoh berikut menunjukkan cara mengaktifkan penyimpanan log untuk bucket bernama examplebucket. Awalan file log adalah MyLog-, dan log akses disimpan di bucket examplebucket.

  • Anda dapat menggunakan file konfigurasi JSON. File bucket-logging-status.json berisi konten berikut:

    {
      "BucketLoggingStatus": {
        "LoggingEnabled": {
          "TargetBucket": "examplebucket",
          "TargetPrefix": "MyLog-",
          "LoggingRole": "AliyunOSSLoggingDefaultRole"
        }
      }
    }

    Contoh perintah:

    ossutil vectors-api put-bucket-logging --bucket examplebucket --bucket-logging-status file://bucket-logging-status.json
  • Anda dapat menggunakan parameter konfigurasi JSON. Contoh perintah:

    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="Sample for enabling log storage for a vector bucket")
parser.add_argument('--region', help='The region where the bucket is located.', required=True)
parser.add_argument('--bucket', help='The bucket name.', required=True)
parser.add_argument('--endpoint', help='The endpoint to access OSS.')
parser.add_argument('--account_id', help='The account ID.', required=True)
parser.add_argument('--target_bucket', help='The destination bucket for storing logs.', required=True)

def main():
    args = parser.parse_args()

    # Loading credentials values from the environment variables
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Using the SDK's default configuration
    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(&region, "region", "", "The region in which the vector bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the vector bucket.")
	flag.StringVar(&accountId, "account-id", "", "The ID of the vector account.")
}

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

Panggil operasi PutBucketLogging untuk mengaktifkan pencatatan untuk bucket vektor.

Pemberian nama file log

File log menggunakan konvensi penamaan berikut:

<TargetPrefix><SourceBucket>YYYY-mm-DD-HH-MM-SS-UniqueString

Parameter

Deskripsi

TargetPrefix

Awalan untuk nama file log.

SourceBucket

Bucket sumber yang menghasilkan log akses.

YYYY-mm-DD-HH-MM-SS

Timestamp dalam format tahun, bulan, hari, jam, menit, dan detik. Log menggunakan granularitas per jam: HH=01 mencakup 01:00:00 hingga 01:59:59. MM dan SS selalu 00.

UniqueString

Identifikasi unik yang dihasilkan sistem untuk file log.

Format dan contoh log

  • Format log

    Log akses OSS berisi informasi tentang pihak yang meminta dan resource yang diakses. Formatnya sebagai berikut:

    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"

    Field

    Contoh

    Deskripsi

    RemoteIP

    192.168.0.1

    Alamat IP pihak yang meminta.

    Reserved

    -

    Field cadangan. Nilainya selalu tanda hubung (-).

    Reserved

    -

    Field cadangan. Nilainya selalu tanda hubung (-).

    Time

    03/Jan/2021:14:59:49 +0800

    Waktu saat OSS menerima permintaan.

    RequestURL

    GET /example.jpg HTTP/1.0

    URL permintaan yang berisi string kueri.

    OSS mengabaikan parameter string kueri yang diawali dengan x- tetapi mencatatnya di log akses. Gunakan parameter berawalan x- untuk memberi tag dan melacak permintaan tertentu.

    HTTPStatus

    200

    Kode status HTTP yang dikembalikan oleh OSS.

    SentBytes

    999131

    Trafik downstream yang dihasilkan oleh permintaan, dalam byte.

    RequestTime

    127

    Waktu penyelesaian permintaan, dalam milidetik.

    Referer

    http://www.aliyun.com/product/oss

    Referer HTTP dari permintaan.

    UserAgent

    curl/7.15.5

    Header User-Agent dari permintaan HTTP.

    HostName

    examplebucket.oss-cn-hangzhou.aliyuncs.com

    Nama domain tujuan.

    RequestID

    5FF16B65F05BC932307A3C3C

    ID permintaan.

    LoggingFlag

    true

    Menunjukkan apakah pencatatan diaktifkan. Nilai yang valid:

    • true: Pencatatan diaktifkan.

    • false: Pencatatan tidak diaktifkan.

    RequesterAliyunID

    16571836914537****

    ID pengguna pihak yang meminta. Tanda hubung (-) menunjukkan permintaan anonim.

    Operation

    GetObject

    Operasi yang dilakukan.

    BucketName

    examplebucket

    Nama bucket tujuan.

    ObjectName

    example.jpg

    Nama objek tujuan.

    ObjectSize

    999131

    Ukuran objek tujuan, dalam byte.

    ServerCostTime

    88

    Waktu yang dibutuhkan OSS untuk memproses permintaan, dalam milidetik.

    ErrorCode

    -

    Kode kesalahan yang dikembalikan oleh OSS. Tanda hubung (-) menunjukkan tidak ada kesalahan yang dikembalikan.

    RequestLength

    302

    Panjang permintaan, dalam byte.

    UserID

    16571836914537****

    ID pemilik bucket.

    DeltaDataSize

    -

    Perubahan ukuran objek. Tanda hubung (-) menunjukkan permintaan tidak melibatkan operasi tulis.

    SyncRequest

    -

    Jenis permintaan. Nilai yang valid:

    • -: Permintaan umum.

    • cdn: Permintaan origin CDN.

    • lifecycle: Permintaan untuk transisi atau penghapusan data, yang dipicu oleh aturan siklus hidup.

    StorageClass

    Standard

    Kelas penyimpanan objek tujuan. Nilai yang valid:

    • Standard: Standard.

    • IA: Infrequent Access.

    • Archive: Archive.

    • Cold Archive: Cold Archive.

    • Deep Cold Archive: Deep Cold Archive.

    • -: Kelas penyimpanan objek tidak dapat diperoleh.

    TargetStorageClass

    -

    Kelas penyimpanan setelah transisi oleh aturan siklus hidup atau CopyObject. Nilai yang valid:

    • Standard: Berubah menjadi Standard.

    • IA: Berubah menjadi Infrequent Access.

    • Archive: Berubah menjadi Archive.

    • Cold Archive: Berubah menjadi Cold Archive.

    • Deep Cold Archive: Berubah menjadi Deep Cold Archive.

    • -: Tidak ada operasi konversi kelas penyimpanan objek yang terlibat.

    TransmissionAccelerationAccessPoint

    -

    Wilayah titik akses akselerasi transfer yang digunakan untuk mengakses bucket. Contoh: cn-hangzhou untuk wilayah China (Hangzhou).

    Tanda hubung (-) menunjukkan domain akselerasi transfer tidak digunakan, atau titik akhir berada di wilayah yang sama dengan bucket.

    AccessKeyID

    LTAI****************

    ID AccessKey pihak yang meminta.

    • Untuk permintaan dari konsol, field log menampilkan ID AccessKey sementara yang diawali dengan TMP.

    • Untuk permintaan dari tool atau SDK yang menggunakan kunci jangka panjang, field log menampilkan ID AccessKey umum. Contoh: LTAI****************.

    • Untuk permintaan yang menggunakan kredensial akses sementara dari Security Token Service (STS), log menampilkan ID AccessKey sementara yang diawali dengan STS.

    Catatan

    Tanda hubung (-) pada field ini menunjukkan permintaan anonim.

    BucketARN

    acs:oss***************

    Deskriptor sumber daya unik global untuk bucket.

  • Contoh log

    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***************"

    Impor file log yang tersimpan ke Log Service untuk analisis. Impor data OSS. Ikhtisar kueri dan analisis.

FAQ

Permintaan yang terputus

Log akses OSS tidak mencatat permintaan yang terputus. Periksa nilai kembali SDK untuk menentukan penyebab gangguan.