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

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

功能优势

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

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

注意事项

  • 日志服务Project和OSS的Bucket必须位于相同Region,不支持跨Region投递数据。
  • 金融云和公共云之间可以投递。

前提条件

  1. 开通日志服务,创建Project和Logstore,并成功采集到日志数据。
  2. 开通OSS,在日志服务Project所在的地域创建Bucket。
  3. 开通访问控制RAM。

操作步骤

  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请参见投递流程 acs:ram::45643:role/aliyunlogdefaultrole
    投递大小 自动控制投递任务创建间隔并设置OSS的一个Object大小(以未压缩计算)上限。 取值范围为5~256,单位为MB。
    存储格式 日志数据投递OSS的存储格式。 支持JSON/Parquet/CSV三种格式,配置细节请点击查看:JSON格式Parquet格式CSV格式
    是否压缩 OSS数据存储的压缩方式。
    • 不压缩:表示原始数据不压缩。
    • 压缩(snappy):表示使用snappy算法对数据做压缩,可以减少 OSS Bucket存储空间使用量。
    投递时间 投递任务的间隔时长。 取值范围为300~900,默认值300。单位为秒。
    图 1. 投递日志


    图 2. 获取角色ARN


    说明 日志服务在后端并发执行数据投递,对写入每个shard的数据单独进行服务。每一个Shard都会根据投递大小、投递时间决定任务生成的频率,当任一条件满足时,即会创建投递任务。

分区格式

每个投递任务会写入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等大数据平台或阿里云DLA产品分析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存储格式