全部产品
Search
文档中心

Object Storage Service:Penyimpanan log

更新时间:Dec 03, 2025

Akses ke Object Storage Service (OSS) menghasilkan banyak access log. Anda dapat menggunakan fitur penyimpanan log untuk menghasilkan file log setiap jam. File-file tersebut mengikuti konvensi penamaan tetap dan ditulis ke bucket yang Anda tentukan. Anda dapat menganalisis log yang disimpan menggunakan Alibaba Cloud Simple Log Service atau dengan membangun kluster Spark.

Perhatian

  • Jika bucket sumber yang menghasilkan log memiliki atribut region, bucket tujuan untuk penyimpanan log dapat sama dengan atau berbeda dari bucket sumber. Namun, bucket tujuan harus berada di region yang sama dan dimiliki oleh akun yang sama.

    Saat Anda mengonfigurasi penyimpanan log untuk bucket sumber, operasi push log itu sendiri menghasilkan log baru. Jika bucket sumber dan tujuan sama, fitur penyimpanan log akan mencatat dan mendorong log-log baru ini, sehingga menyebabkan loop logging. Untuk mencegahnya, gunakan bucket sumber dan tujuan yang berbeda.

  • File log diharapkan dihasilkan dalam waktu 48 jam. File log untuk periode waktu tertentu mungkin tidak mencatat semua permintaan dari periode tersebut. Beberapa permintaan mungkin muncul di file log periode sebelumnya atau berikutnya. Oleh karena itu, catatan log untuk periode waktu tertentu tidak dijamin lengkap atau tepat waktu.

  • OSS menghasilkan file log setiap jam hingga Anda menonaktifkan fitur penyimpanan log. Untuk mengurangi biaya penyimpanan, segera hapus file log yang tidak lagi diperlukan.

    Anda dapat menggunakan aturan siklus hidup untuk menghapus file log secara berkala. Untuk informasi selengkapnya, lihat Aturan siklus hidup berdasarkan waktu modifikasi terakhir.

  • Untuk menjaga ketersediaan OSS-HDFS dan mencegah kontaminasi data, jangan mengatur Log Prefix ke .dlsdata/ saat Anda mengonfigurasi logging untuk bucket yang telah diaktifkan OSS-HDFS.

  • OSS dapat menambahkan field ke bagian akhir log sesuai kebutuhan. Anda harus mempertimbangkan masalah kompatibilitas saat mengembangkan tool pemrosesan log. Mulai 17 September 2025, field Bucket ARN akan ditambahkan ke konten log.

Konfigurasi penyimpanan log

Konfigurasi penyimpanan log untuk bucket

Konsol

  1. Masuk ke Konsol OSS.

  2. Di panel navigasi sebelah kiri, klik Buckets. Pada halaman Buckets, temukan dan klik bucket yang diinginkan.

  3. Di panel navigasi sebelah kiri, pilih Log Management > Log Storage.

  4. Pada halaman Log Storage, aktifkan Enable Log Storage dan konfigurasikan parameter seperti dijelaskan dalam tabel berikut.

    Konfigurasi

    Deskripsi

    Log Storage Location

    Secara default, log disimpan di bucket saat ini. Untuk menyimpan log di bucket lain, pilih nama bucket untuk penyimpanan log dari daftar drop-down. Anda hanya dapat memilih bucket yang berada di region yang sama dan dimiliki oleh akun yang sama.

    Log Prefix

    Direktori tempat file log disimpan. Jika Anda menentukan parameter ini, file log disimpan ke direktori yang ditentukan di bucket tujuan. Jika tidak ditentukan, file log disimpan ke direktori root bucket tujuan. Misalnya, jika Anda mengatur log prefix menjadi log/, file log dicatat di direktori log/.

    Role

    Berikan izin OSS untuk melakukan operasi penyimpanan log dengan mengasumsikan role default atau role kustom.

    • Otorisasi Penyimpanan Log Default (Direkomendasikan)

      Jika Anda memilih opsi ini, role default AliyunOSSLoggingDefaultRole akan dibuat secara otomatis dan diberikan izin. Role ini mendukung otorisasi penyimpanan log untuk semua bucket di bawah akun Anda. Saat pertama kali menggunakan fitur penyimpanan log, klik One-click Authorization untuk membuat role default dan memberikan izin secara otomatis.

    • Otorisasi Kustom

      Jika Anda hanya perlu memberikan izin penyimpanan log untuk bucket tertentu, gunakan role kustom. Saat menggunakan role kustom, lakukan langkah-langkah berikut.

      1. Buat service role. Saat pembuatan role, atur Trusted Entity Type ke Alibaba Cloud Service dan Trusted Entity ke Object Storage Service.

      2. Buat kebijakan kustom dalam mode edit skrip.

        Bucket yang menggunakan 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/*"
            }
          ]
        }

        Bucket yang tidak menggunakan enkripsi KMS

        Ini mencakup dua kasus: enkripsi sisi server tidak diaktifkan untuk bucket, atau bucket menggunakan enkripsi yang dikelola OSS. Dalam kedua kasus, konfigurasikan kebijakan kustom seperti pada contoh berikut.

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

  5. Klik Save.

ossutil

Anda dapat menggunakan tool antarmuka baris perintah (CLI) ossutil untuk mengaktifkan penyimpanan log. Untuk informasi lebih lanjut tentang cara menginstal ossutil, lihat Instal ossutil.

Perintah berikut mengaktifkan penyimpanan log untuk bucket examplebucket. Awalan file log adalah MyLog-, dan bucket yang menyimpan access log adalah dest-bucket.

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

Untuk informasi lebih lanjut tentang perintah ini, lihat put-bucket-logging.

SDK

Kode berikut memberikan contoh cara mengonfigurasi penyimpanan log menggunakan kit pengembangan perangkat lunak (SDK) umum. Untuk contoh kode SDK lainnya, lihat 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 {
        // Endpoint China (Hangzhou) digunakan sebagai contoh. Tentukan endpoint aktual untuk region Anda.
        String 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 diatur.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket tempat Anda ingin mengaktifkan penyimpanan log, misalnya examplebucket.
        String bucketName = "examplebucket";
        // Tentukan bucket tujuan untuk menyimpan file log. Bucket tujuan bisa sama atau berbeda dari bucket sumber.
        String targetBucketName = "yourTargetBucketName";
        // Atur folder tempat file log disimpan menjadi log/. Jika Anda menentukan parameter ini, file log disimpan ke folder yang ditentukan di bucket tujuan. Jika tidak ditentukan, file log disimpan ke direktori root bucket tujuan.
        String targetPrefix = "log/";
        // Tentukan region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur parameter ini ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSSClient.
        // Saat instance OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan resource-nya.
        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 ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. 
$provider = new EnvironmentVariableCredentialsProvider();
// Atur yourEndpoint ke Endpoint region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Atur bucket ke nama bucket tempat Anda ingin mengaktifkan penyimpanan log, misalnya examplebucket.
$bucket= "examplebucket";

$option = array();
// Atur bucket tujuan untuk menyimpan file log.
$targetBucket = "destbucket";
// Atur direktori tempat file log disimpan. Jika Anda menentukan parameter ini, file log disimpan ke direktori yang ditentukan di bucket tujuan. Jika tidak ditentukan, file log disimpan ke 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 penyimpanan log.
    $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 region tempat bucket berada. Misalnya, untuk China (Hangzhou), atur region ke oss-cn-hangzhou.
  region: 'yourregion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh kode 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 menjalankan contoh kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan Endpoint untuk region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan informasi region yang sesuai dengan Endpoint, misalnya cn-hangzhou. Catatan: Parameter ini wajib untuk signature V4.
region = "cn-hangzhou"

# Ganti examplebucket dengan nama bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# Simpan file log ke bucket saat ini.
# Atur direktori tempat file log disimpan menjadi log/. Jika Anda menentukan parameter ini, file log disimpan ke direktori yang ditentukan di bucket. Jika tidak ditentukan, file log disimpan ke direktori root bucket.
# Aktifkan fitur penyimpanan 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;

// Atur Endpoint. Contoh ini menggunakan https://oss-cn-hangzhou.aliyuncs.com, Endpoint publik untuk region China (Hangzhou). Untuk region lain, atur Endpoint ke nilai aktualnya.
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh kode 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 Anda ingin mengaktifkan penyimpanan log, 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 region tempat bucket berada. Contoh ini menggunakan cn-hangzhou, yaitu ID region 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 disimpan ke folder yang ditentukan di bucket tujuan. Jika tidak ditentukan, file log disimpan ke 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 Anda ingin mengaktifkan logging akses.
request.setBucketName("yourSourceBucketName");
// Tentukan bucket tujuan untuk menyimpan access log.
// Bucket tujuan dan bucket sumber harus berada di region 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 contoh kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instance OSSClient.
	// Atur yourEndpoint ke Endpoint bucket. Misalnya, untuk region China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk region lain, gunakan Endpoint aktualnya.
	// Atur yourRegion ke region tempat bucket berada. Misalnya, untuk region China (Hangzhou), atur region ke cn-hangzhou. Untuk region lain, gunakan region aktualnya.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Atur versi 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 tempat Anda ingin mengaktifkan penyimpanan log, misalnya examplebucket.
	bucketName := "examplebucket"
	// Tentukan bucket tujuan untuk menyimpan file log. Bucket tujuan dan bucket sumber harus berada di region yang sama. Keduanya bisa sama atau berbeda.
	targetBucketName := "destbucket"
	// Atur folder tempat file log disimpan menjadi log/. Jika Anda menentukan parameter ini, file log disimpan ke folder yang ditentukan di bucket tujuan. Jika tidak ditentukan, file log disimpan ke direktori root bucket tujuan.
	targetPrefix := "log/"

	// Aktifkan fitur penyimpanan 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)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Atur Endpoint ke Endpoint region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Atur Region ke region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur Region ke 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 disimpan ke folder yang ditentukan di bucket tujuan. Jika tidak ditentukan, file log disimpan ke direktori root bucket tujuan. */
    std::string TargetPrefix  ="log/";

    /* Inisialisasi resource jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh kode 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 resource jaringan. */
    ShutdownSdk();
    return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* Atur yourEndpoint ke Endpoint region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur Endpoint ke 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 disimpan ke folder yang ditentukan di bucket tujuan. Jika tidak ditentukan, file log disimpan ke direktori root bucket tujuan. */
const char *target_logging_prefix = "yourTargetPrefix";
/* Atur yourRegion ke region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur region ke 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 contoh kode 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 resource global seperti jaringan dan memori. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Memory pool (pool) untuk manajemen memori setara dengan apr_pool_t. Kode implementasinya ada di library apr. */
    aos_pool_t *pool;
    /* Buat memory pool. Parameter kedua adalah NULL, yang menunjukkan bahwa memory pool tidak mewarisi dari memory pool lain. */
    aos_pool_create(&pool, NULL);
    /* Buat dan inisialisasi options. 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 options di memory pool. */
    oss_client_options = oss_request_options_create(pool);
    /* Inisialisasi client options 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 logging 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 memory pool. Ini melepaskan memori yang dialokasikan untuk resource selama permintaan. */
    aos_pool_destroy(pool);
    /* Lepaskan resource global yang sebelumnya dialokasikan. */
    aos_http_io_deinitialize();
    return 0;
}
require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Region China (Hangzhou) digunakan sebagai contoh untuk endpoint. Tentukan region 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 disimpan di folder yang ditentukan. Jika tidak ditentukan, file log 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 penyimpanan log untuk bucket.

Konfigurasi penyimpanan log untuk vector bucket

Konsol

  1. Pada halaman Vector Buckets, klik nama bucket tujuan. Di panel navigasi sebelah kiri, pilih Log Management > Log Storage.

  2. Aktifkan sakelar Log Storage dan konfigurasikan parameter berikut:

    • Destination Storage Location: Pilih bucket untuk menyimpan file log. Bucket harus berada di region yang sama dengan vector bucket.

    • Log Prefix: Atur awalan untuk file log, seperti MyLog-.

    • Role: Gunakan service role default AliyunOSSLoggingDefaultRole untuk logging atau pilih role kustom.

ossutil

Contoh berikut menunjukkan cara mengaktifkan penyimpanan log untuk bucket bernama examplebucket. Awalan file log adalah MyLog-, dan access log 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 penyimpanan log untuk vector bucket.

Konvensi penamaan file log

Konvensi penamaan untuk file log yang disimpan adalah sebagai berikut:

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

Field

Deskripsi

TargetPrefix

Awalan nama file log.

SourceBucket

Nama bucket sumber yang menghasilkan access log.

YYYY-mm-DD-HH-MM-SS

Partisi waktu log. Dari kiri ke kanan, masing-masing merepresentasikan tahun, bulan, hari, jam, menit, dan detik. Log yang disimpan diorganisir per jam. Misalnya, jika HH adalah 01, file log berisi informasi log dari 01:00:00 hingga 01:59:59. MM dan SS keduanya dipush sebagai 00.

UniqueString

String yang dihasilkan sistem yang secara unik mengidentifikasi file log.

Format log dan contoh

  • Format log

    Access log OSS berisi informasi tentang peminta dan resource yang diakses. Formatnya adalah 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 peminta.

    Reserved

    -

    Field cadangan. Nilainya tetap -.

    Reserved

    -

    Field cadangan. Nilainya tetap -.

    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 parameter tersebut tetap dicatat di access log. Gunakan parameter string kueri yang diawali dengan x- untuk menandai permintaan, lalu gunakan tanda ini untuk menemukan log yang sesuai dengan cepat.

    HTTPStatus

    200

    Kode status HTTP yang dikembalikan oleh OSS.

    SentBytes

    999131

    Trafik downstream yang dihasilkan oleh permintaan, dalam byte.

    RequestTime

    127

    Waktu yang dibutuhkan untuk menyelesaikan permintaan, dalam ms.

    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 yang diakses oleh permintaan.

    RequestID

    5FF16B65F05BC932307A3C3C

    ID permintaan.

    LoggingFlag

    true

    Menunjukkan apakah penyimpanan log diaktifkan. Nilai yang valid:

    • true: Penyimpanan log diaktifkan.

    • false: Penyimpanan log tidak diaktifkan.

    RequesterAliyunID

    16571836914537****

    ID pengguna peminta. Nilai - menunjukkan akses anonim.

    Operation

    GetObject

    Jenis permintaan.

    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. Nilai - menunjukkan bahwa tidak ada kode kesalahan yang dikembalikan.

    RequestLength

    302

    Panjang permintaan, dalam byte.

    UserID

    16571836914537****

    ID pemilik bucket.

    DeltaDataSize

    -

    Perubahan ukuran objek. Nilai - menunjukkan bahwa permintaan tidak melibatkan operasi penulisan objek.

    SyncRequest

    -

    Jenis permintaan. Nilai yang valid:

    • -: Permintaan umum.

    • cdn: Permintaan origin CDN.

    • lifecycle: Permintaan untuk dump atau menghapus data yang dilakukan melalui aturan siklus hidup.

    StorageClass

    Standard

    Kelas penyimpanan objek tujuan. Nilai yang valid:

    • Standard: Standard.

    • IA: Infrequent Access.

    • Archive: Archive Storage.

    • Cold Archive: Cold Archive.

    • DeepCold Archive: Deep Cold Archive.

    • -: Kelas penyimpanan objek tidak diperoleh.

    TargetStorageClass

    -

    Menunjukkan apakah kelas penyimpanan objek diubah oleh aturan siklus hidup atau operasi CopyObject. Nilai yang valid:

    • Standard: Kelas penyimpanan diubah menjadi Standard.

    • IA: Kelas penyimpanan diubah menjadi Infrequent Access.

    • Archive: Kelas penyimpanan diubah menjadi Archive Storage.

    • Cold Archive: Kelas penyimpanan diubah menjadi Cold Archive.

    • DeepCold Archive: Kelas penyimpanan diubah menjadi Deep Cold Archive.

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

    TransmissionAccelerationAccessPoint

    -

    Titik akhir percepatan yang digunakan saat mengakses bucket tujuan melalui nama domain akselerasi transfer. Misalnya, jika peminta mengakses bucket tujuan melalui titik akhir di China (Hangzhou), nilainya adalah cn-hangzhou.

    Nilai - menunjukkan bahwa nama domain akselerasi transfer tidak digunakan atau titik akhir percepatan berada di region yang sama dengan bucket tujuan.

    AccessKeyID

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

    ID AccessKey peminta.

    • Jika permintaan diajukan dari konsol, ID AccessKey sementara yang diawali dengan TMP ditampilkan di field log.

    • Jika permintaan diajukan dari tool atau SDK menggunakan kunci jangka panjang, ID AccessKey umum ditampilkan di field log. Contoh: LTAI****************.

    • Jika permintaan diajukan menggunakan kredensial akses sementara dari Security Token Service (STS), ID AccessKey sementara yang diawali dengan STS ditampilkan.

    Catatan

    Field ID AccessKey menampilkan - untuk permintaan anonim.

    BucketArn

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

    Deskriptor resource unik global dari 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***************"

    Setelah file log disimpan di bucket OSS yang ditentukan, Anda dapat menganalisisnya menggunakan Simple Log Service. Sebelum menganalisis file log, Anda harus mengimpornya ke Simple Log Service. Untuk informasi lebih lanjut tentang cara mengimpor data, lihat Impor data OSS. Untuk informasi lebih lanjut tentang fitur analisis Simple Log Service, lihat Ikhtisar kueri dan analisis.

FAQ

Apakah saya dapat mengkueri permintaan yang terputus di access log OSS?

Access log OSS saat ini tidak mencatat permintaan yang terputus. Jika Anda membuat permintaan menggunakan SDK, Anda dapat memeriksa nilai kembali SDK untuk menentukan alasan pemutusan tersebut.