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

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

功能优势

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

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

前提条件

  1. 开通日志服务,创建Project和Logstore,并成功采集到日志数据。
  2. 开通OSS,在日志服务Project所在的地域创建Bucket。
  3. 开通访问控制RAM。
  4. 日志服务Project和OSS的Bucket必须位于相同Region,不支持跨Region投递数据。

操作步骤

1 访问控制(RAM)授权

开启投递任务之前,您需要为日志服务授权,允许日志数据写入OSS。

单击快捷授权,在弹出页面中单击同意授权。成功授权后,日志服务具备OSS的数据写入权限。

说明
  • 修改授权策略、跨阿里云账号配置投递任务,请参考RAM授权
  • 不涉及跨阿里云账号时,子账号配置投递任务请参考RAM 用户,为子账号授予权限。

2 配置OSS投递规则

  1. 登录日志服务控制台。
  2. 选择所需的项目,单击项目名称。
  3. 选择所需的日志库,单击日志投递列下的OSS
  4. 单击开启投递,设置 OSS 投递配置并单击确认

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

配置项 说明 取值范围
OSS投递名称 您所创建的投递的名称。 只能包含小写字母,数字,连字符(-)和下划线(_),必须以小写字母和数字开头和结尾,且名称长度为3~63字节。
OSS Bucket OSS 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三种格式,配置细节请点击查看:JSON格式Parquet格式CSV格式
是否压缩 OSS 数据存储的压缩方式。
  • none:表示原始数据不压缩。
  • snappy:表示使用 snappy 算法对数据做压缩,可以减少 OSS Bucket 存储空间使用量。
投递时间 投递任务的间隔时长。 取值范围为300~900,默认值300。单位为秒。
图 1. 投递日志


图 2. 角色ARN


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

分区格式

每个投递任务会写入OSS一个文件,路径格式是 oss:// OSS-BUCKET/OSS-PREFIX/PARTITION-FORMAT_RANDOM-ID。PARTITION-FORMAT根据投递任务创建时间格式化得到,以创建时间为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. 选择所需的项目,单击项目名称。
  3. 选择所需的日志库,单击日志投递列下的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,单击 文件管理 即可看到有日志服务投递过来的数据。

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

Object 地址

oss:// OSS-BUCKET/OSS-PREFIX/PARTITION-FORMAT_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存储格式