如果您需要通過訪問日誌分析使用者行為,瞭解使用者的地區分布及排查問題等,您可以通過ALB聯合Log Service(SLS)推出的訪問日誌功能來實現。
ALB 訪問日誌適用於請求審計、故障排查及效能分析情境,可提供類似傳統 Nginx 等 Web 網關的訪問日誌記錄能力。通過訪問日誌,可以查詢 HTTP 要求頭、狀態代碼及延遲分布等資訊,用於排查請求報錯 URL、介面延遲高、監控資料與業務量不符等問題。訪問日誌僅記錄成功建立的 HTTP/HTTPS 請求,不記錄 TCP 建聯失敗、連接埠掃描及 TLS 握手失敗等情況。
費用說明
ALB將日誌投遞到Log Service後,Log Service根據儲存空間、讀取流量、請求數量、資料加工、資料投遞等進行計費,更多資訊,請參見Log Service計費。
前提條件
使用訪問日誌功能前,請確保您已開通Log Service。具體操作,請參見開通Log Service。
建立訪問日誌
在頂部功能表列,選擇ALB執行個體所屬的地區。
在執行個體頁面,單擊目標執行個體ID。
在執行個體詳情頁,單擊訪問日誌頁簽,在訪問日誌頁簽單擊建立訪問日誌。
在建立訪問日誌對話方塊,配置項目Project和日誌庫Logstore,然後單擊確定。
配置
說明
項目Project
Log Service中的資源嵌入式管理單元,用於資源隔離和控制。
選擇現有 Project:在下拉框中選擇一個Project。
建立 Project:在文字框中輸入建立Project名稱。
日誌庫Logstore
Log Service中日誌資料的採集、儲存和查詢單元。
選擇現有 Logstore:在下拉框中選擇一個Logstore。
建立 Logstore:在文字框中輸入建立Logstore名稱。Project選擇建立時,Logstore也需選擇建立。
服務關聯角色建立須知
執行此操作時,系統將會為您自動建立一個服務關聯角色,以完成相應功能。
在彈出的對話方塊中,確認提示資訊,然後單擊確定。
選擇建立日誌庫Logstore時,配置完成後,Log Service預設為該Logstore建立索引及開啟儀錶盤。
選擇現有日誌庫Logstore時,配置完成後,Log Service會自動開啟儀錶盤。如果該Logstore已設定索引,配置不會被覆蓋,如需新的索引,請至Log Service控制台調整。
查看訪問日誌
在訪問日誌頁簽,單擊SLS日誌儲存右側的連結,前往Log Service查看原始日誌等資訊。
在訪問日誌頁簽,您可以分別單擊監控中心、訪問中心或秒級監控頁簽,輸入篩選條件,查詢相關指標資訊。
模組分類
指標說明
監控中心
展示ALB執行個體的即時監控資料,包括訪問PV、請求成功率、平均延遲、4xx請求數、Status分布、流量、P50延遲、P90延遲、P99延遲、P9999延遲、TOP請求Host、TOP延遲Host、TOP失敗率Host、TOP請求URL、TOP延遲URL、TOP失敗率URL、TOP請求後端、TOP延遲後端、TOP失敗率後端等指標。
訪問中心
展示ALB執行個體的訪問狀態資料,包括PV對比昨日、PV對比上周、UV對比昨日、UV對比上周、PV分布、UV分布、今日訪問PV、7天訪問PV、TOP10訪問省份、移動端佔比、TOP10訪問Host、TOP10訪問UserAgent、TOP訪問IP等指標。
秒級監控
以秒級粒度展示監控資訊,便於發現瞬時抖動的異常情況,包括QPS、訪問延遲、Upstream延遲、成功率、請求流量、返回Body流量、2xx狀態代碼、3xx狀態代碼、錯誤狀態代碼、Upstream2xx狀態代碼、Upstream3xx狀態代碼、Upstream錯誤狀態代碼等指標。
ALB擴充版還支援LLM指標項,包括輸入Token總數、輸出Token總數、總Token數、Token消耗數(token/s)、AI請求時延(ms)等指標。
在監控中心、訪問中心或秒級監控頁簽右上方,您可以單擊更多報表前往CloudLens for ALB頁面,查看更多ALB資料報表資訊。更多資訊,請參見查看資料報表。
在監控中心、訪問中心或秒級監控頁簽右上方,您可以單擊警示設定前往CloudLens for ALB頁面,查看ALB執行個體警示事務。
關於監控中心、訪問中心或秒級監控頁簽右上方的更多功能介紹:
:開啟SQL增強。更多資訊,請參見高效能完全精確查詢與分析(SQL獨享版)。Log Service採集到訪問日誌後,您可以執行查詢分析、下載、投遞、加工日誌、建立警示等操作。具體操作,請參見雲產品日誌通用操作。
記錄自訂header
除常用的header外,slb_headers用來記錄請求中其餘header的header name和header value,以便完整地記錄請求和更好地分析日誌。
訪問日誌的自訂header長度預設支援1 KB,最大可以提升到4KB,如需提升請聯絡您的客戶經理申請。更多資訊,請參見ALB轉寄請求的長度限制是多少?是否支援調整?。
當自訂 header 總長度超過上述限制時,slb_headers 欄位中超出部分會被截斷,並在末尾附加 Discarded:TooManyCustomizedHeaders。
擴充版暫不支援記錄自訂header。
在訪問日誌頁簽,在基本資料地區單擊記錄自訂header設定。
在日誌中記錄自訂HTTP頭設定對話方塊,在下拉框中選擇該ALB執行個體已添加的監聽。
在彈出的對話方塊中,確認提示資訊,單擊確定。
設定完成後,日誌中的slb_headers欄位會記錄請求中除以下header之外的header_name和header_value:
#自訂header不會記錄以下欄位資訊 host referer user-agent x-forwarded-for x-readtime x-real-ip uber-trace-id X-B3-TraceId X-B3-SpanId X-B3-ParentSpanId X-B3-Sampled
刪除日誌
在訪問日誌頁簽,在基本資料地區單擊關閉日志記錄。
在彈出的對話方塊中,確認提示資訊,然後單擊確定。
日誌欄位說明
標準版
欄位 | 說明 |
app_lb_id | Server Load Balancer執行個體ID。 |
__topic__ | 日誌主題,固定為alb_layer7_access_log。 |
body_bytes_sent | 發送給用戶端的HTTP Body的位元組數。 |
client_ip | 請求用戶端IP地址。當未開啟“尋找真實用戶端源IP”功能時,該欄位為負載平衡的上一跳IP地址;開啟後,該欄位為真實用戶端源IP地址。 |
host | 網域名稱或IP地址。優先從請求參數中擷取host,如果擷取不到則從host header取值,如果還是擷取不到則以處理請求的後端伺服器IP地址作為host。 |
http_host | 請求報文host header的內容。 |
http_referer | 負載平衡收到的請求報文中HTTP的referer header的內容。 |
http_user_agent | 負載平衡收到的請求報文中HTTP的user-agent header的內容。 |
http_x_forwarded_for | 負載平衡收到的請求報文中HTTP的x-forwarded-for的內容。 |
http_x_real_ip | 負載平衡收到的請求報文中HTTP的x-real-ip的內容。 |
read_request_time | 負載平衡讀取請求的時間,單位:毫秒。 |
request_length | 請求報文的長度,包括startline、HTTP頭報文和HTTP body。單位:Byte。 |
request_method | 請求報文的方法。 |
request_time | 負載平衡收到第一個請求報文的時間到返回應答之間的時間間隔,單位:秒。 |
request_uri | 負載平衡收到的請求報文的URI。 |
scheme | 請求的scheme:HTTP或HTTPS。 |
server_protocol | 負載平衡收到的HTTP協議的版本,例如HTTP/1.0或HTTP/1.1。 |
slb_vport | 負載平衡的監聽連接埠。 |
slb_xtrace | 負載平衡鏈路追蹤的調用鏈TraceId。 |
xtrace_type | 負載平衡鏈路追蹤Xtrace資料的類型,目前僅支援Zipkin。 |
ssl_cipher | 建立SSL串連使用的密碼,例如ECDHE-RSA-AES128-GCM-SHA256等。 |
ssl_protocol | 建立SSL串連使用的協議,例如TLSv1.2。 |
status | 負載平衡應答報文的狀態。 |
tcpinfo_rtt | 用戶端TCP連線時間,單位:微秒。 |
time | 日誌記錄時間。時間格式為 |
upstream_addr | 後端伺服器的IP地址和連接埠。 |
upstream_response_time | 從負載平衡向後端伺服器建立串連開始到接收完資料然後關閉串連為止的時間,單位:秒。 |
upstream_status | 負載平衡收到的後端伺服器的響應狀態代碼。 |
vip_addr | 虛擬IP地址。 |
write_response_time | 負載平衡寫的回應時間,單位:毫秒。 |
client_port | 請求用戶端連接埠。 |
slb_headers | 自訂headers,需開啟對應功能才能使用,用於存放請求的自訂header。 |
擴充版
欄位 | 說明 |
app_lb_id | Server Load Balancer執行個體ID。 |
__topic__ | 日誌主題,固定為alb_layer7_access_log。 |
body_bytes_sent | 發送給用戶端的HTTP Body的位元組數。 |
client_ip | 請求用戶端IP地址。當未開啟“尋找真實用戶端源IP”功能時,該欄位為負載平衡的上一跳IP地址;開啟後,該欄位為真實用戶端源IP地址。 |
host | 網域名稱或IP地址。優先從請求參數中擷取host,如果擷取不到則從host header取值,如果還是擷取不到則以處理請求的後端伺服器IP地址作為host。 |
http_referer | 負載平衡收到的請求報文中HTTP的referer header的內容。 |
http_user_agent | 負載平衡收到的請求報文中HTTP的user-agent header的內容。 |
http_x_forwarded_for | 負載平衡收到的請求報文中HTTP的x-forwarded-for的內容。記錄為負載平衡改寫後的X-Forwarded-For內容。 |
http_x_real_ip | 負載平衡收到的請求報文中HTTP的x-real-ip的內容。 |
read_request_time | 負載平衡讀取請求的時間,單位:毫秒。 |
request_length | 請求報文的長度,包括startline、HTTP頭報文和HTTP body。單位:Byte。 |
request_method | 請求報文的方法。 |
request_time | 負載平衡收到第一個請求報文的時間到返回應答之間的時間間隔,單位:秒。 |
request_uri | 負載平衡收到的請求報文的URI。 |
scheme | 請求的scheme:HTTP或HTTPS。 |
server_protocol | 負載平衡收到的HTTP協議的版本,例如HTTP/1.0或HTTP/1.1。 |
slb_vport | 負載平衡的監聽連接埠。 |
ssl_cipher | 建立SSL串連使用的密碼,例如ECDHE-RSA-AES128-GCM-SHA256等。 |
ssl_protocol | 建立SSL串連使用的協議,例如TLSv1.2。 |
status | 負載平衡應答報文的狀態。 |
time | 日誌記錄時間。時間格式為 |
upstream_addr | 後端伺服器的IP地址和連接埠。 |
upstream_response_time | 從負載平衡向後端伺服器建立串連開始到接收完資料然後關閉串連為止的時間,單位:秒。 |
vip_addr | 虛擬IP地址。 |
write_response_time | 負載平衡寫的回應時間,單位:毫秒。 |
client_port | 請求用戶端連接埠。 |
upstream_protocol | 負載平衡與後端伺服器通訊使用的HTTP協議版本。 |
upstream_hostname | 後端伺服器的DNS網域名稱。如果沒有DNS網域名稱,則為後端伺服器的IP地址和連接埠。 |
response_flags | 有關響應或串連的其他詳細資料。 |
status_details | 響應狀態代碼的詳細資料,例如via_upstream、direct_response、route_not_found等。 |
llm_log | AI請求相關資料,以JSON格式編碼,包含以下子欄位:
|
查詢樣本
在Log Service控制台進入 ALB 對應的 Logstore 後,可通過以下方式篩選日誌:
按時間篩選:在頁面頂部的時間選取器中選擇時間段,支援最近 15 分鐘、最近 1 小時、今天等預設範圍,或自訂時間範圍。
按 URL 篩選:在查詢輸入框中輸入
request_uri:/api/xxx,僅顯示請求 URI 包含/api/xxx的日誌記錄。按狀態代碼篩選:輸入
status:200查詢指定狀態代碼的請求,或輸入status:5*匹配所有 5xx 錯誤響應。按要求方法篩選:輸入
request_method:Get*篩選 GET 請求。多條件組合:使用
and串連多個條件,例如request_uri:/api/xxx and status:200,篩選特定 URL 且狀態代碼為 200 的請求。
使用 field:value 文法查詢指定欄位前,需在Log Service控制台為該欄位建立欄位級索引。全文索引不支援欄位級查詢,未配置欄位級索引時查詢將返回錯誤提示。如需按 request_uri 關鍵詞直接搜尋,請先在Log Service控制台為該欄位建立索引。
常見問題
是否可以查看建立訪問日誌前的訪問日誌資料?
不支援。
僅支援查看建立訪問日誌之後所採集到的日誌資料。在建立訪問日誌之前,Log Service不會主動採集ALB訪問資料,因此無法查看建立前的日誌資料。
為什麼 ALB 監控顯示有異常(如 4XX 報錯、高並發)或遭受掃描,但訪問日誌中沒有記錄?
訪問日誌中未出現對應記錄,可能由以下原因導致:
1. 未開通訪問日誌
必須先開通 ALB 訪問日誌功能,Log Service才能採集 ALB 的請求資料。若未開通,僅憑監控指標難以定位具體的報錯 URL、請求來源及資料準確性。建議參考本文"建立訪問日誌"章節完成開通。
2. TCP 建聯失敗或連接埠掃描
ALB 作為七層負載平衡,訪問日誌僅記錄成功建立 HTTP/HTTPS 串連後的請求,不記錄 TCP 建聯失敗的情況。連接埠掃描或 TCP 層面的異常串連不會出現在訪問日誌中。若需擷取異常 IP 並進行封鎖,建議開啟Cloud Firewall,查看與 ALB 公網 IP 建聯失敗的記錄。
3. 四層監聽逾時
四層 TCP 監聽的逾時事件通常不會記錄在 Ingress 日誌或訪問日誌中。僅當 TCP 串連建立成功、但後續請求響應逾時時,才可能在訪問日誌中產生 499 或 504 狀態代碼記錄。
4. TLS 握手失敗
TLS 握手階段發生的錯誤(如認證不匹配、協議版本不相容)通常無法通過訪問日誌直接體現,因為握手失敗意味著 HTTP 要求尚未建立。此類問題需要結合後端伺服器日誌及用戶端抓包進行分析。
如何通過 ALB 訪問日誌排查具體的報錯 URL、延遲高或請求記錄?
登入Log Service控制台,進入 ALB 對應的 Logstore,可按照以下情境進行查詢:
1. 查詢特定狀態代碼(如 400/4XX)對應的 URL
在查詢方塊中輸入 status:400(或其他狀態代碼,如 status:5*),在結果中查看 request_uri 欄位,即可定位具體出錯的請求路徑。
2. 排查介面延遲高
篩選 upstream_response_time 欄位,該欄位記錄從 ALB 向後端伺服器建立串連到接收完資料的時間(單位:秒)。若數值較大,說明延遲主要消耗在後端業務處理,而非 ALB 轉寄層面。同時可對比 request_time 欄位確認整體耗時(從收到用戶端請求到返回應答之間的時間間隔,單位:秒)。
3. 核實特定路徑或源 IP 的請求記錄
request_uri 等路徑欄位在 SLS Logstore 中預設為停用字詞段,無法直接通過路徑關鍵詞進行搜尋。建議結合已索引的 client_ip(請求用戶端 IP)或 http_host(請求 Host)等欄位進行組合查詢,以確認 ALB 是否收到了來自指定來源的請求。如需直接搜尋 request_uri,需先在 SLS 控制台為該欄位建立索引。
4. 驗證日誌資料準確性
ALB 訪問日誌記錄的是用戶端通過 ALB 訪問後端服務的所有 HTTP/HTTPS 請求流量。可參考本文"日誌欄位說明"章節,核對各欄位的資料定義和含義,確認日誌內容是否與預期業務流量一致。