Todos os produtos
Search
Central de documentação

Object Storage Service:Analyze intermediaries based on custom log fields

Última atualização: Jul 03, 2026

O Object Storage Service (OSS) permite o registro de logs personalizados mediante a adição do campo user_defined_log_fields aos logs de acesso. Configure campos de log personalizados para monitorar informações específicas das requisições. Este tópico descreve como registrar o cabeçalho de requisição x-forwarded-for e usar os dados gravados para analisar intermediários.

Pré-requisitos

  • A consulta de logs em tempo real está ativada para o bucket. Para mais informações, consulte Consulta de logs em tempo real.

  • As requisições enviadas ao bucket incluem os cabeçalhos de requisição ou parâmetros de consulta desejados. Consulte Iniciar uma requisição.

Etapa 1: Especificar o cabeçalho de requisição

  1. Faça login no 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 aba 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: Iniciar uma requisição

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

O exemplo de código a seguir demonstra como enviar uma requisição ao OSS por meio de um proxy usando 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: Filtrar logs

  1. Na aba 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 user_defined_log_fields não é um campo indexado?

O campo user_defined_log_fields foi adicionado posteriormente ao recurso de consulta de logs em tempo real. Para indexar esse campo, atualize manualmente a indexação de campos. Para mais informações, consulte Redefinir o índice de campo. Caso não deseje indexar o campo, ignore esta etapa.

O que fazer se o Simple Log Service retornar um erro de decodificação Base64 informando que são necessários pelo menos dois bytes para decodificação?

O horário inicial da análise de logs deve ser anterior ao horário de vigência das configurações de log personalizado. Antes que essas configurações entrem em vigor, o valor do campo user_defined_log_fields é -, que não possui codificação Base64. Por exemplo, o valor desse campo também é - para uma requisição com código de status HTTP 499. Nesse cenário, recomenda-se filtrar os logs cujo valor do campo user_defined_log_fields seja - antes de analisar os dados.