用户在访问 OSS 的过程中,会产生大量的访问日志。日志存储功能,可将 OSS 的访问日志,以小时为单位,按照固定的命名规则,生成一个 Object 写入您指定的 Bucket(目标 Bucket,Target Bucket)。

您可以使用阿里云 DataLakeAnalytics 或搭建 Spark 集群等方式对这些日志文件进行分析。同时,您可以配置目标 Bucket 的生命周期管理规则,将这些日志文件转成归档存储,长期归档保存。

说明 日志存储相关 API 接口请参考:

操作方式

操作方式 说明
控制台 Web 应用程序,直观易用
命令行工具ossutil 命令行工具,性能好
Java SDK 丰富、完整的各类语言 SDK demo
Python SDK
PHP SDK
Go SDK
C SDK
.NET SDK
Node.js SDK
Ruby SDK

日志存储 Object 命名规则

<TargetPrefix><SourceBucket>YYYY-mm-DD-HH-MM-SS-UniqueString
命名规则中:
  • TargetPrefix 由用户指定,表示存储访问日志记录的 Object 名字前缀,可以为空。
  • YYYY-mm-DD-HH-MM-SS表示该 Object 被创建时的阿拉伯数字的年、月、日、小时、分钟和秒(注意位数)。
  • UniqueString 为 OSS 系统生成的字符串(UUID),用于唯一标识该 Log 文件。
存储 OSS 访问日志的 Object 名称示例如下:
MyLog-oss-example2017-09-10-04-00-00-0000
上例中:
  • MyLog- 是用户指定的 Object 前缀。
  • oss-example 是源 Bucket 的名称。
  • 2017-09-10-04-00-00 是该 Object 的创建时间。
  • 0000 是 OSS 系统生成的字符串。

Log 文件格式

Log 文件的格式组成:以下名称从左至右,以空格分隔。

名称 例子 含义
Remote IP 119.xxx.xx.11 请求发起的 IP 地址(Proxy 代理或用户防火墙可能会屏蔽该字段)
Reserved - 保留字段
Reserved - 保留字段
Time [02/May/2012:00:00:04 +0800] OSS 收到请求的时间
Request-URI “GET /aliyun-logo.png HTTP/1.1” 用户请求的 URI(包括 query-string)
HTTP Status 200 OSS 返回的 HTTP 状态码
SentBytes 5576 用户从 OSS 下载的流量
RequestTime (ms) 71 完成本次请求的时间(毫秒)
Referer http://www.aliyun.com/product/oss 请求的 HTTP Referer
User-Agent curl/7.15.5 HTTP 的 User-Agent 头
HostName oss-example.oss-cn-hangzhou.aliyuncs.com 请求访问域名
Request ID 505B016950xxxxxx032593A4 用于唯一标识该请求的 UUID
LoggingFlag true 是否开启了访问日志功能
Requester Aliyun ID 16571xxxxxx83691 RAM User ID;匿名访问时为“-”
Operation GetObject 请求类型
Bucket oss-example 请求访问的 Bucket 名字
Key /aliyun-logo.png 用户请求的 Key
ObjectSize 5576 Object 大小
Server Cost Time (ms) 17 OSS 服务器处理本次请求所花的时间(毫秒)
Error Code NoSuchBucket OSS 返回的错误码
Request Length 302 用户请求的长度(Byte)
UserID 16571xxxxxx83691 Bucket 拥有者 ID
Delta DataSize 280 Bucket 大小的变化量;若没有变化为-
Sync Request - 是否是 CDN 回源请求;若不是则为-
StorageClass Standard 显示当前 Object 的存储类型,当前取值为 Standard/IA/Archive/--表示操作的是Bucket等无法获取相应存储类型的情况
TargetStorageClass Standard 显示通过 Lifecycle 或 CopyObject 转换存储类型后的目标 Object 存储类型,当前取值为Standard/IA/Archive/--表示该操作无目标 Object 存储类型信息(未通过Lifecycle或者CopyObject转换存储类型)

细节分析

  • 源 Bucket 和目标 Bucket 可以是同一个 Bucket,也可以是不同的 Bucket,但必须属于同一个账号下的同一地域内。您也可以将多个源 Bucket 的 Log 都保存在同一个目标 Bucket 内(建议指定不同的 TargetPrefix)。
  • OSS 以小时为单位生成 Bucket 访问的 Log 文件,但并不表示这个小时的所有请求都记录在这个小时的 Log 文件内,也有可能出现在上一个或者下一个 Log 文件中。
  • OSS 生成一个 Bucket 访问的 Log 文件,算作一次 PUT 操作,并记录其占用的空间,但不会记录产生的流量。Log 生成后,您可以按照普通的 Object 来操作这些 Log 文件。
  • OSS 会忽略掉所有以 x- 开头的 query-string 参数,但这个 query-string 会被记录在访问 Log 中。如果您想从海量的访问日志中标识一个特殊的请求,可以在 URL 中添加一个 x- 开头的 query-string 参数。例如:

    http://oss-example.oss-cn-hangzhou.aliyuncs.com/aliyun-logo.png

    http://oss-example.oss-cn-hangzhou.aliyuncs.com/aliyun-logo.png?x-user=admin

    OSS 处理上面两个请求,结果是一样的。但是在访问 Log 中,您可以通过搜索 x-user=admin,方便地定位出经过标记的这个请求。

  • OSS 的 Log 中的任何一个字段,都可能出现-,用于表示未知数据或对于当前请求该字段无效。
  • 根据需求,OSS 的 Log 格式将来会在尾部添加一些字段,请开发者开发 Log 处理工具时考虑兼容性的问题。