Featured image of post AWS S3のファイルへのアクセスログをAthenaで確認する方法

AWS S3のファイルへのアクセスログをAthenaで確認する方法

まず、S3バケットでサーバーアクセスログを有効にする必要があります。これにより、アクセスされるたびにログが記録され、後で分析するために使用できます。

概要

Amazon S3のファイルへのアクセスログをAmazon Athenaで確認する方法です。

ステップ1: S3バケットのサーバーアクセスログを有効にする

まず、S3バケットでサーバーアクセスログを有効にする必要があります。これにより、アクセスされるたびにログが記録され、後で分析するために使用できます。

edit s3 access log settings

ステップ2: Amazon Athenaコンソールを開く

次に、Amazon Athenaコンソールにアクセスし、クエリエディタを使用してデータベースとテーブルを作成します。

athena query editor

ステップ3: データベースを作成する

Athenaで新しいデータベースを作成し、アクセスログデータの格納場所として設定します。 今回は、デフォルトで用意されているdefaultを使います。

ステップ4: テーブルスキーマを作成する

アクセスログデータの構造を定義するテーブルスキーマを作成します。 以下のクエリを実行します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
CREATE EXTERNAL TABLE `default.<データベース名>`(
  `bucketowner` STRING,
  `bucket_name` STRING,
  `requestdatetime` STRING,
  `remoteip` STRING,
  `requester` STRING,
  `requestid` STRING,
  `operation` STRING,
  `key` STRING,
  `request_uri` STRING,
  `httpstatus` STRING,
  `errorcode` STRING,
  `bytessent` BIGINT,
  `objectsize` BIGINT,
  `totaltime` STRING,
  `turnaroundtime` STRING,
  `referrer` STRING,
  `useragent` STRING,
  `versionid` STRING,
  `hostid` STRING,
  `sigv` STRING,
  `ciphersuite` STRING,
  `authtype` STRING,
  `endpoint` STRING,
  `tlsversion` STRING,
  `accesspointarn` STRING,
  `aclrequired` STRING)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  'input.regex'='([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) ([^ ]*)(?: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*))?.*$')
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://<S3バケット名>/<ディレクトリ>/'

ステップ5: テーブルをプレビューする

作成したテーブルスキーマが正しく機能しているかを確認するために、テーブルのプレビューを行います。

preview table

ステップ6: クエリを実行する

最後に、Athenaのクエリエディタを使用して、特定の条件に基づいてログデータをクエリします。例えば、特定のオブジェクトに対するDELETE操作や、特定のエラーコードを持つリクエストを検索できます。

特定のオブジェクトの特定期間のGETログを見る
1
2
3
4
5
6
7
SELECT *
FROM default.<データベース名>
WHERE Key='prefix/images/picture.jpg'
    AND operation='REST.GET.OBJECT'
    AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z')
    BETWEEN parse_datetime('2024-06-18:07:00:00','yyyy-MM-dd:HH:mm:ss')
    AND parse_datetime('2024-06-18:08:00:00','yyyy-MM-dd:HH:mm:ss');

参考

comments powered by Disqus
Hugo で構築されています。
テーマ StackJimmy によって設計されています。