Athena, Kinesis Data Firehose, S3 を使用したログ分析
AWS ユーザーは、 Athena (おそらく Presto ベース) を使用して S3 に保存されたアプリケーションログをクエリできます。 これにより、ログ分析環境を迅速に構築できます。
概要
この投稿では、パーティショニングに便利な AWS Glue Crawler は取り上げていません。
S3 バケット作成
ログファイルのための適当なバケットを作成してください。
Kinesis Data Firehose Delivery Stream 作成
2019年2月12日にカスタムプレフィックスがサポートされました。
カスタムプレフィックスがサポートされる前は、 Firehose は path/to/YYYY/MM/DD
のようなプレフィックスでファイルを作成しました。
現在は Apache Hive 形式を S3 オブジェクトキーとして指定し、 MSCK REPAIR TABLE
を使用して Athena でパーティションを作成できます。
Create delivery stream
をクリックしてください。
ストリーム名を指定してください。
Direct PUT or other sources
を選択してください。
レコードを処理する設定はスキップしてください。
宛先として S3
を選択してください。
Apache Hive 形式のプレフィックスを指定してください。
Field | Value |
---|---|
Prefix | logs/!{timestamp:'year='yyyy'/month='MM'/day='dd'/hour='HH}/ |
Error prefix | error_logs/!{timestamp:'year='yyyy'/month='MM'/day='dd'/hour='HH}/!{firehose:error-output-type} |
要件に基づいて Buffer size
および Buffer interval
に適切な値を指定してください。
GZIP
圧縮を強くお勧めします。
Firehose が引き受ける IAM ロールを作成または選択してください。
PHP を使用した Firehose へのストリーミング例
以下の例は、 AWS SDK for PHP と FirehoseClient#putRecord
API を使用してデータをストリーミングする方法です。
$client = new FirehoseClient([
'region' => '<AWS_REGION>',
'version' => 'latest',
]);
// Create a log record.
$data = [
'log_id' => 12345,
'url' => 'https://hoge/fuga/',
];
// Stream the record to Firehose.
$client->putRecord([
'DeliveryStreamName' => '<YOUR_STREAM>',
'Record' => [
// New line must be included because single record expresses single log data.
'Data' => json_encode($data) . PHP_EOL,
],
]);
Athena テーブル作成
Create table from S3 bucket data
を選択してください。
データベース名、テーブル名、および Firehose がデータを出力する S3 の場所を入力してください。
JSON
を指定してください。
データに基づいて適切な列を指定してください。
どのようにパーティショニングするかを設定してください。
ここでは year/month/day/hour
を使用しています。
メニューから Load partitions
を選択して、 MSCK REPAIR TABLE {TABLE_NAME};
を実行してください。
SQL を使用した Athena テーブルのクエリ
いつものように SQL を使用してデータをクエリできます。予期しない高額な請求を回避するために Athena でクエリを実行する際、以下の条件に注意してください。
WHERE
句にパーティションキーを指定- 不必要なスキャンを防ぐために
LIMIT
を追加
SELECT
*
FROM
table_name
WHERE
year = 2019
AND month = 8
AND day = 30
LIMIT 10;
まとめ
Athena を利用すると、 AWS ユーザーは、スケーラブルでコスト効率が高く可用性の高いログ分析環境を迅速に構築できます。
この投稿が、お役に立てば幸いです。