AWS里面可以用Athena来分析S3里面保存的日志,他把日志转换成数据库表的格式,这样就可以通过sql语句进行查询了。这个功能和在windows服务器上用logparser来分析Exchange或者IIS的日志很相似。

下面做个演示,通过Cloudtrail记录管理日志,然后通过Athena来查询日志内容。

首先选择CloudTrail, CloudTrail 是一个日志记录的服务,他和cloudwatch的区别在于这个服务更多是侧重于审计,他的内容都是关于什么时候,什么账号,从什么IP上进行了什么操作。

AWS Athena 分析日志

点击 Create Trail

AWS Athena 分析日志

取个名字, 创建一个新的S3 bucket来保存日志

AWS Athena 分析日志

创建好之后可以看见他自动已经在记录最新的日志了

AWS Athena 分析日志

然后选择 Athena

AWS Athena 分析日志

跳过向导,直接进入查询器的编辑器,这里是编辑SQL语句的地方。这里我直接创建一个的数据库

AWS Athena 分析日志

下面来创建一个表,从指定的S3 Bucket里面获取数据。
我们可以通过向导创建,但是比较繁琐

AWS Athena 分析日志

比较容易的是通过脚本创建,注意最后一行S3存储桶的地址

CREATE EXTERNAL TABLE cloudtrail_logs (
eventversion STRING,
useridentity STRUCT<
               type:STRING,
               principalid:STRING,
               arn:STRING,
               accountid:STRING,
               invokedby:STRING,
               accesskeyid:STRING,
               userName:STRING,
sessioncontext:STRUCT<
attributes:STRUCT<
               mfaauthenticated:STRING,
               creationdate:STRING>,
sessionissuer:STRUCT<  
               type:STRING,
               principalId:STRING,
               arn:STRING, 
               accountId:STRING,
               userName:STRING>>>,
eventtime STRING,
eventsource STRING,
eventname STRING,
awsregion STRING,
sourceipaddress STRING,
useragent STRING,
errorcode STRING,
errormessage STRING,
requestparameters STRING,
responseelements STRING,
additionaleventdata STRING,
requestid STRING,
eventid STRING,
resources ARRAY<STRUCT<
               ARN:STRING,
               accountId:STRING,
               type:STRING>>,
eventtype STRING,
apiversion STRING,
readonly STRING,
recipientaccountid STRING,
serviceeventdetails STRING,
sharedeventid STRING,
vpcendpointid STRING
)
ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://mycloudtrailbucket-faye/AWSLogs/757250003982/';

AWS Athena 分析日志

创建表成功的样子

AWS Athena 分析日志

下面我们可以进行一个简单的查询,结果如下。

AWS Athena 分析日志