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請求該字段的值也是-
,因此建議直接過濾掉該字段為-
的日志,再進行分析。
文檔內容是否對您有幫助?