日志(Log)是系统在运行过程中变化的一种抽象,其内容为指定对象的某些操作和其操作结果按时间的有序集合。文件日志(LogFile)、事件(Event)、数据库日志(BinLog)、度量(Metric)数据都是日志的不同载体。在文件日志中,每个日志文件由一条或多条日志组成,每条日志描述了一次单独的系统事件,是日志服务中处理的最小数据单元。

日志服务采用半结构数据模式定义一条日志。该模式中包含主题(Topic)、时间(Time)、内容(Content)、来源(Source)和标签(Tags)五个数据域。

与此同时,日志服务对日志各字段的格式有不同要求,具体如下表所示:

数据域 含义 格式
主题(Topic) 用户自定义字段,用以标记一批日志。例如访问日志可根据不同站点进行标记。 包括空字符串在内的任意字符串,长度不超过128字节。默认情况下,该字段为空字符串。
时间(Time) 日志中的保留字段,用以表示日志产生的时间,一般由日志中的时间信息直接提取生成。 整型,Unix标准时间格式。单位为秒,表示从1970-1-1 00:00:00 UTC计算起的秒数。
内容(Content) 用以记录日志的具体内容。内容部分由一个或多个内容项组成,每一个内容项为一个Key-Value对。 Key为UTF-8编码字符串,包含字母、下划线和数字,且不以数字开头。长度不超过128字节。不可以使用如下关键字:
  • __time__
  • __source__
  • __topic__
  • __partition_time__
  • _extract_others_
  • __extract_others__
Value为任意字符串,长度不超过1024*1024字节。
来源(Source) 日志的来源地,例如产生该日志机器的IP地址。 任意字符串,长度不超过128字节。默认情况下该字段为空。
标签(Tags) 日志的标签,包括:
  • 用户自定义标签:您通过API PutLogs写入数据时添加的标签。
  • 系统标签:服务端为您添加的标签,包括__client_ip____receive_time__
字典格式,Key和Value均为字符串类型。在控制台查询日志时,以__tag__:为前缀展示。

实际使用场景中,日志的格式多样。为了帮助理解,以下以一条nginx原始访问日志如何映射到日志服务日志数据模型为例说明。假设用户nginx服务器的IP地址为10.249.201.117,以下为该服务器的一条原始日志:

10.1.168.193 - - [01/Mar/2012:16:12:07 +0800] "GET /Send?AccessKeyId=8225105404 HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"

把该条原始日志映射到日志服务日志数据模型,如下:

数据域 内容 说明
Topic “” 沿用默认值,即空字符串。
Time 1330589527 日志产生的精确时间,表示从1970-1-1 00:00:00 UTC计算起的秒数。从原始日志中的时间戳转换而来。
Content Key-Value对 日志具体内容。
Source “10.249.201.117” 使用服务器IP地址作为日志源。
Tags 由用户添加或者服务端添加。

用户可以自己决定如何提取日志原始内容并组合成Key-Value对,例如下表:

Key Value
ip “10.1.168.193”
method “GET”
status “200”
length “5”
ref_url “-“
browser “Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2”