全部产品
Search
文档中心

:基于OSS用户自定义日志字段分析中间链路代理

更新时间:Feb 29, 2024

OSS新增扩展字段user_defined_log_fields以支持自定义日志需求,您可以通过设置x-forwarded-for头来分析中间链路代理的情况。

前提条件

  • 请确保您已开启实时日志查询。具体操作,请参见实时日志查询

  • 请确保您发起的请求中含有待设置的日志记录请求头或查询参数。更多信息,请参见x-oss-additional-headers

步骤一:设置请求头

  1. 登录OSS管理控制台

  2. 单击Bucket 列表,然后单击目标Bucket名称。

  3. 在左侧导航栏,选择日志管理 > 实时查询

  4. 实时查询页签,单击日志记录请求头或查询参数右侧的添加

  5. 设置日志记录请求头或查询参数对话框,单击日志字段自定义配置右侧的+图标。

  6. 选择请求头,输入x-forwarded-for,然后单击确定

    image

步骤二:发起请求

实际OSS使用过程中,您可能会用到CDN代理等代理服务器信息。

以下以Python SDK为例,模拟代理请求。

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

# 示例准备
bucketName = "examplebucket"
endpoint = "oss-cn-hangzhou.aliyuncs.com"
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 初始化Bucket实例
bucket = oss2.Bucket(auth, endpoint, bucketName)
# 模拟代理请求
headers = dict()
headers["x-forwarded-for"] = "10.0.0.1"
result = bucket.put_object('exampleobject.txt', 'Hello OSS', headers)
# HTTP返回码。
print('http status: {0}'.format(result.status))
# 请求ID。请求ID是本次请求的唯一标识,强烈建议在程序日志中添加此参数。
print('request_id: {0}'.format(result.request_id))

步骤三:筛选日志

  1. 实时查询页签,输入以下查询语句,然后单击查询/分析

    * 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. 筛选IP地址为10.0.0.2的代理信息。

    输入以下查询语句,然后单击查询/分析

    * 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

常见问题

user_defined_log_fields字段不是索引字段

由于user_defined_log_fields字段是Bucket开启实时日志功能后加入的字段,所以该字段的索引配置需要手动刷新才能使用。更多信息,请参见重置日志索引字段。如果您不需要把字段当作索引,则不用进行该操作。

SLS Base64解码错误提示至少需要两个字节才能解码

数据分析的起始时间应在配置生效时间之后,因为在配置生效前,user_defined_log_fields日志字段的值默认为-,不是Base64编码。例如499请求该字段的值也是-,因此建议直接过滤掉该字段为-的日志,再进行分析。