日志(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字节。不可以使用如下关键字:
|
来源(Source) | 日志的来源地,例如产生该日志机器的IP地址。 | 任意字符串,长度不超过128字节。默认情况下该字段为空。 |
标签(Tags) | 日志的标签,包括: | 字典格式,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 |