全部产品
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
日志服务

投递日志到 OSS

更新时间:2017-12-21 19:23:16

日志服务可以把Logstore中的数据自动归档到OSS,以发挥日志更多的效用。

  • OSS 数据支持自由设置生命周期,可以对日志进行长期存储。
  • 可以通过自建程序和更多系统(如E-MapReduce)消费OSS数据。

功能优势

通过日志服务投递日志数据到OSS具有如下优势:

  • 操作简单。仅需在控制台上做简单配置即可将日志服务Logstore的数据同步到OSS。
  • 效率提升。日志服务的日志收集过程已经完成不同机器上的日志集中化,无需重复在不同机器上收集日志导入OSS。
  • 便于管理。投递日志到OSS可以充分复用日志服务内的日志分类管理工作。用户可让日志服务不同项目(Project)、不同类型(Logstore)的日志自动投递到不同的OSS Bucket目录,方便管理OSS数据。

应用场景

例如两个阿里云用户主账号A、B:

  • 主账号A在日志服务深圳Region开通Project-a,并创建了一个Logstore存放nginx访问日志。

  • 主账号B在OSS深圳Region创建了Bucket-b。

注意:

  • A 和 B可以是相同账号,这种情况下RAM授权最为便捷。
  • 日志服务Project和OSS的Bucket必须位于相同Region,不支持跨Region投递数据。

用户希望将日志服务Project-a的nginx访问日志归档到Bucket-b的 prefix-b 目录下。

使用日志服务投递OSS功能,需要完成RAM授权和投递规则配置两个步骤。

操作步骤

步骤 1 访问控制(RAM)授权

快捷授权

主账号 B 登录阿里云控制台,免费开通 访问控制 RAM

单击 权限控制 RAM 快捷授权页,确认授予写 OSS 所有 Bucket 权限,日志服务将替 A 扮演角色写 B 的 OSS Bucket。

查看、修改角色

主账号 B 登录阿里云控制台 访问控制 RAM,进入 角色管理 并查看角色(快捷授权默认创建的角色是 AliyunLogDefaultRole)。

若 A、B不相同,请参考RAM进阶(授权Role管理)修改Role。若 A、B相同,则快捷授权创建的角色直接可用。

  1. 记录角色的 Arn(如acs:ram::45643:role/aliyunlogdefaultrole),该 Arn 需要提供给主账号 A 创建 OSS 投递规则时使用。
  2. 角色 Arn 可以在角色管理/管理下,ARN 栏获得。

快捷授权默认会授予写 B 的所有 OSS Bucket 权限,如需更精细化的权限控制,请参考RAM进阶(授权Policy管理)修改 Policy。

使用子账号创建投递规则授权

在 B 创建角色、授权完成之后,主账号 A 有权限使用主账号 B 创建的角色写数据到 OSS Bucket,但这仅限于主账号 A 本身创建投递规则。

如果主账号 A 的子账号 a_1 希望使用该角色创建投递规则,请参考RAM进阶(主子账号Role授权)进行PassRole授权。

步骤 2 日志服务用户配置OSS投递规则

  1. 登录 日志服务管理控制台

  2. 选择所需的项目,单击项目名称。

  3. 选择所需的日志库,单击日志投递列下的OSS

  4. 单击 开启投递,设置 OSS 投递配置并单击 确认

    请参考下表设置OSS投递配置。

    配置项说明取值范围
    OSS投递名称 您所创建的投递的名称。 只能包含小写字母,数字,连字符(-)和下划线(_),必须以小写字母和数字开头和结尾,且名称长度为3~63字节。
    OSS BucketOSS Bucket 名称。 必须是已存在的Bucket名称,且需要保证 OSS 的 Bucket 与日志服务 Project 位于相同 Region。
    OSS Prefix OSS前缀,从日志服务同步到 OSS 的数据将存放到 Bucket 的该目录下。必须是已存在的OSS Prefix名称。
    分区格式 将投递任务创建时间使用%Y,%m,%d,%H,%M等格式化生成分区字符串,以此来定义写到OSS的Object文件所在的目录层次结构,其中斜线/表示一级OSS目录。如下表举例说明OSS Prefix和分区格式如何定义OSS目标文件路径。 格式化参考strptime API
    RAM角色 RAM角色ARN及角色名称,用于访问权限控制,OSS Bucket 拥有者创建角色的标识,如何获得ARN请参见步骤1中的查看、修改角色。acs:ram::45643:role/aliyunlogdefaultrole
    投递大小 自动控制投递任务创建间隔并设置 OSS 的一个 Object 大小(以未压缩计算)上限。 取值范围为5~256,单位为 MB。
    存储格式 日志数据投递OSS的存储格式。 支持JSON/Parquet/CSV三种格式,配置细节请点击查看:JSONParquetCSV
    是否压缩 OSS 数据存储的压缩方式。
    • none:表示原始数据不压缩。
    • snappy:表示使用 snappy 算法对数据做压缩,可以减少 OSS Bucket 存储空间使用量。
    投递时间 投递任务的间隔时长。 取值范围为300~900,默认值300。单位为秒。

    oss-shipper-configshipper-role-arn

    注意:日志服务在后端并发执行数据投递,如果您的数据量较大,可能会多个投递线程进行服务。每一个投递线程都会根据投递大小、投递时间决定任务生成的频率,当任一条件满足时,投递线程即会创建任务。

    分区格式

    每个投递任务会写入OSS一个文件,路径格式是oss:// OSS-BUCKET/OSS-PREFIX/PARTITION-FROMAT_RANDOM-ID。PARTITION-FROMAT根据投递任务创建时间格式化得到,以创建时间为2017/01/20 19:50:43的投递任务为例,说明分区格式的用法:

    OSS Bucket OSS Prefix 分区格式 OSS文件路径
    test-bucket test-table %Y/%m/%d/%H/%M oss://test-bucket/test-table/2017/01/20/19/50/43_1484913043351525351_2850008
    test-bucket log_ship_oss_example year=%Y/mon=%m/day=%d/log_%H%M%s oss://test-bucket/log_ship_oss_example/year=2017/mon=01/day=20/log_195043_1484913043351525351_2850008.parquet
    test-bucket log_ship_oss_example ds=%Y%m%d/%H oss://test-bucket/log_ship_oss_example/ds=20170120/19_1484913043351525351_2850008.snappy
    test-bucket log_ship_oss_example %Y%m%d/ oss://test-bucket/log_ship_oss_example/20170120/_1484913043351525351_2850008
    test-bucket log_ship_oss_example %Y%m%d%H oss://test-bucket/log_ship_oss_example/2017012019_1484913043351525351_2850008

    使用Hive或MaxCompute等大数据平台分析OSS数据时,如果希望使用Partition信息,可以设置每一层目录上为key=value格式(Hive-style partition)。

    例如:oss://test-bucket/log_ship_oss_example/year=2017/mon=01/day=20/log_195043_1484913043351525351_2850008.parquet

    可以设置三层分区列,分别为:year、mon、day。

    日志投递任务管理

    在启动 OSS 投递功能后,日志服务后台会定期启动投递任务。您可以在控制台上看到这些投递任务的状态。

    通过 日志投递任务管理,您可以:

    • 查看过去两天内的所有日志投递任务,了解其状态。投递任务状态可以是“成功”、“进行中”和“失败”。“失败”状态则表示您的投递任务出现了因外部原因而无法重试的错误,需要您参与解决问题。

    • 对于创建两天内的投递失败任务,您可在任务列表中查看导致失败的外部原因。修复好这些外部原因后,您可以逐一或者整体重试所有失败任务。

    操作步骤

    1. 登录 日志服务管理控制台

      选择所需的项目,单击项目名称。

    2. 选择所需的日志库,单击日志投递列下的OSS

      您可以查看任务开始时间、任务结束的时间、接受日之的时间、数据行数、投递任务的状态等信息。

      如果投递任务执行失败,控制台上会显示相应的错误信息,系统会按照策略默认为你重试,您也可以手动重试。

    任务重试

    一般情况下,日志数据在写入Logstore后的 30 分钟内同步到 OSS。

    日志服务默认会按照退火策略重试最近两天之内的任务,重试等待的最小间隔是 15 分钟。当任务执行失败时,第一次失败需要等待 15 分钟再试,第二次失败需要等待 30 分钟(2 乘以 15)再试,第三次失败需要等待 60 分钟(2 乘以 30)再试,以此类推。

    如需立即重试失败任务,可以通过控制台单击上图中的 重试全部失败任务 或通过 API/SDK 方式指定任务进行重试。

    失败任务错误

    常见失败任务的错误信息如下:

    错误信息 错误原因 处理方法
    UnAuthorized 没有权限。 请确认以下配置:
    - OSS 用户是否已创建角色。
    - 角色描述的账号 ID 是否正确。
    - 角色是否授予 OSS Bucket 写权限。
    - role-arn 是否配置正确。
    ConfigNotExist 配置不存在 一般是由于删除投递规则导致,如又重新创建了规则,可以通过重试来解决。
    InvalidOssBucket OSS Bucket 不存在。 请确认以下配置:
    - OSS Bucket 所在 Region 是否与日志服务Project一致。
    - Bucket 名称是否配置正确。
    InternalServerError 日志服务内部错误。 通过重试来解决。

    OSS 数据存储

    可以通过控制台、API/SDK 或其它方式访问到 OSS 数据。

    如使用 Web 管理控制台访问,进入 OSS 服务,选择 Bucket,单击 Object管理 即可看到有日志服务投递过来的数据。

    更多 OSS 使用细节请参考 OSS 文档

    Object 地址

    oss:// OSS-BUCKET/OSS-PREFIX/PARTITION-FROMAT_RANDOM-ID

    • 路径字段说明

      • OSS-BUCKET、OSS-PREFIX 表示 OSS 的 Bucket 名称和目录前缀,由用户配置,INCREMENTID 是系统添加的随机数。
      • PARTITION-FORMAT定义为%Y/%m/%d/%H/%M,其中%Y,%m,%d,%H,%M分别表示年、月、日、小时、分钟,由本次投递任务的服务端创建时间通过strptime API计算得到。
      • RANDOM-ID是一个投递任务的唯一标识。
    • 目录的时间含义

      OSS数据目录是按照投递任务创建时间设置的,假设 5 分钟数据投递一次 OSS,2016-06-23 00:00:00 创建的投递任务,它投递的数据是 2016-06-22 23:55 后写入日志服务的数据。如需分析完整的 2016-06-22 全天日志,除了 2016/06/22 目录下的全部 object 以外,还需要检查 2016/06/23/00/ 目录下前十分钟的 Object 是否有包含 2016-06-22 时间的日志。

    Object存储格式

本文导读目录