資料分發是指通過資料加工任務,將一份源日誌按照預設的SPL規則處理後,寫入一個或多個目標LogStore,支援跨帳號、跨地區寫入。Log Service提供兩種分發模式:
靜態分發:目標Project和LogStore在任務配置時固定指定,最多支援20個輸出目標,適用於目標LogStore固定的情境。
動態分發:根據日誌中的業務欄位(如
tenant_id、service、level等)動態產生目標地址,並替換固定配置的Project和LogStore。適用於目標Project和LogStore根據業務日誌內容命名的情境。
核心機制
動態分發不是繞過靜態分發,而是在其基礎上進行欄位值的替換:
__tag__:__sls_etl_output_project__:替換固定配置的目標Project__tag__:__sls_etl_output_logstore__: 替換固定配置的目標庫
因此,固定配置在動態分發時的作用是提供執行內容(帳號 + 地區 + 許可權),而非最終寫入路徑。
動態分發無法改變目標Region和跨帳號許可權邊界,這些必須在配置固定目標Project和LogStore時正確設定。
常見情境包括:
多租戶資料隔離:SaaS平台根據租戶ID(
tenant_id)將不同租戶的日誌分別儲存,便於後續的許可權控制、計量計費和資料分析。按環境分流日誌:根據環境標識(
prod、staging、dev)將日誌自動分流到對應環境的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規則實現動態路由
單擊源Project名稱,進入源Project。
在左側導覽列,單擊
任務管理。在資料加工頁簽下,單擊建立資料加工任務,選擇源日誌庫,單擊確認。
選擇資料的時間範圍,並輸入SPL規則。
僅動態指定Project(固定LogStore)
適用於多租戶平台,每個租戶有相同結構的 LogStore。SPL規則如下:
*
| extend "__tag__:__sls_etl_output_project__" = concat('saas-tenant-', tenant_id)
// 目標 Logstore 使用靜態配置值,例如 'access-log'調試SPL並配置預設儲存目標:
在原始日誌中選擇日誌資料加入測試資料。
在測試資料頁簽中,單擊調試SPL,查看加工結果。
當加工結果符合預期後,單擊儲存資料加工(新版)。
在建立資料加工任務(新版)面板中,儲存目標配置如下:
目標Region選擇動態Project所在地區。
目標Project可設為該地區下任意已存在的Project(將被覆蓋)。
目標庫必須準確(不會被覆蓋)。
必須確保動態Project存在且有權訪問。

驗證分髮結果:啟動任務後,在各目標 LogStore 查詢資料,確認路由是否生效。樣本:
輸入日誌特徵
實際寫入位置
tenant_id=t-7a8b9cProject:
saas-tenant-t-7a8b9c, LogStore: 指定目標庫tenant_id=t-xyz123Project:
saas-tenant-t-xyz123, LogStore: 指定目標庫
僅動態指定LogStore(固定Project)
適用於在同一 Project 內按服務或層級分類日誌。SPL規則如下:
*
| extend "__tag__:__sls_etl_output_logstore__" = concat(service,'-logs')
// 目標 Project 使用靜態配置值,例如 'central-project'調試SPL並配置預設儲存目標:
在原始日誌中選擇日誌資料加入測試資料。
在測試資料頁簽中,單擊調試SPL,查看加工結果。
當加工結果符合預期後,單擊儲存資料加工(新版)。
在建立資料加工任務(新版)面板中,儲存目標配置如下:
目標Region:選擇固定Project所在地區。
目標Project:確保該Project下存在指定的動態LogStore;
目標庫可設為目標Project任意已存在的LogStore(將被覆蓋)。

驗證分髮結果:啟動任務後,在各目標 LogStore 查詢資料,確認路由是否生效。樣本:
輸入日誌特徵
實際寫入位置
service=user-serviceProject:
目標ProjectLogStore:
user-service-logsservice=order-service
Project:
目標ProjectLogStore:
order-service-logsservice=payment-serviceProject:
目標ProjectLogStore:
payment-service-logsservice=auth-serviceProject:
目標ProjectLogStore:
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並配置預設儲存目標:
在原始日誌中選擇日誌資料加入測試資料。
在測試資料頁簽中,單擊調試SPL,查看加工結果。
當加工結果符合預期後,單擊儲存資料加工(新版)。
在建立資料加工任務(新版)面板中,儲存目標配置如下:
說明即使所有欄位都將被動態覆蓋,也必須配置一個“預設儲存目標” —— 它的作用不是容錯,而是提供:
目標地區
執行角色
目標Region:選擇動態Project所在地區。
目標Project 和 目標庫可設為該地區下任意已存在的Project和LogStore(均會被覆蓋);
必須確保動態Project和LogStore存在且有權訪問。

驗證分髮結果:啟動任務後,在各目標 LogStore 查詢資料,確認路由是否生效。
基於
tenant_id和service欄位實現多租戶日誌自動隔離:同一租戶的日誌都儲存在同一Project下,且根據service欄位存入不同的LogStore。樣本:輸入日誌特徵
實際寫入位置
tenant_id=t-1001,service=user-serviceProject:
saas-tenant-t-1001LogStore:
user-service-logstenant_id=t-1002,service=payment-serviceProject:
saas-tenant-t-1002LogStore:
payment-service-logs