<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>服务器安全维护工作室 &#187; 利用 Kinesis Analytics 实时分析用户访问行为</title>
	<atom:link href="https://www.fuwuqiok.com/tag/%e5%88%a9%e7%94%a8-kinesis-analytics-%e5%ae%9e%e6%97%b6%e5%88%86%e6%9e%90%e7%94%a8%e6%88%b7%e8%ae%bf%e9%97%ae%e8%a1%8c%e4%b8%ba/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.fuwuqiok.com</link>
	<description></description>
	<lastBuildDate>Sun, 01 Mar 2020 07:28:40 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.26</generator>
	<item>
		<title>利用 Kinesis Analytics 实时分析用户访问行为</title>
		<link>https://www.fuwuqiok.com/%e5%88%a9%e7%94%a8-kinesis-analytics-%e5%ae%9e%e6%97%b6%e5%88%86%e6%9e%90%e7%94%a8%e6%88%b7%e8%ae%bf%e9%97%ae%e8%a1%8c%e4%b8%ba/</link>
		<comments>https://www.fuwuqiok.com/%e5%88%a9%e7%94%a8-kinesis-analytics-%e5%ae%9e%e6%97%b6%e5%88%86%e6%9e%90%e7%94%a8%e6%88%b7%e8%ae%bf%e9%97%ae%e8%a1%8c%e4%b8%ba/#comments</comments>
		<pubDate>Wed, 21 Nov 2018 06:22:51 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[服务器代维]]></category>
		<category><![CDATA[服务器维护]]></category>
		<category><![CDATA[服务器运维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[利用 Kinesis Analytics 实时分析用户访问行为]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=3791</guid>
		<description><![CDATA[<p>随着时间的推移，大数据分析一词已经慢慢从一个概念进入到了实际应用的阶段，近年来，越来越多的企业已经不满足于定期 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%88%a9%e7%94%a8-kinesis-analytics-%e5%ae%9e%e6%97%b6%e5%88%86%e6%9e%90%e7%94%a8%e6%88%b7%e8%ae%bf%e9%97%ae%e8%a1%8c%e4%b8%ba/">利用 Kinesis Analytics 实时分析用户访问行为</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>随着时间的推移，大数据分析一词已经慢慢从一个概念进入到了实际应用的阶段，近年来，越来越多的企业已经不满足于定期批量地分析任务，为了更好地利用不断产生的业务数据，做出更快更有效的业务决策，实时数据分析已经成为了诸如电商，网站，交易平台的标准需求。</p>
<p>另一方面，自建实时分析平台无论从成本还是对技术人员的要求都相当巨大，大量的技术人员更喜欢使用SQL而非代码的方式来挖掘数据，基于此，AWS提供的Kinesis Analytics服务很好地满足了用户的需求，通过简单的SQL语句及内置的丰富函数，用户能够快速地搭建起适合自身业务场景的实时分析解决方案，所有的底层设施由AWS来维护，保证服务的高可用性，用户可以把更多地精力放在如何挖掘和分析数据的工作上。</p>
<p>本文以实际的应用场景出发，介绍如何通过使用AWS的服务，实时分析CloudFront的访问日志，同时，借助于DynamoDB的全局表功能，使得用户能够利用支持Kinesis Analytics的区域对日志进行分析，并把分析结果同步回用户现在使用的区域的DynamoDB表中，帮助那些使用尚未支持Kinesis Analytics区域的用户也能够使用并享受到该服务带来的便捷。</p>
<p>下面我们来看下方案的架构：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/1-3.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/1-3.png" alt="1-3" width="1404" height="1010" /></a></p>
<p>如上图所示：</p>
<p>·         CloudFront会定期将用户的访问日志保存到用户设置的S3存储桶中。</p>
<p>·         日志在S3上生成后会自动触发Lambda函数。</p>
<p>·         Lambda函数对日志进行解压缩，并将日志内容打入Kinesis Stream流中。</p>
<p>·         Kinesis Analytics从Kinesis Stream流中获取日志数据并进行实时分析。</p>
<p>·         Kinesis Analytics的分析结果会发送到另一个Lambda函数。</p>
<p>·         该Lambda函数将分析结果处理后存入本区域的DynamoDB表中。</p>
<p>·         由于启用了DynamoDB全局表，分析结果会自动同步到其他区域的DynamoDB表中。</p>
<p>·         在用户业务所在的区域中，通过使用ALB，EC2搭建简单的web应用就可以对DynamoDB表中的数据进行实时的分析展现。</p>
<p>本文假设用户业务所在的区域是Ohio，由于Ohio尚未支持Kinesis Analytics服务，因而将所有分析组件部署在Virginia区域，仅仅将分析结果同步回Ohio的DynamoDB表中，另外，对于图中的ALB，EC2部分，本文不做详细的搭建说明，用户可以使用自己熟悉的开发语言进行展示页面的开发，也可以使用API GW，Lambda搭建无服务器的展示系统。</p>
<p>那下面我们就来看看如何快速地搭建这样一个实时分析平台吧。</p>
<h3>第一步 准备工作</h3>
<p>首先开启CloudFront的日志功能。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/2-4.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/2-4.png" alt="2-4" width="2538" height="1094" /></a></p>
<p>创建Lambda函数，用于解析CloudFront日志并将日志打入Kinesis流中，Lambda代码可从如下地址下载：</p>
<p><a href="https://github.com/iwasnobody/cflogs2analytics2ddb/blob/master/CFLogs2Kinesis.py">https://github.com/iwasnobody/cflogs2analytics2ddb/blob/master/CFLogs2Kinesis.py</a> <a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/1.png" alt="1" width="2550" height="1100" /></a></p>
<p>进入CloudFront日志保存的S3桶。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/4-3.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/4-3.png" alt="4-3" width="2534" height="1222" /></a></p>
<p>&nbsp;</p>
<p>设置当有新日志文件产生的时候，触发之前创建Lambda函数。 <a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/a.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/a.png" alt="a" width="2514" height="1220" /></a></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/6-3.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/6-3.png" alt="6-3" width="2544" height="1392" /></a></p>
<p>创建DynamoDB表，用于保存Kinesis Analytics分析的结果。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/c.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/c.png" alt="c" width="2542" height="1096" /></a></p>
<p>将创建的表设置成global table，与Ohio区域同步。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/d.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/d.png" alt="d" width="2542" height="1098" /></a><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/f.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/f.png" alt="f" width="2550" height="1176" /></a></p>
<p>创建Kinesis Stream，用于接收Lambda发送过来的日志。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/10-3.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/10-3.png" alt="10-3" width="2552" height="1132" /></a></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/11-2.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/11-2.png" alt="11-2" width="2534" height="1230" /></a></p>
<h3>第二步 向Kinesis流中打入数据</h3>
<p>由于CloudFront需要有用户访问流量的情况下才会产生日志，并且产生日志的过程不是实时的，所以为了便于测试，我们通过一个工具模拟Lambda产生的消息打入Kinesis流中，大家可以从如下链接查看该工具的详情。<a href="https://github.com/awslabs/amazon-kinesis-data-generator">https://github.com/awslabs/amazon-kinesis-data-generator</a></p>
<p>Kinesis Data Generator通过PC端浏览器的简单配置，就能够快速地产生测试流量打入指定的Kinesis流中，并且支持产生一定随机的数据，下图中，我们将数据以每秒一条的速度打入us-east-1区域的Kinesis流，数据的格式模拟Lambda函数的输出，即：以JSON格式输出CloudFront日志的每个字段，并且c_ip客户端ip字段通过简单的设置，让工具以一定的比例生成4个ip地址中的一个，其他字段都为固定字段，测试数据可以通过让CloudFront产生日志后，在Lambda函数中输出获得，或者从如下链接获取：</p>
<p><a href="https://github.com/iwasnobody/cflogs2analytics2ddb/blob/master/KinesisDataGenerator">https://github.com/iwasnobody/cflogs2analytics2ddb/blob/master/KinesisDataGenerator</a></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/g.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/g.png" alt="g" width="2534" height="1228" /></a></p>
<p>点击发送数据，开始将数据打入Kinesis流中。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/h.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/h.png" alt="h" width="2544" height="1208" /></a></p>
<p>第三步 创建Kinesis Analytics，对Kinesis流中的数据做实时分析</p>
<p>首先创建一个Data Analytics应用。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/r.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/r.png" alt="r" width="2534" height="1098" /></a> <a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/15.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/15.png" alt="15" width="2546" height="1072" /></a></p>
<p>设置应用对接的数据源为之前创建的Kinesis流。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/q.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/q.png" alt="q" width="2548" height="1092" /></a> <a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/17-2.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/17-2.png" alt="17-2" width="2536" height="934" /></a></p>
<p>点击Discover schema，让Analytics自动发现Kinesis流中已有数据的schema。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/p.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/p.png" alt="p" width="2534" height="1162" /></a></p>
<p>可以看到，Analytics可以自动帮我们识别JSON格式的CloudFront日志，但是由于我们打入的日志数据大部分数据为固定字段，所以自动识别的schema未必准确，比如：对于x_edge_request_id字段，varchar(64)可能过小，我们点击修改schema。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/o.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/o.png" alt="o" width="2540" height="1228" /></a></p>
<p>将schema做如下调整：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/20-2.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/20-2.png" alt="20-2" width="2550" height="1240" /></a><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/m.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/m.png" alt="m" width="2534" height="1168" /></a><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/n.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/n.png" alt="n" width="2548" height="888" /></a>  点击Save schema and update stream samples，查看各个字段类型及长度已经修改成功，点击Exit返回上一步。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/l.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/l.png" alt="l" width="2534" height="886" /></a></p>
<p>点击Save and Continue继续。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/k.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/k.png" alt="k" width="2516" height="1218" /></a></p>
<p>下面，我们开始使用SQL语句对带有schema的流式数据做分析汇聚。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/25-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/25-1.png" alt="25-1" width="2544" height="1234" /></a></p>
<p>下面的SQL语句以1分钟为时间窗口，分析出1分钟内，访问CloudFront的Top3的用户ip地址，Kinesis Analytics的窗口可以实时观察到每分钟分析的结果，非常利于调试。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/26-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/26-1.png" alt="26-1" width="2544" height="1244" /></a></p>
<p>再继续配置Kinesis Analytics将分析结果输出之前，我们先来配置Lambda函数，用于接收输出结果，并将结果保存到DynamoDB中，Lambda代码可以从如下链接获取：</p>
<p><a href="https://github.com/iwasnobody/cflogs2analytics2ddb/blob/master/Analytics2DDB.py">https://github.com/iwasnobody/cflogs2analytics2ddb/blob/master/Analytics2DDB.py</a></p>
<p>注意：根据输出结果的大小，需要调整Lambda函数的timeout时长。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/j.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/j.png" alt="j" width="2544" height="1086" /></a></p>
<p>接着我们回到Kinesis Analytics界面，配置应用对接的输出。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/28-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/28-1.png" alt="28-1" width="2512" height="1050" /></a></p>
<p>设置上面创建Lambda函数接收输出结果。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/i.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/i.png" alt="i" width="2532" height="1228" /></a> <a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/30-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/30-1.png" alt="30-1" width="2542" height="1242" /></a></p>
<h3>第四步 查看分析结果</h3>
<p>我们可以进入到DynamoDB中，查看之前创建的表，不断地刷新，查看表中数据的变化。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/31-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/31-1.png" alt="31-1" width="2540" height="1026" /></a></p>
<p>同时进入到Ohio区域，查看数据已经被同步过来了。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2018/11/32-1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2018/11/32-1.png" alt="32-1" width="2530" height="782" /></a></p>
<footer>
<div class="blog-author-box"></div>
</footer>
<p>&nbsp;</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%88%a9%e7%94%a8-kinesis-analytics-%e5%ae%9e%e6%97%b6%e5%88%86%e6%9e%90%e7%94%a8%e6%88%b7%e8%ae%bf%e9%97%ae%e8%a1%8c%e4%b8%ba/">利用 Kinesis Analytics 实时分析用户访问行为</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e5%88%a9%e7%94%a8-kinesis-analytics-%e5%ae%9e%e6%97%b6%e5%88%86%e6%9e%90%e7%94%a8%e6%88%b7%e8%ae%bf%e9%97%ae%e8%a1%8c%e4%b8%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
