全部產品
Search
文件中心

:基於OSS使用者自訂日誌欄位分析中間鏈路代理

更新時間:Jun 19, 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代理等Proxy 伺服器資訊。

以下以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請求該欄位的值也是-,因此建議直接過濾掉該欄位為-的日誌,再進行分析。