桶日志概述
使用场景
访问桶的过程中会产生大量的访问日志,默认情况下,OBS不会为您的桶收集访问日志。如果您需要分析访问桶的用户请求性质、类型或趋势,可以为桶开启日志记录功能,OBS会自动将桶的访问日志按照固定的规则命名,并生成日志文件上传至您指定的日志存储桶(当前桶或同一区域的其他桶)。
约束与限制
日志可以存储在产生日志的源桶,也可以存储在其他桶,但日志存储桶和源桶必须属于同一账号下的相同区域。
注意事项
日志记录设置成功后,大约15分钟后可在日志存储桶中查看到桶的操作日志。某时间段的日志文件可能不会记录该时间段的所有请求,部分请求可能会记录在上一时间段或下一时间段的日志文件中。因此,某时间段的日志文件不能确保该时间段日志记录的完整性和实时性。
日志文件命名规则
字段 |
说明 |
---|---|
<日志文件前缀> |
为用户指定的日志文件日志存储前缀。 |
YYYY-mm-DD-HH-MM-SS |
日志文件创建的时间(UTC时间)。“YYYY-mm-DD-HH-MM-SS”从左到右依次表示:年、月、日、小时、分钟和秒。 |
<UniqueString> |
为OBS自动生成的字符串,是日志文件的唯一标识。 |
- 如果<日志文件前缀>以“/”结尾,则该桶生成的日志文件在目标桶中将统一存放在以<日志文件前缀>命名的文件夹中,日志文件名称为“YYYY-mm-DD-HH-MM-SS-<UniqueString>”。
图1 日志文件夹命名图2 日志文件命名
- 如果<日志文件前缀>不以“/”结尾,则该桶生成的日志文件将直接存储在目标桶的根目录下,日志文件名称为“<日志文件前缀>YYYY-mm-DD-HH-MM-SS-<UniqueString>”。
图3 日志文件
日志字段介绍
- 日志内容示例
以下所示为在目标桶生成的桶访问日志文件记录:
787f2f92b20943998a4fe2ab75eb09b8 bucket [13/Aug/2015:01:43:42 +0000] xx.xx.xx.xx 787f2f92b20943998a4fe2ab75eb09b8 281599BACAD9376ECE141B842B94535B REST.GET.BUCKET.LOCATION - "GET /bucket?location HTTP/1.1" 200 - 211 - 6 6 "-" "HttpClient" - - - - "-" 089fe8c2c380f4031f6dc0197fe99d4d HPTAAFZfyW0yD80idvjw
- 日志内容格式
每个桶访问日志都包含以下信息:
表2 Bucket Logging格式 名称
含义
示例
BucketOwner
桶所有者的账号ID。
787f2f92b20943998a4fe2ab75eb09b8
BucketName
桶名称。
bucket
Time
请求时间戳(UTC),请求桶的时间(OBS收到请求的时间)。
[13/Aug/2015:01:43:42 +0000]
Remote IP
请求来源IP。
192.168.7.132
Requester
请求者的ID。取值如下:
- Anonymous:当使用匿名用户发起请求时,取该值。
- 请求者所属账号的账号ID:当使用账号或IAM用户发起请求时,取该值。
787f2f92b20943998a4fe2ab75eb09b8
RequestID
对桶执行操作时所发出请求的请求ID。
281599BACAD9376ECE141B842B94535B
Operation
请求的操作类型。
常见的Operation及其描述请参见表3。
REST.GET.BUCKET.LOCATION
Key
请求的目标对象名称。
-
Request-URI
请求对OBS资源进行操作时所使用的URI地址。关于URI,详情请参见构造请求。
说明:如果签名时使用query_string形式,那么在Request-URI中将展示签名信息,否则Request-URI中不会包含签名信息。
GET /bucket?location HTTP/1.1
HTTPStatus
OBS返回的HTTP状态码。
200
ErrorCode
OBS返回的错误码。取值为“-”表示未返回错误码。
-
BytesSent
HTTP响应body体的字节大小。
单位:Bytes
当HTTP响应不包含body体时,该参数为“-”。
211
ObjectSize
对象大小。
单位:Bytes
- 删除对象时,日志不会记录删除对象的大小。删除对象的日志中ObjectSize值为0。
- 如果返回错误码4XX,ObjectSize值为“-”,不展示具体大小。
-
TotalTime
请求总耗时。OBS服务器处理本次请求所花的时间。
请求总耗时 = 响应末字节的时间 - 请求首字节的时间
单位:ms
6
Turn-AroundTime
请求服务端耗时。请求OBS服务端所花的时间。
请求服务端耗时 = 响应首字节的时间 - 请求末字节的时间
单位:ms
6
Referer
请求的Referrer头域。
Referrer头域是HTTP请求头的一部分,用来帮助服务器理解请求的来源,即帮助服务器明确用户是从哪个URL跳转到当前请求的资源。
-
User-Agent
请求的User-Agent头域。
User-Agent头域是HTTP请求头的一部分,用于标识发起请求的客户端软件(浏览器、操作系统、设备类型等信息),服务器可以利用这些信息来优化响应内容或进行统计分析。
HttpClient
VersionID
请求中带的对象版本ID。该参数用于标识对桶中的哪个版本对象执行了操作。
当桶开启多版本控制后,您可以在桶中保留多个版本的对象,每个版本对象都具有一个唯一的对象版本ID。详情请参见多版本控制。
-
STSLogUrn
-
StorageClass
当前的对象存储类别。取值如下:
- STANDARD:标准存储
- STANDARD_IA:即“WARM”,低频访问存储
- COLD:归档存储
- DEEP_ARCHIVE:深度归档存储
STANDARD_IA
TargetStorageClass
通过生命周期规则转换后的对象存储类别。取值如下:
- STANDARD:标准存储
- WARM:低频访问存储
- COLD:归档存储
- DEEP_ARCHIVE:深度归档存储
GLACIER
DentryName
- 对于并行文件系统,是文件/目录的内部标识,由父目录inode编号与文件/目录名称组成。
- 对于对象桶,该字段为“-”。
12456/file.txt
IAMUserID
IAM用户ID。取值如下:
- IAM用户ID:非匿名用户发起请求时,取该值。
- Anonymous:当使用匿名用户发起请求,取该值。
8f3b8c53d29244a780084f2b8c106c32
AccessKeyID
请求者的AccessKey ID。取值如下:
- -:表示匿名请求。
- 请求者的AccessKey ID:表示非匿名请求。
UDSIAMSTUBTEST002852
表3 常见的Operation Operation
描述
Operation
描述
REST.GET.SERVICE
获取桶列表
REST.GET.ENCRYPTION
获取桶的加密配置
REST.PUT.BUCKET
创建桶
REST.DELETE.ENCRYPTION
删除桶的加密配置
REST.HEAD.BUCKET
查看桶
REST.PUT.OTM_DIRECT_COLD_ACCESS
设置桶归档对象直读策略
REST.GET.BUCKETVERSIONS
列举桶内对象
REST.GET.OTM_DIRECT_COLD_ACCESS
获取桶归档对象直读策略
REST.GET.BUCKET
获取桶元数据
REST.DELETE.OTM_DIRECT_COLD_ACCESS
删除桶归档对象直读策略
REST.GET.BUCKET.LOCATION
获取桶区域位置
REST.PUT.BUCKET.WEBSITE
设置桶的网站配置
REST.DELETE.BUCKET
删除桶
REST.GET.BUCKET.WEBSITE
获取桶的网站配置
REST.PUT.POLICY
设置桶策略
REST.DEL.BUCKET.WEBSITE
删除桶的网站配置
REST.GET.POLICY
获取桶策略
REST.PUT.BUCKET.CORS
设置桶的CORS配置
REST.DELETE.POLICY
删除桶策略
REST.GET.BUCKET.CORS
获取桶的CORS配置
REST.PUT.ACL
设置桶ACL、设置对象ACL
REST.DEL.BUCKET.CORS
删除桶的CORS配置
REST.GET.ACL
获取桶ACL、获取对象ACL
REST.OPTIONS.BUCKET
OPTIONS桶
REST.PUT.LOGGING_STATUS
设置桶日志管理配置
REST.OPTIONS.OBJECT
OPTIONS对象
REST.GET.LOGGING_STATUS
获取桶日志管理配置
REST.PUT.OBJECT
PUT上传
REST.PUT.BUCKET.LIFECYCLE
设置桶的生命周期配置
REST.POST.OBJECT
POST上传
REST.GET.LIFECYCLE
获取桶的生命周期配置
REST.COPY.OBJECT
复制对象
REST.DEL.LIFECYCLE
删除桶的生命周期配置
REST.GET.OBJECT
获取对象内容
REST.PUT.VERSIONING
设置桶的多版本状态
REST.HEAD.OBJECT
获取对象元数据
REST.GET.VERSIONING
获取桶的多版本状态
REST.DELETE.OBJECT
删除对象
REST.GET.BUCKET.STORAGE.POLICY
获取桶默认存储类别
REST.TRANSITION.STORAGECLASS.OBJECT
修改对象存储类别
REST.PUT.BUCKET.STORAGE.POLICY
设置桶默认存储类别
OP_MULTIPLE_DELETEOBJECT
批量删除对象(批量删除任务本身的操作)
REST.PUT.REPLICATION
设置桶的跨区域复制配置
REST.POST.RESTORE
恢复归档存储对象
REST.DELETE.REPLICATION
删除桶的跨区域复制配置
REST.APPEND.OBJECT
追加写对象
REST.GET.REPLICATION
获取桶的跨区域复制配置
REST.MODIFY.OBJECT.META
修改对象元数据
REST.PUT.TAGGING
设置桶标签
REST.TRUNCATE.OBJECT
截断对象
REST.GET.TAGGING
获取桶标签
REST.RENAME.OBJECT
重命名对象
REST.DEL.TAGGING
删除桶标签
REST.GET.UPLOADS
列举桶中已初始化多段任务
REST.PUT.BUCKET_QUOTA
设置桶配额
REST.POST.UPLOADS
初始化多段上传任务
REST.GET.BUCKET.QUOTA
获取桶配额
REST.PUT.PART
上传段
REST.GET.BUCKET.STORAGEINFO
获取桶存量信息
REST.COPY.PART
拷贝段
REST.PUT.BUCKET.INVENTORY
设置桶清单
REST.GET.UPLOAD
列举已上传的段
REST.GET.BUCKET.INVENTORY
获取桶清单、列举桶清单
REST.POST.UPLOAD
合并段
REST.DELETE.BUCKET.INVENTORY
删除桶清单
REST.DELETE.UPLOAD
取消多段上传任务
REST.PUT.CUSTOMDOMAIN
设置桶的自定义域名
REST.CLEAR.EXPIRE.UPLOAD
清理过期的段
REST.GET.CUSTOMDOMAIN
获取桶的自定义域名
REST.DELETE.CUSTOMDOMAIN
删除桶的自定义域名
REST.PUT.ENCRYPTION
设置桶的加密配置
-
-
桶日志费用说明
桶日志相关的权限
- 日志记录开启后,系统会同步开启日志存储桶的日志投递用户组对桶的写入权限和ACL读取权限。
如果手动将日志投递用户组的桶写入权限和ACL读取权限关闭,桶的日志记录会失败。
- 由于日志文件是OBS产生,并且由OBS上传到存放日志的桶中,因此OBS需要获得委托授权,用于上传生成的日志文件。所以在配置桶日志记录前,需要先到统一身份认证服务创建一个对OBS服务的委托,并在配置日志记录时添加该委托。关于详细的创建委托步骤,请参见创建用于上传日志的委托。
- 默认情况下,只需要为委托配置日志存储桶的上传对象权限(obs:object:PutObject)。统一身份认证服务的自定义策略JSON视图格式的示例如下,其中mybucketlogs为日志存储桶的桶名。
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:object:PutObject" ], "Resource": [ "OBS:*:*:object:mybucketlogs/*" ] } ] }
- 默认情况下,只需要为委托配置日志存储桶的上传对象权限(obs:object:PutObject)。统一身份认证服务的自定义策略JSON视图格式的示例如下,其中mybucketlogs为日志存储桶的桶名。
- 如果日志存储桶开启了服务端加密功能,还需要委托同时具有日志存储桶所在区域的KMS Administrator系统角色权限。
- 日志文件存储至日志存储桶后,如果您希望其他用户可以访问日志文件,可以通过以下方式为用户设置权限:
- 通过桶ACL设置
该方式仅支持对账号配置ACL,不支持对IAM用户配置。如果您需要为IAM用户配置日志文件的访问权限,请通过桶策略设置。
授予账号对日志存储桶的读取权限和对象读权限,即可访问日志存储桶的日志文件,详情请参见配置桶ACL。
- 通过桶策略设置
- 如果您希望当前账号(日志存储桶拥有者账号)下的其他IAM用户可以读取日志文件,可以通过对单个IAM用户授予指定对象的读权限实现。
- 如果您希望其他账号下的IAM用户可以读取日志文件,可以通过对其他账号授予指定对象的读权限实现。
- 通过桶ACL设置