使用手动分区在 Athena 中为 CloudTrail 日志创建表 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用手动分区在 Athena 中为 CloudTrail 日志创建表

可以在 Athena 控制台中为 CloudTrail 日志文件手动创建表,然后在 Athena 中运行查询。

使用 Athena 控制台为 CloudTrail 跟踪记录创建 Athena 表
  1. 将以下 DDL 语句复制并粘贴到 Athena 控制台查询编辑器中,然后根据要求进行修改。请注意,由于 CloudTrail 日志文件不是公用 API 调用的有序堆栈跟踪,因此日志文件中的字段不会按照任何特定顺序显示。

    CREATE EXTERNAL TABLE cloudtrail_logs ( eventversion STRING, useridentity STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, invokedby:STRING, accesskeyid:STRING, username:STRING, onbehalfof: STRUCT< userid: STRING, identitystorearn: STRING>, sessioncontext:STRUCT< attributes:STRUCT< mfaauthenticated:STRING, creationdate:STRING>, sessionissuer:STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, username:STRING>, ec2roledelivery:string, webidfederationdata: STRUCT< federatedprovider: STRING, attributes: map<string,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, vpcendpointaccountid STRING, eventcategory STRING, addendum STRUCT< reason:STRING, updatedfields:STRING, originalrequestid:STRING, originaleventid:STRING>, sessioncredentialfromconsole STRING, edgedevicedetails STRING, tlsdetails STRUCT< tlsversion:STRING, ciphersuite:STRING, clientprovidedhostheader:STRING> ) PARTITIONED BY (region string, year string, month string, day string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/Account_ID/';
    注意

    建议使用示例中所示的 org.apache.hive.hcatalog.data.JsonSerDe。虽然存在 com.amazon.emr.hive.serde.CloudTrailSerde,但目前还无法处理一些较新的 CloudTrail 字段。

  2. (可选)删除表格中所有非必填字段。如果您只需要读取一组特定的列,则您的表定义可以排除其他列。

  3. 修改 s3://amzn-s3-demo-bucket/AWSLogs/Account_ID/ 以指向包含要查询的日志数据的 Amazon S3 存储桶。该示例使用特定账户的日志的 LOCATION 值,但您可以使用最适合您的应用程序的明确度程度。例如:

    • 要分析多个账户中的数据,您可以通过使用 LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/',回滚 LOCATION 说明符来指示所有 AWSLogs

    • 要分析特定日期、账户和区域中的数据,请使用 LOCATION 's3://amzn-s3-demo-bucket/123456789012/CloudTrail/us-east-1/2016/03/14/'.

    • 要分析网络活动数据而不是管理事件,请将 LOCATION 子句中的 /CloudTrail/ 替换为 /CloudTrail-NetworkActivity/

    如果使用对象层次结构中的最高级别,则可以在使用 Athena 查询时获得最高程度的灵活度。

  4. 验证字段是否正确列出。有关 CloudTrail 记录中的完整字段列表的更多信息,请参阅 CloudTrail 记录内容

    步骤 1 中的示例 CREATE TABLE 语句使用 Hive JSON SerDe。在该示例中,字段 requestparametersresponseelementsadditionaleventdata 作为查询中的 STRING 类型列出,但在 JSON 中使用 STRUCT 数据类型。因此,要将数据移出这些字段,请使用 JSON_EXTRACT 函数。有关更多信息,请参阅 从字符串中提取 JSON 数据。为了提高性能,此示例按 Amazon Web Services 区域、年份、月份和日期对数据进行分区。

  5. 在 Athena 控制台中运行 CREATE TABLE 语句。

  6. 使用 ALTER TABLE ADD PARTITION 命令加载分区,以便您可以查询它们,如以下示例所示。

    ALTER TABLE table_name ADD PARTITION (region='us-east-1', year='2019', month='02', day='01') LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/Account_ID/CloudTrail/us-east-1/2019/02/01/'