Wie kann ich die Partitionsprojektion verwenden, um CloudTrail-Tabellen für Athena-Abfragen zu erstellen?
Wenn ich Amazon Athena verwende, um meine AWS-CloudTrail-Daten abzufragen, dauert die Ausführung meiner Abfragen sehr lange oder es kommt zu einem Timeout.
Behebung
CloudTrail-Protokolle können im Laufe der Zeit an Größe zunehmen, selbst wenn Sie die CloudTrail-Tabelle partitionieren, um die Laufzeit der Abfragen zu reduzieren. Abfragen für eine stark partitionierte Tabelle haben eine hohe Planungszeit und werden nicht schnell abgeschlossen.
Um das Timeout-Problem zu lösen, können Sie mithilfe der Partitionsprojektion manuell eine CloudTrail-Tabelle erstellen. Dadurch kann Athena den Wert von CloudTrail-Tabellen dynamisch berechnen, was die Abfragelaufzeit reduziert. Mit der Partitionsprojektion müssen Sie Partitionen nicht verwalten, da Partitionswerte und Speicherorte anhand der Konfiguration berechnet werden.
Informationen zum Erstellen einer nach Zeitstempel partitionierten CloudTrail-Tabelle mit Partitionsprojektion finden Sie unter Erstellen der Tabelle für CloudTrail-Protokolle in Athena mithilfe der Partitionsprojektion.
Um eine CloudTrail-Tabelle für mehrere Konten zu erstellen, die nach Jahr, Monat und Tag mit Partitionsprojektion partitioniert ist, verwenden Sie einen Befehl ähnlich dem folgenden:
CREATE EXTERNAL TABLE ctrail_pp_ymd (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 ) PARTITIONED BY (account string, region string, year string, month string, day 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://doc_example_bucket/AWSLogs/' TBLPROPERTIES ( 'projection.enabled'='true', 'projection.day.type'='integer', 'projection.day.range'='01,31', 'projection.day.digits'='2', 'projection.month.type'='integer', 'projection.month.range'='01,12', 'projection.month.digits'='2', 'projection.region.type'='enum', 'projection.region.values'='us-east-1,us-east-2,us-west-2', 'projection.year.type'='integer', 'projection.year.range'='2015,2021', 'projection.account.type'='enum', 'projection.account.values'='111122223334444,5555666677778888', 'storage.location.template'='s3://doc_example_bucket/AWSLogs/${account}/CloudTrail/${region}/${year}/${month}/${day}' )
Stellen Sie sicher, dass Sie in der vorherigen Abfrage Folgendes ersetzen:
- ctrail_pp_ymd mit dem Namen der CloudTrail-Tabelle
- doc_example_bucket mit dem Namen des Amazon Simple Storage Service (Amazon S3) Buckets, in dem Sie die CloudTrail-Tabelle erstellen möchten
- 1111222233334444 und 5555666677778888 mit den Konto-IDs der Konten, für die Sie die CloudTrail-Tabelle erstellen möchten
- us-east-1,us-east-2,us-west-2 mit der AWS-Region, für die Sie die CloudTrail-Tabelle erstellen möchten
- Tabellenattribute und Eigenschaften basierend auf Ihrem Anwendungsfall
- Die Projektionsbereiche richten sich nach Ihrem Anwendungsfall. Wenn Ihre CloudTrail-Daten beispielsweise erst ab dem Jahr 2018 verfügbar sind, ersetzen Sie den Projektionsbereich für das Jahr der Partitionsspalte durch „2018,2021“.
Verwenden Sie einen Befehl, der dem folgenden ähnelt, um eine CloudTrail-Tabelle für mehrere Konten derselben Organisation zu erstellen:
CREATE EXTERNAL TABLE ctrail_pp_ymd_org (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 ) PARTITIONED BY (account string, region string, year string, month string, day 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://doc_example_bucket/AWSLogs/doc_example_orgID/' TBLPROPERTIES ( 'projection.enabled'='true', 'projection.day.type'='integer', 'projection.day.range'='01,31', 'projection.day.digits'='2', 'projection.month.type'='integer', 'projection.month.range'='01,12', 'projection.month.digits'='2', 'projection.region.type'='enum', 'projection.region.values'='us-east-1,us-east-2,us-west-2', 'projection.year.type'='integer', 'projection.year.range'='2010,2100', 'projection.account.type'='enum', 'projection.account.values'='111122223334444,5555666677778888', 'storage.location.template'='s3://doc_example_bucket/AWSLogs/doc_example_orgID/${account}/CloudTrail/${region}/${year}/${month}/${day}' )
Hinweis: Wenn Sie die CloudTrail-Daten vor dem Jahr 2010 abfragen müssen, stellen Sie sicher, dass Sie den Jahresbereich in projection.year.range aktualisieren.
Stellen Sie sicher, dass Sie in der vorherigen Abfrage Folgendes ersetzen:
- ctrail_pp_ymd_org mit dem Namen der CloudTrail-Tabelle
- doc_example_bucket mit dem Namen des Amazon S3 Buckets, in dem Sie die CloudTrail-Tabelle erstellen möchten
- doc_example_orgID mit Ihrer Organisations-ID
- 1111222233334444 und 5555666677778888 mit den Konto-IDs der Konten, für die Sie die CloudTrail-Tabelle erstellen möchten
- us-east-1, us-east-2 und us-west-2 mit den Regionen, in denen Sie die CloudTrail-Tabelle erstellen möchten
- Tabellenattribute und Eigenschaften basierend auf Ihrem Anwendungsfall
- Die Projektionsbereiche richten sich nach Ihrem Anwendungsfall. Wenn Ihre CloudTrail-Daten beispielsweise erst ab dem Jahr 2018 verfügbar sind, ersetzen Sie den Projektionsbereich für das Jahr der Partitionsspalte durch „2018,2021“.
Wenn Sie Ihre Abfragen ausführen, achten Sie darauf, restriktive Bedingungen für die Partitionsspalten in Ihre Abfragen aufzunehmen. Dadurch kann Athena weniger Daten scannen und die Zeit für den Abfragevorgang verkürzen.
Sie können beispielsweise einen Befehl ähnlich dem folgenden ausführen, um herauszufinden, welcher Benutzer die GetObject-Anfrage an den S3 Bucket gestellt hat. Die Tabelle in dieser Abfrage verwendet das Partitionierungsformat für Jahr, Monat und Tag.
Hinweis: Stellen Sie sicher, dass die Ereignisprotokollierung für Amazon S3 in CloudTrail aktiviert ist.
SELECT useridentity.arn, eventtime FROM "ctrail_pp_ymd"where eventname = 'GetObject' and year = '2021' and month = '05' and region = 'us-east-1' and cast(json_extract(requestparameters, '$.bucketName')as varchar) ='doc_example_bucket'
Stellen Sie sicher, dass Sie in der vorherigen Abfrage Folgendes ersetzen:
- ctrail_pp_ymd mit dem Namen der CloudTrail-Tabelle
- doc_example_bucket mit dem Namen des S3 Buckets, in dem Sie die CloudTrail-Tabelle erstellen möchten
- Restriktive Bedingungen, die auf Ihrem Anwendungsfall basieren
Wenn Sie Timeout-Probleme haben, finden Sie weitere Informationen unter Wie behebe ich Timeout-Probleme, wenn ich CloudTrail-Daten mit Athena abfrage?
Weitere Informationen finden Sie unter Logs Abfragen AWS CloudTrail und Wie kann ich partitionierte Tabellen in Amazon Athena erstellen und verwenden?
Ähnliche Informationen
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 4 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 8 Monaten
- AWS OFFICIALAktualisiert vor einem Jahr