全部产品
Search
文档中心

Object Storage Service:Analisis perantara berdasarkan field log kustom

更新时间:Jun 26, 2025

Object Storage Service (OSS) mendukung pencatatan kustom dengan menambahkan field user_defined_log_fields ke log aksesnya. Anda dapat mengonfigurasi field log kustom untuk memantau informasi permintaan tertentu. Topik ini menjelaskan cara mencatat header permintaan x-forwarded-for dan menggunakan informasi yang direkam untuk analisis perantara.

Prasyarat

  • Fitur kueri log real-time diaktifkan untuk bucket. Untuk informasi lebih lanjut, lihat Kueri Log Real-time.

  • Permintaan yang dikirim ke bucket berisi header permintaan terkait atau parameter kueri. Untuk informasi lebih lanjut, lihat Mengajukan Permintaan.

Langkah 1: Tentukan header permintaan

  1. Masuk ke konsol OSS.

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

  3. Di pohon navigasi sebelah kiri, pilih Logging > Real-time Log Query.

  4. Di tab Real-time Log Query, klik Add di samping Request Headers or Query Parameters in Logs.

  5. Di kotak dialog Configure Request Header or Query Parameter in Logs, klik Tambah di samping Specify Log Field.

  6. Pilih Request Header, masukkan x-forwarded-for, dan klik OK.

    image

Langkah 2: Ajukan permintaan

Proksi seperti proksi Alibaba Cloud CDN mungkin digunakan untuk mengakses OSS.

Kode contoh berikut memberikan contoh tentang cara mengirim permintaan ke OSS dari proksi menggunakan OSS SDK untuk Python:

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# Siapkan sumber daya.
bucketName = "examplebucket"
endpoint = "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.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Inisialisasi instance bucket.
bucket = oss2.Bucket(auth, endpoint, bucketName)
# Simulasikan permintaan menggunakan proksi.
headers = dict()
headers["x-forwarded-for"] = "10.0.0.1"
result = bucket.put_object('exampleobject.txt', 'Hello OSS', headers)
# Tampilkan kode status HTTP.
print('http status: {0}'.format(result.status))
# Tampilkan ID permintaan. ID permintaan secara unik mengidentifikasi permintaan. Kami sarankan Anda menambahkan parameter ini ke log.
print('request_id: {0}'.format(result.request_id))

Langkah 3: Filter log

  1. Di tab Real-time Log Query, masukkan pernyataan kueri berikut dan klik Search & Analyze.

    * and bucket: examplebucket and operation:PutObject | select request_id, 
    json_format(json_extract(from_utf8(from_base64(user_defined_log_fields)), 
    '$.headers["x-forwarded-for"]')) as myheader

    image

  2. Filter permintaan dari alamat IP proksi 10.0.0.2.

    Masukkan pernyataan kueri berikut dan klik Search & Analyze.

    * and bucket: examplebucket and operation:PutObject | select request_id, 
    json_format(json_extract(from_utf8(from_base64(user_defined_log_fields)), 
    '$.headers["x-forwarded-for"]')) as myheader having myheader like '%10.0.0.2%'

    image

FAQ

Mengapa user_defined_log_fields bukan field yang diindeks?

Field user_defined_log_fields ditambahkan setelah fitur kueri log real-time ditambahkan. Untuk membuat field tersebut diindeks, Anda perlu memperbarui pengindeksan field secara manual. Untuk informasi lebih lanjut, lihat Setel Ulang Indeks Field. Jika Anda tidak ingin field tersebut menjadi field yang diindeks, Anda tidak perlu melakukan operasi ini.

Apa yang harus saya lakukan jika Simple Log Service mengembalikan kesalahan dekode Base64 yang mengatakan setidaknya dua byte diperlukan untuk dekode?

Waktu mulai analisis log harus lebih awal dari waktu efektif pengaturan pencatatan kustom. Sebelum pengaturan pencatatan kustom efektif, nilai field user_defined_log_fields adalah -, yang tidak dienkripsi Base64. Sebagai contoh, nilai field ini juga - untuk permintaan dengan kode status HTTP 499. Dalam hal ini, kami sarankan Anda menyaring log di mana nilai field user_defined_log_fields adalah - sebelum Anda menganalisis data log.