全部產品
Search
文件中心

Simple Log Service:按內容動態分流

更新時間:Jan 06, 2026

資料分發是指通過資料加工任務,將一份源日誌按照預設的SPL規則處理後,寫入一個或多個目標LogStore,支援跨帳號、跨地區寫入。Log Service提供兩種分發模式:

  • 靜態分發:目標Project和LogStore在任務配置時固定指定,最多支援20個輸出目標,適用於目標LogStore固定的情境。

  • 動態分發:根據日誌中的業務欄位(如 tenant_idservicelevel 等)動態產生目標地址,並替換固定配置的Project和LogStore。適用於目標Project和LogStore根據業務日誌內容命名的情境。

核心機制

動態分發不是繞過靜態分發,而是在其基礎上進行欄位值的替換

  • __tag__:__sls_etl_output_project__ :替換固定配置的目標Project

  • __tag__:__sls_etl_output_logstore__: 替換固定配置的目標庫

因此,固定配置在動態分發時的作用是提供執行內容(帳號 + 地區 + 許可權),而非最終寫入路徑。

說明

動態分發無法改變目標Region和跨帳號許可權邊界,這些必須在配置固定目標Project和LogStore時正確設定。

常見情境包括:

  • 多租戶資料隔離:SaaS平台根據租戶ID(tenant_id)將不同租戶的日誌分別儲存,便於後續的許可權控制、計量計費和資料分析。

  • 按環境分流日誌:根據環境標識(prodstagingdev)將日誌自動分流到對應環境的LogStore,以簡化調試和監控流程。

  • 按業務模組分類:將複雜應用中不同業務模組(如訂單、支付、使用者)的日誌分發到獨立的LogStore,進行專項儲存和分析。

準備源LogStore資料

確保源 LogStore 已接入原始日誌,並包含可用於路由的關鍵字段。

{
  "timestamp": "2025-04-05T10:00:00Z",
  "method": "POST",
  "uri": "/api/v1/orders",
  "status": 200,
  "tenant_id": "t-7a8b9c",
  "service": "order-service",
  "log_type": "access",
  "user_id": "u-12345"
}

關鍵路由欄位說明:

  • tenant_id:租戶唯一標識,用於決定目標 Project,實現租戶級隔離。

  • service:微服務名稱,用於構建目標LogStore名稱,假設系統包含:

    • user-service

    • order-service

    • payment-service

    • auth-service

編寫SPL規則實現動態路由

  1. 登入Log Service控制台

  2. 單擊源Project名稱,進入源Project。

  3. 在左側導覽列,單擊image任務管理

  4. 資料加工頁簽下,單擊建立資料加工任務,選擇源日誌庫,單擊確認

  5. 選擇資料的時間範圍,並輸入SPL規則。

僅動態指定Project(固定LogStore)

適用於多租戶平台,每個租戶有相同結構的 LogStore。SPL規則如下:

* 
| extend "__tag__:__sls_etl_output_project__" = concat('saas-tenant-', tenant_id)
// 目標 Logstore 使用靜態配置值,例如 'access-log'

調試SPL並配置預設儲存目標:

  1. 原始日誌中選擇日誌資料加入測試資料

  2. 測試資料頁簽中,單擊調試SPL,查看加工結果

  3. 當加工結果符合預期後,單擊儲存資料加工(新版)

  4. 建立資料加工任務(新版)面板中,儲存目標配置如下:

    • 目標Region選擇動態Project所在地區。

    • 目標Project可設為該地區下任意已存在的Project(將被覆蓋)。

    • 目標庫必須準確(不會被覆蓋)。

    • 必須確保動態Project存在且有權訪問。

    image

  5. 驗證分髮結果:啟動任務後,在各目標 LogStore 查詢資料,確認路由是否生效。樣本:

    輸入日誌特徵

    實際寫入位置

    tenant_id=t-7a8b9c

    Project: saas-tenant-t-7a8b9c, LogStore: 指定目標庫

    tenant_id=t-xyz123

    Project: saas-tenant-t-xyz123, LogStore: 指定目標庫

僅動態指定LogStore(固定Project)

適用於在同一 Project 內按服務或層級分類日誌。SPL規則如下:

* 
| extend "__tag__:__sls_etl_output_logstore__" = concat(service,'-logs')
// 目標 Project 使用靜態配置值,例如 'central-project'

調試SPL並配置預設儲存目標:

  1. 原始日誌中選擇日誌資料加入測試資料

  2. 測試資料頁簽中,單擊調試SPL,查看加工結果

  3. 當加工結果符合預期後,單擊儲存資料加工(新版)

  4. 建立資料加工任務(新版)面板中,儲存目標配置如下:

    • 目標Region:選擇固定Project所在地區。

    • 目標Project:確保該Project下存在指定的動態LogStore;

    • 目標庫可設為目標Project任意已存在的LogStore(將被覆蓋)。

    image

  5. 驗證分髮結果:啟動任務後,在各目標 LogStore 查詢資料,確認路由是否生效。樣本:

    輸入日誌特徵

    實際寫入位置

    service=user-service

    Project:目標Project

    LogStore:user-service-logs

    service=order-service

    Project:目標Project

    LogStore:order-service-logs

    service=payment-service

    Project:目標Project

    LogStore:payment-service-logs

    service=auth-service

    Project:目標Project

    LogStore:auth-service-logs

同時動態指定Project和LogStore

適用於完全由日誌驅動的全自動路由情境。SPL規則如下:

*
-- 動態指定輸出目標 Project(按租戶隔離) 
| extend "__tag__:__sls_etl_output_project__" = concat('saas-tenant-', tenant_id) 
-- 動態指定輸出目標 Logstore(格式:服務名-logs)
| extend "__tag__:__sls_etl_output_logstore__" = concat(service, '-logs') 

調試SPL並配置預設儲存目標:

  1. 原始日誌中選擇日誌資料加入測試資料

  2. 測試資料頁簽中,單擊調試SPL,查看加工結果

  3. 當加工結果符合預期後,單擊儲存資料加工(新版)

  4. 建立資料加工任務(新版)面板中,儲存目標配置如下:

    說明

    即使所有欄位都將被動態覆蓋,也必須配置一個“預設儲存目標” —— 它的作用不是容錯,而是提供:

    • 目標地區

    • 執行角色

    • 目標Region:選擇動態Project所在地區。

    • 目標Project目標庫可設為該地區下任意已存在的Project和LogStore(均會被覆蓋);

    • 必須確保動態Project和LogStore存在且有權訪問。

    image

  5. 驗證分髮結果:啟動任務後,在各目標 LogStore 查詢資料,確認路由是否生效。

    基於tenant_id 和 service 欄位實現多租戶日誌自動隔離:同一租戶的日誌都儲存在同一Project下,且根據service欄位存入不同的LogStore。樣本:

    輸入日誌特徵

    實際寫入位置

    tenant_id=t-1001service=user-service

    Project:saas-tenant-t-1001

    LogStore:user-service-logs

    tenant_id=t-1002service=payment-service

    Project:saas-tenant-t-1002

    LogStore:payment-service-logs