使用Amazon Redshift分析弹性负载均衡器(Elastic Load Balancer)访问日志

通过使用Elastic Load Balancing(ELB)访问日志,管理员拥有大量的数据来描述通过ELB的流量。虽然搭配Amazon Elastic MapReduce(Amazon EMR)和相关工具也可以对ELB持续产生的大量日志数据进行分析,但是这里还存在一些数据和分析技巧。大部分情况下,分析ELB日志是为了处理一些错误,因此这些快速分析TB级日志的技巧对于技术团队来说至关重要。

幸运的是,搭建Amazon Redshift集群来加载ELB访问日志并使用SQL查询进行分析非常简单。本文将介绍如何使用Amazon Redshift便捷地分析这些日志数据,无论是临时用来响应一个事件,或者是进行周期性的分析。不管是TB或者是PB数据,通过Amazon Redshift都可以快速的提供一个数据仓库集群,并行的存入大量数据,并通过ODBC/JDBC PostgreSQL接口访问,因此对于ELB日志分析来说,Amazon Redshift是一个相当不错的SQL-based解决方案。如果你有大量的 Amazon EMR使用经验,并且喜欢使用MapReduce风格来分析你的数据,Amazon已经提供了一个将ELB日志加载到EMR的向导。

确定你的日志文件

第一步,确定你期望分析的日志,并设置适当大小的 Amazon EMR集群进行保存,这主要决定于你需求分析的周期时间,下面这些步骤可以帮助你确定对应的日志文件。在Amazon ELB日志保存的Simple Storage Service (Amazon S3) bucket中,你可以发现下图这个目录记录:

图1

从图1,能了解到2014年3月5日East区域的日志可以在以下目录找到:

s3://corporation-com-elb-logs/AWSLogs/515290123456/elasticloadbalancing/us-east-1/2014/03/05

因此,你可以使用以下目录来指定3月份East区域的所有日志

s3://corporation-com-elb-logs/AWSLogs/515290123456/elasticloadbalancing/us-east-1/2014/03

在每天的文件中,都存在一个以上的对象。为了获取文件夹的大小,你既可以使用控制台手动地添加所有对象的大小,也可以使用下面这个CLI命令(使用bucket name替换掉下面这个yourbucket,以及使用account number替换掉youraccount#):

aws s3 ls s3://yourbucket/AWSLogs/youraccount#/elasticloadbalancing/us-east-1/2014/03/16--recursive | grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'

使用下面命令来确定3月日志文件的大小:

aws s3 ls s3://yourbucket/AWSLogs/youraccount#/elasticloadbalancing/us-east-1/2014/03--recursive | grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'

无论使用什么方法,必须计算出你需要加载数据的大小。

发布一个Amazon Redshift集群

下一步,你需要设置Amazon Redshift集群来保存弹性负载均衡器的访问日志数据。首先,你需要登入AWS控制台,并且从服务菜单中选择Redshift。

图2

作为发布集群的一部分,你必须建立一个安全组(security group ),它将允许你使用SQL客户端访问数据时阻断其他所有流量。从一个指定的CIDR块或者Amazon Elastic Cloud Compute (Amazon EC2)安全组,安全组可以访问你的Amazon Redshift集群。下一步就是安装SQL客户端,确定一个主机然后创建恰当的安全组规则。如果你期望在Amazon EC2 实例上安装安全组,你需要保护这个实例的安全组。如果你希望从本地工作站中运行,你需要这个工作站在网络中的IP地址(或者IP范围)。

在识别你的客户端主机后,在Amazon Redshift页面左边菜单中点击Security按钮,然后在Security Groups标签中,点击蓝色的Create Cluster Security Group按钮。

图3

在Cluster Security Group对话框中,建立下表中的字段:

表格1

完成上面这个操作后,点击建立。

图4

安全组最初会阻断所有流量。你必须建立一个规则,从而为需要使用的集群允许指定的传输。为你的新组选择指定的类型,然后在下拉框Connection Type中选择CIDR/IP。

图5

在下一个界面中,填写如下字段:

表格2

填好字段后,点击Authorize。

图6

注意:之前的指令通过IP地址(不管是本地工作站,还是Amazon EC2实例)确定了你的SQL客户端。如果你使用的是一个Amazon EC2实例,给实例分配一个安全组可以通过在Connection Type下拉框中选择EC2 Security Group来完成。

到这里,安全组建立完成后,是时候建立你的集群了。在左边的菜单栏中点击Clusters链接,在下一个界面,点击蓝色的Launch Cluster按钮。

图7

在集群详情页面中,填写好下表的字段:

表格3

在填好所需字段后,点击下一步。

图8

在Review界面中,检查你的设置。同时,在集群发布前,你还可以看到费率。如果所有设置正确,你对费率也比较满意,点击Launch Cluster发布你的集群。

表格4

你的集群需要几分钟来发布,一旦集群建立,下一步则需要设置PostgreSQL客户端。

设置PostgreSQL客户端

为了操作你的Amazon Redshift集群(举个例子,建立表格、导入数据以及做查询),你需要建立一个PostgreSQL客户端。这里有几个选项,比如:

RazorSQL:一个具有30天试用期的产品,内置JDBC驱动。(http://www.razorsql.com)

SQL Workbench/J:一个免费的PostgreSQL客户端。AWS提供了建立PostgreSQL客户端的向导。(滚屏以Install SQL Client和Drivers)

将ELB日志导入Amazon Redshift

回到Amazon Redshift主页(在Services页面中点击Redshift),并点击左边菜单中的Clusters按钮。当你的集群就绪后,Cluster Status会显示“就绪”字样。

图9

如果想浏览你的集群详情,点击集群名称边上的 Info图标来打开如下界面。

表格5

这个页面上的重点信息是访问数据库的JDBC和ODBC URLs(上图高亮了JDBC)。

打开你的Amazon Redshift客户端,随后打开你可以建立新链接的界面。下面以SQL Workbench/J为例,但是使用其他心仪的SQL客户端也不会有难度。在下图,注意显示Cluster Details的页面。URL字段包含了上面Cluster Info屏幕我们说到的JDBC URL。通过这些指派来打开Amazon Redshift集群的一个会话。

图10

在连接到你的Amazon Redshift后,你可以通过PostgreSQL和Amazon Redshift指令来操纵它。首先,建立一个表格,用它来保存访问数据。使用如下的CREAT TABLE命令来建立表格:

CREATE TABLE elb_logs ( RequestTime DateTime encode lzo, ELBName varchar(30) encode lzo, RequestIP_Port varchar(22) encode lzo, BackendIP_Port varchar(22) encode lzo, RequestProcessingTime FLOAT encode bytedict, BackendProcessingTime FLOAT encode bytedict, ClientResponseTime FLOAT encode bytedict, ELBResponseCode varchar(3) encode lzo, BackendResponseCode varchar(3) encode lzo, ReceivedBytes BIGINT encode lzo, SentBytes BIGINT encode lzo, Verb varchar(10) encode lzo, URL varchar(2083) encode lzo, HttpVersion varchar(10) encode lzo)sortkey(RequestTime) ;

注意:上图的代码指定了每个数据列的压缩方式。在以后设计表格的过程中,Amazon Redshift的COPY命令在第一次加载时可以为每列自动选择适当的压缩算法,这个操作基于你输入的样本。

在表格建立好后,将你的ELB数据导入。这里你可以使用COPY命令来利用并行加载数据特性,COPY命令会根据你定义的文件规范导入多个文件。这里有一些示例:

Include all the logs for March 16, 2014:s3://yourbucket/AWSLogs/youraccount#/elasticloadbalancing/us-east-1/2014/03/16Include all the logs for March 2014:s3://yourbucket/AWSLogs/youraccount#/elasticloadbalancing/us-east-1/2014/03

如果想加载指定两天的数据,你必须运行COPY命令两次,每天都有一个文件规范。使用下面的COPY命令可以加载对应文件的数据:

copy elb_logsfrom 's3://yourfilespec'COMPUPDATE OFFCREDENTIALS 'aws_access_key_id=yourkey;aws_secret_access_key=yoursecretkey'delimiter ' 'TIMEFORMAT as 'auto'ACCEPTINVCHARSMAXERROR as 100000

COPY命令会以最快的速度将数据导入Amazon Redshift中,你需要进行以下两步来优化你的查询性能。两个命令如下:

VACUUM elb_logs;ANALYZE elb_logs;

在第一次加载后,VACUUM命令不是必须被运行,但是请保持这个习惯。做完这步,你的数据已经加载到Amazon Redshift数据仓库中,分析就绪。

分析你的数据

你可以使用任何PostgreSQL查询来检查你表格中的数据。为了帮助你开始,这里有一些简单的例子:

查询在两个时间内的所有访问请求:

select RequestTime, URL, RequestIP_Port, to_char(BackendProcessingTime, 'FM90D99999999') BackendTimefrom elb_logswhere requesttime >= cast('2014-03-18 03:00:00' as DateTime) and requesttime < cast('2014-03-18 04:00:00' as DateTime)

获得10个最慢的请求:

select top 10 RequestTime, ELBName, RequestIP_Port, BackendIP_Port, to_char(RequestProcessingTime, 'FM90D99999999') RequestTime, to_char(BackendProcessingTime,'FM90D99999999') BackendTime, to_char(ClientResponseTime, 'FM90D99999999') ClientResponseTime, ELBResponseCode, BackendResponseCode, ReceivedBytes, SentBytes, Verb, URL, HttpVersionfrom elb_logsorder by BackendTime desc总结

通过非常快的几部,你建立了一个数据仓库,并用大量的访问请求数据进行填充,随后运行查询以分析ELB流量的状况。在数据分析之后,记得删除集群以避免更多额外的开销。如你所见,再次分析时,集群建立非常容易。

如果你有问题或者建议,请在评论中书写。

原文链接:http://blogs.aws.amazon.com/bigdata/post/Tx2Z5UY685A20PL/Using-Amazon-Redshift-to-Analyze-Your-Elastic-Load-Balancer-Traffic-Logs

如您需要了解AWS最新资讯或是技术文档可访问AWS中文技术社区;如您有更多的疑问请在AWS技术论坛提出,稍后会有专家进行答疑。

订阅“AWS中文技术社区”微信公众号,实时掌握AWS技术及产品消息!

AWS中文技术社区为广大开发者提供了一个Amazon Web Service技术交流平台,推送AWS最新资讯、技术视频、技术文档、精彩技术博文等相关精彩内容,更有AWS社区专家与您直接沟通交流!快加入AWS中文技术社区,更快更好的了解AWS云计算技术。

(译者/薛童阳 责编/王玉平)

时间: 2024-10-02 09:43:42

使用Amazon Redshift分析弹性负载均衡器(Elastic Load Balancer)访问日志的相关文章

10分钟精通Nginx访问日志分析统计

简介 很多个人站长在搭建网站时使用nginx作为服务器,为了了解网站的访问情况,一般有两种手段: 使用CNZZ之类的方式,在前端页面插入js,用户访问的时候触发js,记录访问请求. 利用流计算.或离线统计分析nginx的access log,从日志中挖掘有用信息. 两种方式各有优缺点: CNZZ使用起来比较简单,各种指标定义清楚.但这种方式只能记录页面的访问请求,像ajax之类的请求是无法记录的,还有爬虫信息也不会记录. 利用流计算.离线计算引擎可以支持个性化需求,但需要搭建一套环境,并且在实时

python分析nignx访问日志脚本分享_python

#!/usr/bin/env python # coding=utf-8 #------------------------------------------------------ # Name: nginx 日志分析脚本 # Purpose: 此脚本只用来分析nginx的访问日志 # Version: 1.0 # Author: LEO # Created: 2013-05-07 # Modified: 2013-05-07 # Copyright: (c) LEO 2013 #-----

nginx as Database Load Balancer for MySQL or MariaDB Galera Cluster

原文链接 Nginx is well-known for its ability to act as a reverse-proxy with small memory footprint. It usually sits in the front-end web tier to redirect connections to available backend services, provided these passed some health checks. Using a reverse

网站被挂马,请朋友们帮忙分析一下漏洞.已上传IIS日志

问题描述 网站被挂马,请朋友们帮忙分析一下漏洞.现在我把IIS日志发出来,希望懂的朋友们,尽量帮忙看看,鄙人不甚感激.IIS日志#Software:MicrosoftInternetInformationServices6.0#Version:1.0#Date:2012-10-1510:11:04#Fields:datetimes-sitenames-ipcs-methodcs-uri-stemcs-uri-querys-portcs-usernamec-ipcs(User-Agent)sc-s

Zen Load Balancer v2 stable发布 TCP负载平衡设备

Zen Load Balancer 是一个基于http://www.aliyun.com/zixun/aggregation/33836.html">Debian来创建一个TCP负载平衡的设备.其工作原理是自定义脚本来检查后端的运行状态,创建一个Zen主动/被动的集群达到高可用性,RRD监控服务器的状态,查看TCP的信息,通过HTTPS的用户界面来轻松执行性能管理和路由配置以及等等. Zen Load Balancer v2 stable该版本修正了一些错误,增加了一些改进. 软件信息:h

python分析apache访问日志脚本分享_python

#!/usr/bin/env python # coding=utf-8 #------------------------------------------------------ # Name: Apache 日志分析脚本 # Purpose: 此脚本只用来分析Apache的访问日志 # Version: 2.0 # Author: LEO # Created: 2013-4-26 # Modified: 2013-5-4 # Copyright: (c) LEO 2013 #------

Zen Load Balancer v1 stable发布 TCP负载平衡设备

Zen Load Balancer是一个基于http://www.aliyun.com/zixun/aggregation/33836.html">Debian来创建一个TCP负载平衡的设备.其工作原理是自定义脚本来检查后端的运行状态,创建一个Zen主动/被动的集群达到高可用性,RRD监控服务器的状态,查看TCP的信息,通过HTTPS的用户界面来轻松执行性能管理和路由配置以及等等. Zen Load Balancer v1 stable此版本修复了群集配置SSH验证的一个错误,修改了全局视

Test Load Balancer 测试均衡负载

什么是Test Load Balancer ? Test Load Balancer 测试分发工具,它能把所有的测试按照某个策略(数量.时间)均衡分布到不同的计算机上运行. 问题域? 一个典型的问题,当软件开发团队在做CI(持续集成)时,必须让CI的构建时间保持在一个合理的时间,比如10分钟为一个上线,但是由于需求的不断增多测试的数量也随之增加,花费在运行这些测试的时间越来越多,影响到了整个交付团队的进度.为了尽可能的缩短交付周期时间,减少测试的运行时间,一个行之有效的方法就是让测试并行执行.

Load balancer does not have available server for client

  最近在研究spring-cloud,研究zuul组件时发生下列错误: Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: zuul-server  解决办法就是在pom文件里添加  <dependency> <groupId>org.springframework.cloud</groupId> <arti