162
小米MIX
核心概念__基础概念_用户指南_日志服务-阿里云
半世纪前说起日志,想到的是船长、操作员手里厚厚的笔记。如今计算机诞生使得日志产生与消费无处不在:服务器、路由器、传感器、GPS、订单、及各种IoT设备通过不同角度描述着我们生活的世界。借助于计算力量,通过收集、处理、使用日志,我们不断更新对整个世界以及体系的认知。
日志是什么?
从船长日志中我们可以发现,日志除了带一个记录的时间戳外,可以包含几乎任意的内容,例如:一段记录文字、一张图片、天气状况、船行方向等。几个世纪过去了,“船长日志”的方式已经扩展到一笔订单、一项付款记录、一次用户访问、一次数据库操作等多样的领域。
日志这种广泛使用模式之所以经久不衰,在于:“日志是一种简单的不能再简单的存储抽象”。它是一个只能增加的,完全按照时间排序的一系列记录。日志(时间序列数据)看起来如下:
我们可以给日志末尾添加记录,并且可以从左到右读取日志记录。每一条记录都指定了一个唯一的有一定顺序的日志记录编号。
日志顺序由“时间”来确定,从图上可以看到日志从右到左的时间顺序,新产生的事件被记录,过去的事件渐渐远去,但它记录了什么时间发生了什么事情,这无论对于计算机、人类、还是整个世界而言,是认知与推理的基础。
核心概念
为方便理解整个日志服务服务并顺利使用,这里首先介绍其中的几个基本概念。
地域(Region)
地域为阿里云的服务节点。用户通过在不同的阿里云Region部署服务,让自己的服务距离客户更近,获得更低的访问延时及更好的用户体验。目前阿里云在全国各地拥有多个Region。
项目(Project)
项目为日志服务中的基本管理单元,用于资源隔离和控制。用户可以通过项目来管理某一个应用的所有日志及相关的日志源。
日志库(Logstore)
日志库为日志服务中日志数据的收集、存储和查询单元。每个日志库隶属于一个项目,且每个项目可以创建多个日志库。用户可以根据实际需求为某一个项目生成多个日志库,其中常见的做法是为一个应用中的每类日志创建一个独立的日志库。例如,假如用户有一个“big-game”游戏应用,服务器上有三种日志:操作日志(operation_log),应用程序日志(application_log)以及访问日志(access_log),用户可以首先创建名为“big-game”的项目,然后在该项目下面为这三种日志创建三个日志库,分别用于它们的收集、存储和查询。
分区(Shard)
分区(shard)是每个日志库下读写基本单元,用户可以指定每个日志库下分区数目。每个分区能承载一定量的服务能力:
- 写入:5MB/S,2000次/S
- 读取:10MB/S,100次/S
shard有两种状态:
- readwrite:shard处于可读可写状态
- readonly:shard只能读,不能写
每个shard都是有一个range,取值范围[00000000000000000000000000000000,ffffffffffffffffffffffffffffffff),可用MD5方式来表示,用于支持指定hash key的模式写入,以及shard split和merge操作
- inclusiveBeginKey:shard起始的range key(包含)
- exclusiveEndKey:shard的结束range key(不包含)
在向Shard读写数据过程中,读必须指定对应shard,而写的过程中可以使用负载均衡模式或者指定hash key的模式。负载模式下,每个数据包,随机写入某一个当前可用的shard中,在指定hash key模式下,数据写入shard range包含这个key的shard。
Project/Logstore/Shard 关系:
日志(Log)
日志为日志服务中处理的最小数据单元。日志服务采用半结构数据模式定义一条日志,具体数据模型如下:
- 主题(Topic):用户自定义字段,用以标记一批日志(例如:访问日志根据不同的站点进行标记)。默认该字段为空字符串(空字符串也为一个有效的主题)。
- 时间(Time):日志中保留字段,用以表示日志产生的时间(精度为秒,从1970-1-1 00:00:00 UTC计算起的秒数),一般由日志中的时间直接生成。
- 内容(Content):用以记录日志的具体内容。内容部分由一个或多个内容项组成,每一个内容项由Key、Value对组成。
- 来源(Source):日志的来源地,例如产生该日志机器的IP地址。默认该字段为空。
与此同时,日志服务对日志各字段的取值有不同要求,具体如下表描述:
数据域 | 要求 |
---|---|
time | 整型,Unix标准时间格式,最小单位为秒 |
topic | 任意不超过128字节的字符串 |
source | 任意不超过128字节的字符串 |
content | 一个或多个Key-Value对。其中Key为仅包含字母、下划线、数字,不以数字开头,不超过128字节的UTF-8编码字符串。Value为不超过1024*1024字节的任意字符串 |
上表content中的key不可以使用如下关键字:
__time__
,__source__
,__topic__
,__partition_time__
,_extract_others_
,__extract_others__
日志组(LogGroup)
一组日志的集合,写入与读取的基本单位。日志组限制为:最大4096行日志,或10MB空间。
日志主题(Topic)
一个日志库内的日志可以通过日志主题(Topic)来划分。用户可以在写入时指定日志主题,并在查询时必须指定查询的日志主题。例如,一个平台用户可以使用用户编号作为日志主题写入日志。这样在查询时可利用日志主题让不同用户仅看到自己的日志。如果不需要划分一个日志库内日志,让所有日志使用相同的日志主题即可。
注意:空字符串是一个有效的日志主题(Topic),且无论是写入还是查询日志时,默认的日志主题都是空字符串。所以,如果不需要使用日志主题,最简单的方式就是在写入和查询日志时都使用默认日志主题,即空字符串。
下图描述了日志库、日志主题和日志之间的关系:
实际使用场景中,日志的格式多样。为了帮助理解,以下以一条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 | 日志产生的精确时间(精确到秒),从原始日志中的时间戳转换而来。 |
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 Firefox/10.0.2” |
最后更新:2016-11-23 17:25:44
上一篇:
弹性Web托管如何创建数据库账号和分配权限__产品相关问题_使用问题_弹性 Web 托管-阿里云
下一篇:
项目(Project)__基础概念_用户指南_日志服务-阿里云
WAF排错手册__排错手册_Web 应用防火墙-阿里云
UPDATE__数据操作语言_SQL语法参考_云数据库 OceanBase-阿里云
搜索自定义转码模板__自定义转码模板接口_API使用手册_媒体转码-阿里云
安全组__网络和安全性_产品简介_云服务器 ECS-阿里云
线性回归__示例程序_图模型_大数据计算服务-阿里云
ADSWriter__Writer插件_使用手册_数据集成-阿里云
阿里云、亚马逊竞争云服务市场掀起价格战;沃尔玛发债融资60亿美元,决战亚马逊
配置后端 ECS 实例__快速入门_负载均衡-阿里云
ALIYUN::ECS::InstanceGroupClone__资源列表_资源编排-阿里云
推送消息给android__API列表_OpenAPI 1.0_移动推送-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云