本文介绍采集到日志服务中的日志数据的数据模型。
为方便您理解日志服务中日志数据的数据模型并顺利使用,从如下基本概念展开介绍。
地域(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字节,且不可以使用如下关键字:
|
tags | 日志的标签,包括:
| 字典格式,Key和Value均为字符串类型。在控制台查询日志时,以__tag__: 为前缀展示。 |
日志主题(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"
数据域 | 内容 | 说明 |
topic | None | 沿用默认值(空字符串)。 |
time | 1330589527 | 日志产生的精确时间(精确到秒),从原始日志中的时间戳转换而来。 |
source | 10.10.10.1 | 使用服务器IP地址作为日志源。 |
content | Key-Value对 | 日志具体内容。 |
key | value |
ip | 10.1.1.1 |
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 |
Logs
由多条日志产生的集合。
LogGroup
一组日志的集合。
LogGroupList
一组LogGroup集合,用于结果返回。
编码方式
含义 | 描述 | Content-Type |
Protobuf | Protobuf对数据模型进行编码 | application/x-protobuf |
Protobuf格式请参见数据编码方式。
由于Protobuf对Key-Value对不要求唯一性,因此需要避免出现该情况,否则行为为未定义。
对于同一个Message中的字段,在Protobuf编码时需要按照字段编号的顺序,否则数据可能会解析失败。