由於雲產品日誌通常由系統自動產生,使用者無法直接控制其內容,因此可以通過配置寫入處理器來處理這些日誌。文中列舉了部分常用的資料處理方式作為參考。
前提條件
已建立Project、標準型Logstore並完成日誌採集配置。具體操作,請參見建立專案Project、建立Logstore和資料擷取概述。
說明
寫入處理器使用步驟請參見建立寫入處理器。
ACK
審計日誌僅保留寫操作
需求描述
ACK的審計日誌包含讀寫操作,具體通過
verb欄位來區分,取值包括create / get / list / patch / update / watch等。如果希望僅保留寫操作從而減少資料存放區量,可以配置寫入處理器進行處理。SPL語句
* | where verb not in ('get', 'watch', 'list')
控制平面日誌欄位提取
需求描述
希望對 content 欄位進列欄位提取。
原始日誌
_container_name_: kube-controller-manager _source_: stderr _time_: 2024-12-19T11:10:16.251374622+08:00 content: I1219 11:10:16.251299 1 httplog.go:134] "HTTP" verb="GET" URI="/healthz" latency="45.911µs" userAgent="kube-probe/1.30+" audit-ID="" srcIP="7.8.44.1:40092" resp=200 contentType="text/plain; charset=utf-8" resp=200SPL語句
* | parse-regexp content, '\S+\s+\S+\s+\S+\s+(\S+)\]\s+"([^"]+)"\s+(.*)' as caller, msg, kvs | parse-kv -regexp kvs, '([\S+]+)="?([^"]*)"?(?:\s+|$)' | project-away content, kvs處理結果
_container_name_: kube-controller-manager _source_: stderr _time_: 2024-12-19T11:10:16.251374622+08:00 URI: /healthz audit-ID: caller: httplog.go:134 contentType: text/plain; charset=utf-8 latency: 45.911µs msg: HTTP resp: 200 srcIP: 7.8.44.1:40092 userAgent: kube-probe/1.30+ verb: GET
OSS
保留滿足特定條件的資料
需求描述
僅保留 Object 相關操作的日誌。
SPL語句
* | where operation like '%Object%'
對object和request_uri進行 URL 解碼
需求描述
OSS 訪問日誌中,
object和request_uri預設是做了URL編碼的,希望對這兩個欄位進行URL解碼。原始日誌
object: image%2Flogo.png request_uri: /image%2Flogo.png HTTP/1.1SPL語句
* | extend object=url_decode(object), request_uri=url_decode(request_uri)處理結果
object: image/logo.png request_uri: /image/logo.png HTTP/1.1
負載平衡
僅保留失敗請求的日誌
需求描述
ALB訪問日誌中,
status欄位表示了請求的狀態代碼,希望僅保留失敗請求的日誌。SPL語句
* | where cast(status as bigint) >= 400
七層訪問日誌request_uri脫敏
需求描述
ALB 訪問日誌中,
request_uri欄位是包含完整的請求路徑和請求參數,希望移除請求參數部分,僅保留請求路徑。原始日誌
request_uri: /api/v1/some-resource?token=xxxxxxxSPL語句
* | extend request_uri=url_extract_path(request_uri)處理結果
request_uri: /api/v1/some-resource