Amazon Athena 是一种交互式查询服务,让您能够使用标准 SQL 轻松分析数据。只需在 AWS 管理控制台中执行几项操作,即可将 Athena 指向 Amazon S3 中存储的数据,并开始使用标准 SQL 运行临时查询,然后在几秒钟内获得结果,本文主要介绍如何使用Athena分析S3 access log。
Athena优势
01
基于Serverless无服务器,无需管理基础设施
02
支持使用标准SQL进行数据分析
03
支持自动扩展和并行查询,速度快
准备工作
创建S3存储
demobucket-test -- 用来存放测试文件
demobucket-s3accessslog -- 用来存放demobucket-test桶的访问日志
打开demobucket-test存储桶访问日志
因为存储桶日志生成需要时间(一般在半个小时以上),在日志生成之前,我们先上传一部分文件用来测试。
在Athena中创建数据库和表
打开Athena控制台,在 Query Editor (查询编辑器)中,运行类似于以下内容的命令来创建数据库。
注意:最佳实践是在与 S3 存储桶相同的 AWS 区域中创建数据库。
创建数据库
创建数据表
s3_access_logs_demo_db:数据库名称
mybucket_logs :需要创建的表的名称
LOCATION 's3://awsexamplebucket-logs/prefix':S3访问日志的路径
在左侧窗格中的表下,从表名旁边的菜单按钮中选择 Preview table (预览表)。
执行SQL语句进行查询测试
情景一:查询某个用户操作记录
SELECT count(*) FROM s3_access_logs_db.mybucket_logs WHERE requester='arn:aws-cn:iam::xxx:user/demotest';
情景二:查询某个时间段对某个文件的所有操作记录
SELECT * FROM s3_access_logs_demo_db.mybucket_logs WHERE Key='status_check.sh' AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2020-07-25:00:00:00','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2020-07-26:00:00:00','yyyy-MM-dd:HH:mm:ss');
情景三:显示在特定时间段内特定 IP 地址传输的数据量
SELECT SUM(bytessent) as uploadtotal, SUM(objectsize) as downloadtotal, SUM(bytessent + objectsize) AS total FROM s3_access_logs_demo_db.mybucket_logs WHERE remoteIP='58.33.126.28'
点一下右下角“在看”,让我们做的更好