数据模型

本文介绍采集到日志服务中的日志数据的数据模型。

为方便您理解日志服务中日志数据的数据模型并顺利使用,从如下基本概念展开介绍。

地域(Region)

地域为阿里云的服务节点。通过在不同的阿里云地域部署服务,实现您的服务距离您的客户更近,获得更低的访问延时及更好的用户体验。目前阿里云在全国各地拥有多个服务地域。

项目(Project)

项目为日志服务中的基本管理单元,用于资源隔离和控制。您可以通过项目来管理某一个应用的所有日志及相关的日志源。

日志库(Logstore)

日志库是日志服务中日志数据的收集、存储和消费单元。每个日志库隶属于一个项目,每个项目可以创建多个日志库。您可以根据实际需求为某一个项目生成多个日志库,其中常见的做法是为一个应用中的每类日志创建一个独立的日志库。例如:您有一个名为big-game的游戏应用,服务器上有三种日志:操作日志(operation_log)、应用程序日志(application_log)以及访问日志(access_log),您可以首先创建名为big-game的项目,然后在该项目下面为这三种日志创建三个日志库,分别用于它们的收集、存储和消费。

日志(Log)

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

日志主题(Topic)

一个日志库内的日志可以通过日志主题(Topic)来划分。您可以在写入时指定日志主题,并在查询时指定查询的日志主题。例如,一个平台用户可以使用用户编号作为日志主题写入日志。这样在查询时可利用日志主题让不同用户仅看到自己的日志。如果不需要划分一个日志库内的日志,让所有日志使用相同的日志主题即可。

说明 空字符串是一个有效的日志主题(Topic),且无论是写入还是查询日志时,默认的日志主题都是空字符串。所以,如果不需要使用日志主题,最简单的方式就是在写入和查询日志时都使用默认日志主题,即空字符串。

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

10.1.1.1 - - [01/Mar/2012:16:12:07 +0800] "GET /Send?AccessKeyId=82251054** HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"
将该条原始日志映射到日志服务中日志数据模型,具体如下。
数据域内容说明
topicNone沿用默认值(空字符串)。
time1330589527日志产生的精确时间(精确到秒),从原始日志中的时间戳转换而来。
source10.10.10.1使用服务器IP地址作为日志源。
contentKey-Value对日志具体内容。
您可以自己决定如何提取日志原始内容并组合成Key-Value对,如下表所示:
keyvalue
ip10.1.1.1
methodGET
status200
length5
ref_url-
browserMozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2

Logs

由多条日志产生的集合。

LogGroup

一组日志的集合。

LogGroupList

一组LogGroup集合,用于结果返回。

编码方式

系统目前支持以下内容编码方式(将来可扩展),Restful API层通过Content-Type表示。
含义描述Content-Type
ProtobufProtobuf对数据模型进行编码application/x-protobuf

Protobuf格式请参见数据编码方式

说明

由于Protobuf对Key-Value对不要求唯一性,因此需要避免出现该情况,否则行为为未定义。

对于同一个Message中的字段,在Protobuf编码时需要按照字段编号的顺序,否则数据可能会解析失败。