はじめに
VPC LatticeのログをS3に出力して、Athenaで見られるようにしたときのメモです。
Latticeログの種類
以下2つのログを出力させることができます。
- サービスのログ
- サービスネットワークのログ
細かい違いは以下に書きますが、ログファイルの内容は同じものでした。
サービスのログ
Latticeサービス固有のログです。
S3上の保存先のパスは以下のようになっていました。
s3://{バケット名}/AWSLogs/{アカウントID}/VpcLattice/AccessLogs/{リージョン}/svc-xxxxxxxxxxx/
サービスネットワークのログ
紐づくサービスすべてのログが含まれます。
S3上の保存先のパスは以下のようになっていました。
s3://{バケット名}/AWSLogs/{アカウントID}/VpcLattice/AccessLogs/{リージョン}/sn-xxxxxxxxxxxx/svc-xxxxxxxxxxx/
Athenaでのテーブル作成
以下の DDL でテーブルを作成することができました。
CREATE EXTERNAL TABLE IF NOT EXISTS {データベース}.{テーブル名} (
`hostHeader` string,
`sslCipher` string,
`serviceNetworkArn` string,
`resolvedUser` string,
`authDeniedReason` string,
`requestMethod` string,
`targetGroupArn` string,
`tlsVersion` string,
`userAgent` string,
`serverNameIndication` string,
`destinationVpcId` string,
`sourceIpPort` string,
`targetIpPort` string,
`serviceArn` string,
`sourceVpcId` string,
`requestPath` string,
`startTime` string,
`protocol` string,
`responseCode` int,
`bytesReceived` bigint,
`bytesSent` bigint,
`duration` bigint,
`requestToTargetDuration` bigint,
`responseFromTargetDuration` bigint,
`sourceVpcArn` string,
`callerPrincipal` string,
`callerPrincipalOrgID` string,
`callerX509IssuerOU` string,
`callerX509SubjectCN` string,
`callerX509SANNameCN` string,
`callerX509SANDNS` string,
`callerX509SANURI` string
)
PARTITIONED BY (
partition STRING
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
) LOCATION 's3://{バケット名}/AWSLogs/{アカウントID}/VpcLattice/AccessLogs/{リージョン}/svc-xxxxxxxxxxx/'
TBLPROPERTIES (
'has_encrypted_data'='false',
'projection.enabled'='true',
'projection.partition.format'='yyyy-MM-dd',
'projection.partition.interval'='1',
'projection.partition.interval.unit'='DAYS',
'projection.partition.range'='2024-01-01,NOW',
'projection.partition.type'='date',
'storage.location.template'='s3://{バケット名}/AWSLogs/{アカウントID}/VpcLattice/AccessLogs/{リージョン}/svc-xxxxxxxxxxx/${partition}/'
);
S3パスでの日時のディレクトリ構造が 〜/YYYY-mm-DD/〜
となっており、パーティションに多少の工夫が必要でした。
おわりに
どなたかの参考になれば幸いです。
もっと適したDDLがありましたら教えていただけると幸いです。