【阿里云产品公测】简单日志服务SLS使用评测 + 教程

【阿里云产品公测】简单日志服务SLS使用评测 + 教程

评测介绍

  • 被测产品: 简单日志服务SLS
  • 评测环境: 阿里云基础ECS x2(1核, 512M, 1M)
  • 操作系统: CentOS 6.5 x64
  • 日志环境: Nginx(v1.6.2) HTTP服务器访问日志、服务器系统日志
  • 评测人: mr_wid
  • 评测时间: 2014年9月28日-2014年10月8日

准备工作

一、知彼知己, 百战不殆。对产品的了解程度, 直接决定着评测质量, 在评测前, 笔者首先整理并详细阅读了有关SLS产品以及关联产品的官方相关文档:

二、Nginx HTTP服务器准备:

在真实的HTTP服务器应用场景中, 为了降低磁盘I/O、单一宽带下的访问瓶颈限制, 通常会将图片、静态文件与用户访问的主服务器进行服务器分离, 从而提高网站响应速度与负载能力。 在本次的评测中, 使用了两台基础 ECS 服务器, 将其中一台作为图片服务器, 另一台作为用户访问的主服务器进行测试。 这两台服务器的环境配置如下:

  • 主服务器: CentOS + Nginx + MySQL + PHP
  • 图片服务器: CentOS + Nginx

SLS使用起步

一、创建Access Key

在 SLS 服务中, 由于 SLS 客户端 Logtail 与 SLS 的SDK 均需要Access Key的支持, 所以需要保证云服务器所在账号下至少存在一个启用状态的AccessKey, 创建Access Key的过程:

登录阿里云官网(http://www.aliyun.com/), 进入"用户中心" -> "我的服务" 页面, 在左侧栏 "安全认证"(https://i.aliyun.com/access_key/) 页面即可创建本账号下的Access Key, 如图: 
 
其中, Access Key ID 与 Access Key Secret 即组成一对Access Key。

二、创建SLS项目

在SLS控制面板, 选择 "创建Project" 并输入项目名称, 如图所示创建一个名为 "sls-test-project" 的SLS项目。



创建完成后如图: 
 

三、创建SLS项目日志分类

SLS日志类型(Category), 即对所要监测的日志进行分类, 分类规则应至少遵循同一分类下的日志具有相同的日志格式这一规则。

以 Nginx 的 Access Log 日志为例, 创建名为 "nginx-access-log" 的SLS日志类型。进入上一步创建的 "sls-test-project" SLS项目管理页, 选择 "创建Category", 如图: 
 
在日志数据消费模式选项, 为了更全面的评测SLS, 我们将离线归档到ODPS选项也勾选上。点击 "确定", 创建完成后将会提示是通过 Logtail 客户端收集日志还是通过SLS的SDK API 


Logtail 是一个运行在 UNIX/Linux 上的日志收集程序, API可以通过SLS提供的API对日志进行写入、查询等操作。这里我们选择 创建Logtail配置。


在指定日志目录结构这一步, 根据服务器的配置填入nginx的日志路径, 由于nginx自身并不会对日志文件进行分割, 所以这里仅监控 access.log 文件。对于自动分割型日志, 可用通配符进行监控, 如日志被分割为 access.log、access-1.log、access-2.log、..., 使用通配符 access*.log
在日志样例项, 可以从已有的日志文件中随机抽取一条或多条日志, 进入下一步。


在解析日志这一步, 需要用到正则表达式来对日志进行结构划分, 在这之前, 首先来看一下Nginx的详细日志结构, 在 nginx.conf 里可以通过自己的需求对日志样式进行自定义, 这里的配置如下:

	log_format main $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent";
			

对应着示例中的日志, 对这条配置文件进行下解释:

日志字段 与样例中对应部分 字段解释
$remote_addr 113.64.66.49 客户端的ip地址
- - 仅作分隔符
$remote_user - 客户端用户名称
[$time_local] [17/Aug/2014:15:24:13 +0800] 访问请求时间
"$request" "GET /article/centos-64bit-nginx-php-fastcgi-opcache-mariadb HTTP/1.1" 记录请求方式、请求的url与所用http协议
$status 200 请求响应状态
$body_bytes_sent 35177 响应主体大小
"$http_referer" "http://www.x86pro.com/" 请求来源页面地址(从哪个页面链接访问过来的)
"$http_user_agent" "Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Firefox/24.0" 用户客户端相关信息

匹配日志各字段的正则表达式规则如下: 
^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s-\s(.*)\s\[(.*)\]\s\"(.*)\"\s(\d{3,})\s(\d+)\s\"([^\s]*)\"\s\"(.*)\"$ 
关于正则表达式, 这里需要一些正则的基础, 对正则不是很熟悉的同学, 建议参考相关的文章对正则表达式有个大致的理解, 推荐《正则表达式30分钟入门教程》, 这里仅解释一下与这条正则有关的部分:

^ 匹配字符串的开始
$ 匹配字符串的结束
() 将括号内的部分作为一个整体
\ 转义符
\d 匹配一个数字
{m,n} 重复匹配 m 到 n 次, 例 \d{1,3} : 匹配长度为 1-3 的数字
\s 匹配任意空白符, 如普通空格、\t、\n、\r
. 匹配除换行符以外的任意字符
+ 重复一次或更多次

在 时间格式转换项, 由于软件写入的日志时间格式可能不同, 所以需要按照一定的规则, 把时间格式手动转换成SLS能够认识的格式, 详细转换方式以及转换选项参见 简单日志服务 › 常见问题 › 时间格式转换文档。 
接下来的两步, 按照提示创建机器组, 然后应用到机器组就可以了, 这里不再赘述, 过程如图所示: 
 


 

约1分钟后,日志数据开始显示。 
 

SLS日志查询

在如图所示的搜索栏中, 即可执行SLS查询语句, 示例语句: 查询15分钟内所有响应状态为 404 的请求:


 
从示例的查询结果中 request 字段可以看到, 内网IP为10.168.68.10的网站根目录下缺少 robots.txt文件, 10.168.63.86图片服务器缺失 /images/productimages/frontcol.jpg 文件, 从而产生了404, 针对这些有问题的404的页面, 我们就可以及时对其进行改进。如果再结合SLS提供的逻辑查询语法, 对日志的常规分析可谓是变得十分轻松便捷。

对查询语句的说明: 在 "status 404" 查询语句中, 表示要被查询的日志项中, 既有 ‘status‘ 关键字, 也有 ‘404‘ 关键字, 这是按关键字匹配, 并且被搜索的关键字不区分大小写, 并不是指 ‘status‘ 的值为 ‘404‘ 的日志, 这一点十分重要, 不要误解。

那么在 "status 404", 的搜索结果中, 是否全部都是 status 为 404 的结果呢? 答案是否定的, 例如在某日志中 body_bytes_sent 为 404, 那么该日志同样会被检索显示出来。 如图: 
 

这并不是bug, 而是笔者最初时的理解有误, 认为 status 404 就会在所以日志的 status 字段中查找(实际上在这里加或不加 status 关键字对结果并无影响, 笔者仅为了说明这个问题), 针对这点, 笔者也会在评测的最后提出相关的建议, 建议增加相关的查询规则, 这里暂且按下不表。

SLS日志查询语句语法目前保留的关键字有andornot(不区分大小写) 以及 小括号()、双引号 " 与反斜杠 \ , 并且这些关键词具有优先级之分, 优先级的顺序为 " > ( ) > and notor, (and 与 not 为同级), 优先级的高低决定着关键字之间查询的结合方向。这类似于加减乘除四则运算中, 当加减同时出现在一个式子中时先算乘除法, 再算加减法, 若有括号, 先算括号里面的,对于这些查询关键词的用法, 可以用一些示例来说明:

查询状态为404的页面, 并且被请求资源为 robots.txt 的日志: 404 and robots.txt 
查询用户浏览器类型为火狐或Chrome的日志: Firefox or Chrome 
查询请求响应状态码除 200 和 304 外的日志: not 200 not 304

双引号 " 的用法: 用一对双引号括起来的内容表示一个字符串, 任何在字符串内的内容, 都将被当做一个整体, 可用来转义关键字, 如: 
查询日志中含有 and 字符的日志: "and"

转义符 \ 的用法: \ 用来转义关键字中的双引号 ", 单单一个 " 则为SLS查询语法中的关键字, 但加上 \" 进行转义后, 便表示双引号自身, 示例用法: 
查询所有请求中带 双引号 的日志: \"

日志的关键字在哪

在上面多次提到SLS是按关键字进行查询的, 并且这个关键字由SLS自动划分, 目前无法手动干预, 那么如何才能知道自己搜索的是不是关键字就成了搜索时所遇到的问题, 根据笔者的测试, 在日志结果中, 将鼠标移动到搜索结果上, 能显示为手型的部分, 即为一个独立的关键字, 如图: 
 

只有了解了这点, 才能更好的使用查询, 举例来说, 当我们想搜索来源于 Google 的请求, 假设Google的蜘蛛都来自 http://www.google.com/, 那么我们搜索 google 或 google.com 是不能正确的显示出预期的结果的, 因为 google 和 google.com 并没有被SLS划分为关键字, www.google.com 才是正确的关键字。

关于 Topic

日志离线归档到ODPS

在配置 SLS日志数据消费模式时, 当勾选了离线归档到ODPS, 日志数据就会自动归档到ODPS的 sls_log_archive 项目中, 然后我们可方便的对日志数据进行下载、备份、数据分析等操作。

由于该项目是系统项目, 并不会显示在ODPS的控制面板项目列表中, 需要通过 ODPS 客户端、 ODPS 上传下载客户端 进行操作, ODPS客户端目前提供的是JAVA版本, 需要JAVA的JRE环境支持, 所以如果没有安装JRE环境的, 需要先安装JRE运行环境才能使用,官方文档中推荐 JRE 1.6(http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html#jre-6u45-oth-JPR)。除客户端外, ODPS同样也支持通过JAVA SDK API进行编程化操作。ODPS Java SDK开发包

完整的 ODPS 参考文档见 ODPS用户手册

配置ODPS客户端

将下载的OSPD客户端 odps-cli-java.zip 解压后, 进入 conf 目录, 编辑配置文件 odps.conf, 填入一组创建Access Key中生成的 Access Key ID 与 Access Key Secret, 并指定默认ODPS项目

access.id=你的 Access Key ID
access.key=你的 Access Key Secret
endpoint=http://service.odps.aliyun.com/api
default.project=sls_log_archive
			

配置完成后, 进入ODPS的bin目录, Windows系统执行 odps.bat, Linux执行odps, 以Windows环境为例, 直接双击 odps.bat 即可 进入ODPS命令行操作界面: 

配置ODPS上传下载客户端

将下载的 odps-dship.zip 解压, 笔者的解压路径为 D:\SlsEnv\odps-dship, 进入odps-dship目录, 编辑 odps.conf

#Odps dship config
#Wed Oct 08 13:39:54 CST 2014
tunnel-endpoint=http://dt.odps.aliyun.com (杭州节点内网对内网可用 http://dt-ext.odps.aliyun-inc.com)
key=你的 Access Key Secret
project=sls_log_archive (默认项目)
id=你的 Access Key ID
		

tunnel-endpoint配置说明参见: ODPS数据上传下载相关问题 > 使用ODPS tunnel或者dship下载数据时,如何设置endpoint更合理?

打开命令提示符, 切换到 odps-dship 目录下, 执行 Windows 执行dship.bat, Linux执行dship, 如图: 
 

查看 sls_log_archive 项目中指定表的信息

以创建的示例日志分组 nginx-access-log 为例, 该分组在ODPS中的表名称为 sls_test_project_nginx_access_log (Project名+Category名), 在ODPS命令行中, 命令:
desc sls_test_project_nginx_access_log 
 

表中各列的介绍(摘自文档)

序号 列名 类型 备注
1 __source__ string 日志来源IP,SLS保留字段
2 __time__ bigint 日志产生的UNIX时间戳,SLS保留字段
3 __topic__ string 日志topic,SLS保留字段
4 _extract_others_ string Json字符串,半结构化的用户日志以key:value形式保存到该列
5 __partition_time__ string(pt) 可读的日期格式,分区列,由__time__计算得到,例如2014_06_24_12_00

这里有一点需要注意的是, 表中的 __partition_time__ 字段, 这是一个"分区"字段, 可以类似理解为一个独立的文件夹, 并且命名方式是以 2014_10_08_12_00 的形式, 以小时为单位递增, 稍后在使用上传下载工具下载日志数据时, 将会用到该字段。

按 __partition_time__ 分区下载日志数据

odps的上传下载工具, 目前只支持下载到单个文件, 并且每一次下载只支持下载一个表或一个分区到一个文件, 有分区的表必须要指定下载的分区才能正常下载。示例, 下载2014年10月7日20时的SLS nginx_access_log 分类中的日志数据并命名为 access_log_1410072000.txt:

dship download sls_log_archive.sls_test_project_nginx_access_log/__partition_time__="2014_10_07_20_00" access_log_1410072000.txt 

为了提高下载效率以及完成批量下载等操作, 建议使用ODPS的SDK进行编出化下载, 或者编写可执行脚本, 如bat、Python等, 用脚本调用ODPS的命令来实现。

查看原文:http://bbs.aliyun.com/read/178909.html

微博互动:http://weibo.com/1644971875/Br41E1xSE#_rnd1413011556756
参加活动:http://promotion.aliyun.com/act/aliyun/freebeta/

时间: 2024-10-08 09:04:20

【阿里云产品公测】简单日志服务SLS使用评测 + 教程的相关文章

【阿里云产品公测】Opensearch使用体验和评测

作者:阿里云用户outofmemory 昨天晚上收到了阿里云发的邮件,Open search可以申请公测了,于是迫不及待申请了测试,审核人员很高效,过了不到俩小时给批下来了.  很开心,于是趁今天是周末,得把“outofmemory.cn”的全文检索,用open search实现一下. 汗! 之前用python实现的全文检索不是很稳定. 早上开工,先按照公测通过邮件的说明,新建了搜索应用,并做了激活.新建的搜索应用名称是“search4oom”, 意思是为outofmemory新建的搜索应用.

【阿里云产品公测】利用PTS服务优化网站数据库读写性能

[阿里云产品公测]利用PTS服务优化网站数据库读写性能 作者:阿里云用户千鸟 写这个帖子主要也是因为在用PTS测试网站的时候,手动访问网站进入报错页面,主要原因是数据库连接对象存在问题,导致并发多的时候产生故障,于是简单分析了一下数据库读写的性能优化以及利用PTS的测试结果,整理出来和大家分享一下,顺便参加一下这个活动.        几乎所有的网站都需要数据库来存储网站中的相关信息,因此在网站应用与数据库的交互过程中,数据库数据读取的性能对网站整体的性能是至关重要的. ?      通常我们在

【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验

[阿里云产品公测]结构化数据服务OTS之JavaSDK初体验 作者:阿里云用户蓝色之鹰 一.OTS简单介绍 OTS 是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存储和实时访问.NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展.OTS应用程序可以使用阿

【阿里云产品公测】简单粗暴30S完成PTS测试配置附tornado服务器测试结果

作者:阿里云用户morenocjm [阿里云产品公测]简单粗暴 30S完成PTS测试配置(附tornado服务器测试结果) -------------------------------------------------------------------------------------------- 如果你想了解自己服务器,性能测试当然是不能少的. 使用PTS测试并不需要自己编写脚本, 简单的操作界面以及合理的菜单确实便于操作, 真的只要几十秒的操作就能让你了解你的服务器负载能力了.  

【阿里云产品公测】大数据下精确快速搜索OpenSearch

[阿里云产品公测]大数据下精确快速搜索OpenSearch 作者:阿里云用户小柒2012 相信做过一两个项目的人都会遇到上级要求做一个类似百度或者谷歌的站内搜索功能.传统的sql查询只能使用like 或者FIND_IN_SET来实现.后者性能稍微好点但是必须要逗号分隔才可以实现匹配.甚至多条件的话还可能用到OR这是极影响系统性能的. 最近公司项目需要.主要是系统查询缓慢.并且查询精度不敢恭维.一开始想到的是Lucene 毕竟是一个开放源代码的全文检索引擎工具包 并且官方还在持续更新中.当时闲暇时

【阿里云产品公测】阿里云ACE部署通用完整教程及评测

[阿里云产品公测]阿里云ACE部署通用完整教程及评测 作者:阿里云用户bailimei ACE应该是目前在公测的服务中应用最广泛的一项服务.在公测云引擎ACE前曾使用过新浪SAE,而ACE给我的最初印象是比SAE要简单易用的多,除了上传文件需用SVN外,其它就像在用ECS+RDS,体验上没多大差别,因我现在就用着这两项产品,所以感觉比较直观.原先已有同学写了一些优秀的ACE教程,对分享自己的体验我们都应该点赞.下面以测试部署wordpress为例,重点对ACE使用过程中遇到的难点问题展开说明,并

【阿里云产品公测】云引擎ACE新手实战基于Wordpress

[阿里云产品公测]云引擎ACE新手实战基于Wordpress 作者:阿里云用户imnpc ACE(Aliyun Cloud Engine) 是一款弹性.分布式的应用托管环境,支持Java.php多种语言环境.帮助开发者快速开发和部署服务端应用程序,并且简化了系统维护工作.搭载了丰富的分布式扩展服务,为应用程序提供强大助力. ACE(Aliyun Cloud Engine)目前最大的优点就是免费,预计以后也会照着SAE JAE等同类服务提供低廉的收费政策. 一般来说我们用于云平台的很多人都是简单安

【阿里云产品公测】离线归档OAS,再也不用担心备份空间了

[阿里云产品公测]离线归档OAS,再也不用担心备份空间了 作者:阿里云用户莫须有3i 1 起步  1.1 初识OAS  啥是OAS,请看官方说明: 引用: 开放归档服务(Open Archive Service,简称OAS),致力于提供低成本.高可靠的数据归档服务,适合于大数据的长久归档备份. 低成本.高可靠,长久归档备份,这是它的特色.  1.2 申请开通 当前还处于公测阶段,需要申请,试用期间,免费试用,每个用户可以存储不超过10T的数据,并且文件数量不超过10万个,大伙有什么超大文件,没地

【阿里云产品公测】PTS压力测试WP站搜索

[阿里云产品公测]PTS压力测试WP站搜索 作者:阿里云用户cnsjw PTS性能测试服务是一个非常非常强大的压力测试工具.可以模拟百人同时访问网站的情况,并监测ECS和RDS的各项指标,生成非常详细的报告.可以自由设定各种测试脚本,场景以及任务,并让任务计划执行,只要在执行之后过来查看报告就可以了~~~ 首先第一步就是要先选择要测试的服务器,这里选择了在杭州的ECS和RDS服务. 打算测试的是搜索功能,随意设置了10个关键词,顺序执行测试. 首先先要新建一个测试脚本: 参数是一个CSV文件,然