Todos os produtos
Search
Central de documentação

Object Storage Service:Analyze intermediaries based on custom log fields

Última atualização: Sep 24, 2026

O Object Storage Service (OSS) oferece suporte a logs personalizados ao adicionar o campo user_defined_log_fields aos seus logs de acesso. Configure campos de log personalizados para monitorar informações específicas de requisições. Este tópico descreve como registrar o cabeçalho de requisição x-forwarded-for e usar as informações registradas para analisar intermediários.

Pré-requisitos

  • A consulta de logs em tempo real está ativada para o bucket. Para mais informações, consulte Real-time log query.

  • As requisições enviadas ao bucket incluem os cabeçalhos de requisição ou parâmetros de consulta desejados. Initiate a request.

Etapa 1: Especifique o cabeçalho da requisição

  1. Acesse o console do OSS.

  2. No painel de navegação à esquerda, clique em Buckets. Na página Buckets, localize e clique no bucket desejado.

  3. Na árvore de navegação à esquerda, escolha Logging > Real-time Log Query.

  4. Na guia Real-time Log Query, clique em Add ao lado de Request Headers or Query Parameters in Logs.

  5. Na caixa de diálogo Configure Request Header or Query Parameter in Logs, clique em Add ao lado de Specify Log Field.

  6. Selecione Request Header, insira x-forwarded-for e clique em OK.

    image

Etapa 2: Inicie uma requisição

É possível usar proxies, como os do Alibaba Cloud CDN, para acessar o OSS.

O código de exemplo a seguir mostra como enviar uma requisição ao OSS a partir de um proxy com o OSS SDK for Python:

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

# Prepare resources.
bucketName = "examplebucket"
endpoint = "oss-cn-hangzhou.aliyuncs.com"
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Initialize the bucket instance.
bucket = oss2.Bucket(auth, endpoint, bucketName)
# Simulate a request by using a proxy.
headers = dict()
headers["x-forwarded-for"] = "10.0.0.1"
result = bucket.put_object('exampleobject.txt', 'Hello OSS', headers)
# Show the HTTP status code. 
print('http status: {0}'.format(result.status))
# Show the request ID. A request ID uniquely identifies the request. We recommend that you add this parameter to the logs. 
print('request_id: {0}'.format(result.request_id))

Etapa 3: Filtre os logs

  1. Na guia Real-time Log Query, insira a seguinte instrução de consulta e clique em 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. Filtre as requisições provenientes do endereço IP de proxy 10.0.0.2.

    Insira a seguinte instrução de consulta e clique em 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

Perguntas frequentes

Por que o user_defined_log_fields não é um campo indexado?

O OSS adiciona o campo user_defined_log_fields após a ativação do recurso de consulta de logs em tempo real. Para indexar esse campo, atualize manualmente a indexação de campos. Para mais informações, consulte Reset the field index. Caso não queira indexar o campo, ignore esta etapa.

O que fazer se o Simple Log Service retornar um erro de decodificação Base64 indicando a necessidade de pelo menos dois bytes para a decodificação?

O horário de início da análise de logs deve ser anterior ao horário em que as configurações de log personalizadas entram em vigor. Antes da entrada em vigor dessas configurações, o valor do campo user_defined_log_fields é -, um valor não codificado em Base64. Por exemplo, o valor desse campo também é - para uma requisição com código de status HTTP 499. Nesse caso, filtre os logs nos quais o valor do campo - seja - antes de analisar os dados.