全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
日志服务

数据模型

更新时间:2017-06-07 13:26:11

为方便理解整个 Log Service 服务并顺利使用,这里首先介绍其中的几个基本概念。

地域(Region)

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

项目(Project)

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

日志库(Logstore)

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

日志(Log)

日志为 Log Service 中处理的最小数据单元。Log Service 采用半结构数据模式定义一条日志,具体数据模型如下:

  • 主题(Topic):用户自定义字段,用以标记一批日志(例如:访问日志根据不同的站点进行标记)。默认该字段为空字符串(空字符串也为一个有效的主题)。
  • 时间(Time):日志中保留字段,用以表示日志产生的时间(精度为秒,从 1970-1-1 00:00:00 UTC 计算起的秒数),一般由日志中的时间直接生成。
  • 内容(Content):用以记录日志的具体内容。内容部分由一个或多个内容项组成,每一个内容项由 Key、Value 对组成。
  • 来源(Source):日志的来源地,例如产生该日志机器的 IP 地址。默认该字段为空。

与此同时,Log Service 对日志各字段的取值有不同要求,具体如下表描述:

数据域 要求
time 整型,Unix 标准时间格式,最小单位为秒
topic 任意不超过 128 字节的 UTF-8 编码字符串
source 任意不超过 128 字节的 UTF-8 编码字符串
content 一个或多个 Key-Value 对。其中,Key 为仅包含字母、下划线、数字,不以数字开头,不超过 128 字节的 UTF-8 编码字符串。Value 为不超过 1024*1024 字节的任意 UTF-8 编码字符串

上表 content 中的 key 不可以使用如下关键字:__time____source____topic__, __partition_time___extract_others_, __extract_others__

日志主题(Topic)

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

注意:空字符串是一个有效的日志主题(Topic),默认的日志主题都是空字符串。

下图描述了日志库、日志主题和日志之间的关系:

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

  1. 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"

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

数据域 内容 说明
topic “” 沿用默认值(空字符串)
time 1330589527 日志产生的精确时间(精确到秒),从原始日志中的时间戳转换而来
source “10.249.201.117” 使用服务器 IP 地址作为日志源
content Key-Value 对 日志具体内容

用户可以自己决定如何提取日志原始内容并组合成 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 Firef

Logs

由多条日志产生的集合。

LogGroup

一组日志的集合。

LogGroupList

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

编码方式

系统目前支持以下内容编码方式(将来可扩展),Restful API 层通过 Content-Type 表示。

含义 Content-Type
ProtoBuf ProtoBuf 对数据模型进行编码 application/x-protobuf

以下 PB 定义了数据模型中的对象:

  1. message Log
  2. {
  3. required uint32 Time = 1;// UNIX Time Format
  4. message Content
  5. {
  6. required string Key = 1;
  7. required string Value = 2;
  8. }
  9. repeated Content Contents= 2;
  10. }
  11. message LogGroup
  12. {
  13. repeated Log Logs= 1;
  14. optional string Reserved = 2; // reserved fields
  15. optional string Topic = 3;
  16. optional string Source = 4;
  17. }
  18. message LogGroupList
  19. {
  20. repeated LogGroup logGroupList = 1;
  21. }

注意:由于 PB 对 KeyValue 对不要求唯一性,因此需要避免出现该情况,否则行为为未定义。

本文导读目录