定向写入Logstore

数据分发是指通过数据加工任务,将一份源日志按照预设的SPL规则处理后,写入一个或多个目标Logstore,支持跨账号、跨地域写入。本文介绍如何实现日志内容的静态分发,即将源日志分发到固定的目标地址。如需根据日志内容(如level、tenant_id)动态决定目标地址请参考按内容动态分流

重要

单个数据加工任务最多支持20个输出目标。

准备源Logstore数据

确保源 Logstore 已正确接入原始日志,并包含可用于过滤和分类的关键字段。原始日志样例:

{
  "status": 503,
  "method": "POST",
  "uri": "/api/submit",
  "error_message": "service unavailable",
  "stack_trace": "..."
}

编写SPL规则

使用SPL对原始日志进行处理,并根据业务逻辑定义出最终需要分发到不同目标的多个结果集。

  1. 登录日志服务控制台

  2. 单击源Project名称,进入源Project。

  3. 在左侧导航栏,单击image任务管理

  4. 数据加工页签下,单击创建数据加工任务,选择源日志库,单击确认

  5. 选择数据的时间范围,SPL规则。

一对一:按状态码精确分发

将访问日志按状态码分为“成功请求”和“服务端错误”两个结果集,分发到不同的Logstore。

-- 成功请求 (2xx)
.let success_logs = *
  | where cast(status as int) >= 200 and cast(status as int) < 300
  | project __time__, method, uri, status, response_time;

-- 服务端错误 (5xx)
.let server_error_logs = *
  | where cast(status as int) >= 500
  | project __time__, method, uri, status, error_message, stack_trace;

-- 输出所有数据集
$success_logs; $server_error_logs;

调试SPL并配置默认存储目标:

  1. 原始日志中选择日志数据加入测试数据

  2. 测试数据页签中,单击调试SPL,查看加工结果

  3. 当加工结果符合预期后,单击保存数据加工(新版)

  4. 创建数据加工任务(新版)面板中,存储目标配置如下:

    • 目标Region:选择目标Project所在地域。

    • 必须确保对目标Project和目标库存在且有权访问。

    image

  5. 验证分发结果:启动任务后,在各目标 Logstore 查询数据,确认日志是否按预设目标分发。示例:

    输入日志特征

    实际写入位置

    status=200

    Project: sls-project-beijing,

    Logstore: access-success

    status=502

    Project: sls-project-beijing, Logstore: server-error-logs

一对多:备份错误日志(跨账号跨地域)

将所有错误日志跨地域、跨账号写入不同的目标库。

-- 所有错误日志
.let all_errors = *
  | where cast(status as int) >= 400
  | project __time__, method, uri, status, error_message;

-- 输出数据集
$all_errors;

调试SPL并配置默认存储目标:

  1. 原始日志中选择日志数据加入测试数据

  2. 测试数据页签中,单击调试SPL,查看加工结果

  3. 当加工结果符合预期后,单击保存数据加工(新版)

  4. 创建数据加工任务(新版)面板中,存储目标配置如下:

    • 目标Region:选择目标Project所在地域。

    • 角色ARN

      • 同账号操作:选择默认角色,使用阿里云系统角色AliyunLogETLRole,该角色已包含访问当前账号下日志服务资源的通用权限,适用于源和目标Logstore均在当前账号下的场景。

      • 跨账号操作:选择自定义角色,当目标Logstore属于其他阿里云账号时,需要手动创建一个RAM角色,为其授予读取源Logstore和写入所有目标Logstore的权限,并在目标账号侧为该角色配置信任策略。详细授权信息请参考授权

    image

  5. 验证分发结果:启动任务后,在各目标 Logstore 查询数据,确认日志是否按预设目标分发。示例:

    输入日志特征

    实际写入位置

    status=502

    Project: sls-project-beijing ,

    Logstore: error-logs

    Project: sls-project-hangzhou, Logstore: error-logs-backup

多对一:集中审计

将不同行为日志写入同一个目标库。

-- 敏感操作日志
.let audit_logs = *
  | where (uri like '/api/*/delete')  or ( uri like '/api/*/create');

-- 登录行为日志
.let login_logs = *
  | where  uri = '/login' or uri = '/logout';

-- 输出数据集
$audit_logs;$login_logs;

调试SPL并配置默认存储目标:

  1. 原始日志中选择日志数据加入测试数据

  2. 测试数据页签中,单击调试SPL,查看加工结果

  3. 当加工结果符合预期后,单击保存数据加工(新版)

  4. 创建数据加工任务(新版)面板中,存储目标配置如下:

    image

  5. 验证分发结果:启动任务后,在各目标 Logstore 查询数据,确认日志是否按预设目标分发。示例:

    输入日志特征

    实际写入位置

    uri = /login

    Project: sls-project-beijing ,

    Logstore: security-audit

    uri=/api/user/delete

支持的映射模式

写入结果集指需要写入至当前目标LogstoreSPL数据集

  • 一对一:一个数据集 → 一个目标 Logstore。

  • 一对多:一个数据集 → 多个目标。

  • 多对一:多个数据集 → 同一个目标。

  • 多对多:多个数据集分别写入多个目标