OSS新增扩展字段user_defined_log_fields
以支持自定义日志需求,您可以通过设置x-forwarded-for
头来分析中间链路代理的情况。
前提条件
请确保您已开启实时日志查询。具体操作,请参见实时日志查询。
请确保您发起的请求中含有待设置的日志记录请求头或查询参数。更多信息,请参见x-oss-additional-headers。
步骤一:设置请求头
登录OSS管理控制台。
单击Bucket 列表,然后单击目标Bucket名称。
在左侧导航栏,选择
。在实时查询页签,单击日志记录请求头或查询参数右侧的添加。
在设置日志记录请求头或查询参数对话框,单击日志字段自定义配置右侧的+图标。
选择请求头,输入
x-forwarded-for
,然后单击确定。
步骤二:发起请求
实际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))
步骤三:筛选日志
在实时查询页签,输入以下查询语句,然后单击查询/分析。
* 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
筛选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%'
常见问题
user_defined_log_fields
字段不是索引字段
由于user_defined_log_fields
字段是Bucket开启实时日志功能后加入的字段,所以该字段的索引配置需要手动刷新才能使用。更多信息,请参见重置日志索引字段。如果您不需要把字段当作索引,则不用进行该操作。
SLS Base64解码错误提示至少需要两个字节才能解码
数据分析的起始时间应在配置生效时间之后,因为在配置生效前,user_defined_log_fields
日志字段的值默认为-
,不是Base64编码。例如499请求该字段的值也是-
,因此建议直接过滤掉该字段为-
的日志,再进行分析。
文档内容是否对您有帮助?