ログストリーミング: Amazon S3
- English
- 日本語
Fastly のリアルタイムログストリーミング機能は、Amazon Simple Storage Service (Amazon S3) にログファイルを送信することができます。Amazon S3 は、開発者や IT チームによって使用される静的ファイルストレージサービスです。このガイドの手順を使用して、別の S3 互換サービスへのログストリーミングを設定することもできます。
Fastly ではサードパーティのサービスに関する直接のサポートは行っておりません。詳細については、Fastly のご利用規約をご覧ください。
前提条件
Amazon S3 を Fastly サービスのログエンドポイントを追加する前に、AWS アカウントにて Fastly 専用の Identity and Access Management (IAM) 認証情報を作成することを推奨します。その際、一時的な認証情報を与えることができる、AWS IAM のロールを作成することをお勧めします。詳細については、Fastly ログの AWS IAM のロールの作成を参照してください。または、IAM ユーザーを作成し、ユーザーにログストリームの s3:PutObject
権限を与えることもできます。詳細については、Amazon の AWS の認証情報の解説・取得方法に関するガイドをご参照ください。
ログエンドポイントとしての Amazon S3 の追加
Amazon S3 のアカウントに登録し、Amazon S3 で IAM ユーザーを作成した後、以下の手順で Amazon S3 をログエンドポイントとして追加します。
- Deliver サービス
- Compute サービス
リモートログストリーミングの設定に関するガイドをご確認ください。
- Amazon Web Services S3 エリアで、Create endpoint をクリックします。
- 以下の要領で Create an Amazon S3 endpoint ページの各フィールドに入力します。
Name フィールドに分かりやすいエンドポイントの名前を入力します。
Placement セクションでは、生成される VCL にログコールが配置される場所を選択します。有効な値は Format Version Default そして None です。詳細については、ログ配置の変更に関するガイドをご覧ください。
Log format フィールドには、ログ形式に使用する Apache 形式の文字列や VCL 変数を任意で入力します。詳細については、形式例のセクションをご覧ください。
(オプション) Timestamp format フィールドに、ログファイルのタイムスタンプ形式を入力します。デフォルトでは
strftime
互換文字列です。詳細については、ログファイルの書き込み先の変更に関するガイドを参照してください。- Bucket name フィールドに、ログを保存する Amazon S3 バケットの名前を入力します。
- (オプション) Domain フィールドに、Amazon S3 エンドポイントのドメインを入力します。Amazon S3 バケットが米国標準地域で作成されていない場合、適切なエンドポイント URL に該当するようにドメインを設定する必要があります。Amazon S3 のドキュメントページにある地域とエンドポイントの S3 セクションの表を使用します。S3 互換のストレージシステム (Dreamhost の DreamObjects など) を利用するには、そのサービスのドメイン名と一致させるようにドメインを設定します (例えば、DreamObjects の場合ドメイン名は
objects.dreamhost.com
となります)。 - Access method フィールドでは、User Credentials または IAM Role を選択します。
- User Credentials を選択した場合、AWS アカウントで作成した Fastly 専用の IAM ユーザーに関連するアクセスキーとシークレットキーを入力します。詳細については、Amazon のセキュリティの認証情報に関するドキュメントを確認してください。
- IAM Role を選択した場合、S3 への Fastly のアクセスを許可する IAM の役割用の Amazon Resource Name (ARN) を入力します。詳細については、Fastly ログ専用 AWS IAM ロールの作成を参照してください。
(オプション) Period フィールドに、ログファイルのローテーションの頻度をコントロールするための間隔 (秒単位) を入力します。ローテーションにより、1つのファイルオブジェクトが完了すると、新たなファイルオブジェクトが作成されます。以前に作成されたファイルオブジェクトが削除されることはありません。デフォルトでは
既知の平均ログレートと併用して期間設定を使用し、推奨される非圧縮サイズの S3 ログファイルオブジェクトを概算します。実際のログの容量によってサイズが変動する場合があります。3600
秒に設定されています。
- Advanced options をクリックして、以下のようにフィールドに入力します。
(オプション) Path フィールドには、ファイルを保存するバケット内のパスを入力します。パスの末尾にスラッシュを付けます。このフィールドを空にすると、ファイルはバケットのルートパスに保存されます。詳細については、ログファイルの書き込み先の変更に関するガイドを参照してください。
(オプション) PGP public key フィールドに、Fastly がログファイルをディスクに書き込む前に、ログファイルを暗号化するために使用する PGP 公開鍵を入力します。秘密鍵で復号化することによってのみ、コンテンツを読み取ることができます。PGP 公開鍵は PEM (Privacy-Enhanced Mail) 形式でなければなりません。詳細については、ログの暗号化に関するガイドをご覧ください。
Select a log line format のセクションで、ログメッセージのログライン形式を選択します。詳細については、ログライン形式の変更に関するガイドをご覧ください。
(オプション) Compression フィールドで、ログファイルに適用する圧縮形式を選択します。詳細については、ログ圧縮オプションの変更に関するガイドをご覧ください。
- Redundancy level メニューから、設定を選択します。デフォルトでは Standard に設定されています。Amazonの 低冗長化ストレージガイドにて、低冗長化ストレージに関する詳細をご確認ください。
- (オプション) ACL メニューから、アクセス制御ヘッダーを選択します。詳細については、Amazon のアクセス制御リスト (ACL) 固有のリクエストヘッダーに関するドキュメントをご参照ください。
- (オプション) Server side encryption エリアで、Fastly が Amazon S3 バケットに書き込むファイルを保護するための暗号方法を選択します。有効な値は、None、AES-256、および AWS Key Management Service です。AWS Key Management Service を選択した場合、AWS KMS Key ID を入力する必要があります。詳細については、サーバーサイドの暗号化を使用したデータ保護に関する Amazon のガイドをご参照ください。
- (オプション) Maximum bytes フィールドに、最大ファイルサイズ (バイト数) を入力します。この値によりファイルサイズに上限が設定され、期間の終了前にサイズのしきい値を超えた場合は、設定された期間が上書きされます。0に設定すると、最大値は設定されず、ファイルサイズに上限は設けられません。
Create をクリックして新規のログエンドポイントを作成します。
Activate をクリックして設定への変更をデプロイします。
フォーマットの例
以下に示すのは、Amazon S3 にデータを送信する書式指定文字列の例です。書式指定文字列の詳細については、こちらをご覧ください。
{ "timestamp": "%{strftime(\{"%Y-%m-%dT%H:%M:%S%z"\}, time.start)}V", "client_ip": "%{req.http.Fastly-Client-IP}V", "geo_country": "%{client.geo.country_name}V", "geo_city": "%{client.geo.city}V", "host": "%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V", "url": "%{json.escape(req.url)}V", "request_method": "%{json.escape(req.method)}V", "request_protocol": "%{json.escape(req.proto)}V", "request_referer": "%{json.escape(req.http.referer)}V", "request_user_agent": "%{json.escape(req.http.User-Agent)}V", "response_state": "%{json.escape(fastly_info.state)}V", "response_status": %{resp.status}V, "response_reason": %{if(resp.response, "%22"+json.escape(resp.response)+"%22", "null")}V, "response_body_size": %{resp.body_bytes_written}V, "fastly_server": "%{json.escape(server.identity)}V", "fastly_is_edge": %{if(fastly.ff.visits_this_service == 0, "true", "false")}V}