数据时代,利用数据做决策是大数据的核心价值。

本文手把手,教你使用python进行AWSCloudTrail配置,进行日志抓取。进行数据分析,发现数据价值!

如今是云的时代,许多公司都把自己的IT架构部署在基础架构云(IaaS)上。著名的IaaS提供商有亚马逊,微软(Azure),IBM等,国内也有诸如阿里云等。其中,亚马逊毫无疑问是该市场的领军者。

AWS提供了非常多的服务,领先了竞争对手一大截。并且AWS提供非常丰富的API,其API基于Rest,所以很容易被不同的语言的平台来调用。

在如今的大数据时代,利用数据在做决策是大数据的核心价值。AWS提供了许多服务来获取其运行数据,cloudtrail和cloudwatch是经常被用到的两个。CloudTrail是对AWS的所有API调用的日志,CloudWatch是监控AWS服务的性能数据。(新出的Config服务可用于监控AWS的资源变化)

今天我们来看看如何使用Python(Boto AWS的开源Python SDK)来自动配置ClouTrail的服务并获取日志内容。

相关概念我们先来看看CloudTrail的概念和相关的配置:

S3 Bucket >

在打开CloudTrail的服务时,需要指定一个相关的S3的Bucket,S3是亚马逊提供的存储服务,你可以把它当作一个基于云的文件系统。CloudTrail的API调用日志,会以压缩文件的形式,存储在你指定的Bucket里。

SNS

SNS是亚马逊提供的通知服务,该服务使用的是订阅/发布(Subsrcibe/Publish)的模式。在创建CloudTrail的时候,可以关联一个SNS的Topic(可选),这样做的好处是当有API调用时,可以第一时间得到通知。可以使用不同的客户端来订阅SNS的通知,例如Email,Mobile的Notification Service,SQS等

SQS

SQS是亚马逊提供的队列服务,在本文中,我们使用SQS订阅SNS的的内容,这样我们的Python程序就可以从SQS的队列中获取相应的通知。

配置CloudTrail只需四步,就可以实现CloudTrail的配置:

1首先,我们需要创建SNS,并指定相应的策略。代码如下:

CloudTrail是和区域(Region)相关的,不同的Region有不同的CloudTrail服务,所以,在创建对应的SNS时,需要保证使用同一个Region。

这里要注意的是我们创建了新的policy来使得CloudTrail拥有向我们创建的SNS发布消息(Action=“SNS:Publish”)的权限。我们的做法是从缺省的策略中拷贝了一份,修改了相应的Action和Sid(随便取一个不重复的名字),Principal部分是一个缺省的account的列表,这里是硬编码,AWS有可能会修改该列表的值,但在当前环境下,该值是固定的。最后移除Condition的值。把新创建的Policy片段添加到原来的Policy中就好了。

2然后,我们需要创建一个SQS的队列,并订阅我们创建的SNS的Topic。这一步相对比较简单。

3随后,我们需要创建一个S3的Bucket用来存储CloudTrail产生的日志文件。同样的,需要指定响应的策略以保证CloudTrail能够有权限写入对应的日志文件。

这里我们使用一个缺省的Policy文件,替换掉响应的字段就好了。

4最后,我们创建CloudTrail的服务:

好了,现在CloudTrail已经配置好了,并且关联的SNS也被我们创建的SQS队列订阅,接下来我们就可以抓取日志了。

获取日志数据每当有一个API调用,CloudTrail都会把响应的日志文件写入到S3我们创建的Bucket中,同时在我们在创建的SNS的topic中发布一条消息,因为我们使用SQS的队列订阅了该消息,所以我们可以通过读取SQS消息的方式来获得日志数据。

1首先连接到SQS的队列,并从中读取消息。

2然后,我们从消息中获得响应的日志文件在S3中的地址,并利用该地址从S3中获得对应的日志文件:

logjson就是对应的日记内容的JSON格式。这里有一个例子:

你可以使用以上代码来监控所有的cloudtrail的日志,拿到的JSON格式的日志可以放在你的数据库(Mongo不错)中,然后利用你的BI工具做分析。

注意:你也可以不创建SNS和SQS,直接扫描bucket的内容,这样做的好处是配置更简单,缺点是实时性比较差,扫面Bucket需要额外的计算,并且需要在本地保存文件扫描的状态,code会更加复杂。

小结利用CloudTrail的日志,你可以做很多事情,比如看看有没有非法的登陆,各个服务的使用频率,总之,当你有了足够多的数据,你就可以从中发现足够的价值。

End.

手把手教你用Python抓取AWS的日志(CloudTrail)数据的更多相关文章

  1. 手把手教你使用Python抓取QQ音乐数据(第一弹)

    [一.项目目标] 获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 由浅入深,层层递进,非常适合刚入门的同学练手. [二.需要的库] 主要涉及的库有:requests.json ...

  2. 手把手教你使用Python抓取QQ音乐数据(第二弹)

    [一.项目目标] 通过Python爬取QQ音乐数据(一)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 此次我们在之前的基础上获取QQ音乐指定歌曲的歌词及前15个精 ...

  3. 手把手教你使用Python爬取西刺代理数据(下篇)

    /1 前言/ 前几天小编发布了手把手教你使用Python爬取西次代理数据(上篇),木有赶上车的小伙伴,可以戳进去看看.今天小编带大家进行网页结构的分析以及网页数据的提取,具体步骤如下. /2 首页分析 ...

  4. 浅谈如何使用python抓取网页中的动态数据

    我们经常会发现网页中的许多数据并不是写死在HTML中的,而是通过js动态载入的.所以也就引出了什么是动态数据的概念, 动态数据在这里指的是网页中由Javascript动态生成的页面内容,是在页面加载到 ...

  5. 一篇文章教会你用Python抓取抖音app热点数据

    今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一 ...

  6. python抓取网页中的动态数据

    一.概念 网页中的许多数据并不是写死在HTML中的,而是通过js动态载入的.所以也就引出了什么是动态数据的概念,动态数据在这里指的是网页中由Javascript动态生成的页面内容,是在页面加载到浏览器 ...

  7. 手把手教你用python抓网页数据

    http://www.1point3acres.com/bbs/thread-83337-1-1.html

  8. Python抓取淘宝IP地址数据

    def fetch(ip): url = 'http://ip.taobao.com/service/getIpInfo.php?ip=' + ip result = [] try: response ...

  9. python抓取NBA现役球员基本信息数据

    链接:http://china.nba.com/playerindex/ 所需获取JSON数据页面链接:http://china.nba.com/static/data/league/playerli ...

随机推荐

  1. 每天一个linux命令(49):at命令

    在windows系统中,windows提供了计划任务这一功能,在控制面板 -> 性能与维护 -> 任务计划, 它的功能就是安排自动运行的任务. 通过'添加任务计划'的一步步引导,则可建立一 ...

  2. SQL中Group By的使用

    1.概述 2.原始表 3.简单Group By 4.Group By 和 Order By 5.Group By中Select指定的字段限制 6.Group By All 7.Group By与聚合函 ...

  3. SSIS Design1: 源数据提取

    数据量的大小由两个方面决定:行的宽度和数据行的数量,为了减少ETL运行的时间,可以从源数据的提取上做优化,从数据源的输入上控制数据的质量和大小,减少转换和IO. 一,减少行的宽度 1,只加载需要的数据 ...

  4. 扩:new and override

    昨天有个网友问我继承里面的new和override关键词有啥区别,呃,我们来看个例子就知道了 new ==>隐藏父类同名方法  override==>覆盖 定义一个父类: public c ...

  5. jQuery 2.0.3 源码分析Sizzle引擎 - 编译函数(大篇幅)

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 从Sizzle1.8开始,这是Sizzle的分界线了,引入了编译函数机制 网上基本没有资料细说这个东东的,sizzle引入这 ...

  6. lintcode循环数组之连续子数组求和

    v 题目:连续子数组求和 II 给定一个整数循环数组(头尾相接),请找出一个连续的子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的值.如果多个答案,请返回其中任意一个. ...

  7. 使用yield进行异步流程控制

    现状 目前我们对异步回调的解决方案有这么几种:回调,deferred/promise和事件触发.回调的方式自不必说,需要硬编码调用,而且有可能会出现复杂的嵌套关系,造成"回调黑洞" ...

  8. SFC中的故障管理

    1.SFC中包的格式 网络服务包头,当Obit被设置为1时,表示一个SFC OAM消息 OAM Type:SFC OAM的类型(1.连接认证,2.持续性检验,3.路由跟踪,4.性能度量) SFC OA ...

  9. mininet和ryu控制器的连接

    1.执行ryu应用程式:ryu-manager --verbose ryu.app.simple_switch_13 2.启动mininet,配置如下:创建3个host,1个交换器(open vSwi ...

  10. PHP中的__toString方法(实现JS里的链式操作)

    _toString方法是在打印对象时自动调用的魔术方法,如果不声明会报以下错 Catchable fatal error: Object of class String could not be co ...