ログストリーミング:Amazon Kinesis Data Streams

Fastly の リアルタイムログストリーミング機能では、ログファイルを Amazon Kinesis Data Streams に送信することができます。Amazon Kinesis Data Streams (KDS) は、さまざまなソースからのデータを継続的にキャプチャできるリアルタイムのデータストリーミングサービスです。

Fastly ログストリーミングと Amazon Kinesis Data Streaming の仕組み

Amazon KDS は、データレコードをストリームに送信します。各ストリームは、1以上のシャードによって構成されます。シャードは一定の処理能力を表し、ストリームの総処理能力は、シャード数の数によって決定されます。シャードの数は、ストリームの有効期間に渡って増加・減少させることが可能です。Fastly Kinesis のロギングエンドポイントはシャードの数を監視し、利用可能なシャードにおいてログデータの記録を一様に配信するため、シャード数の調整は重要です。ストリームのシャードの数が変更されると、Fastly Kinesis のロギングエンドポイントがそれに応じて自動的に調整されます。お客様による設定オーバーヘッドを最低限にすると同時に、ストリームのスループット機能を最大限に活用することが目標です。

ログのボリュームがストリームのスループット容量を超える場合、Amazon KDS はエラーを返し、Fastly のエンドポイントのログにて Failed to put record onto stream で始まる出力として表示されます。これらのエラーが発生した場合、Fastly のログエンドポイントは限られた回数の再試行を試みます。しかし、エラーが定期的に発生する場合、合計のストリームスループットはログボリュームには不十分であり、シャードの数を増加させる必要があることが予想されます。

前提条件

Amazon KDS を Fastly サービスのログエンドポイントを追加する前に、AWS アカウントにて Fastly 専用の Identity and Access Management (IAM) 認証情報を作成してください。その際、一時的な認証情報を与えることができる、AWS IAM のロールを作成することをお勧めします。詳細については、Fastly ログのための AWS IAM ロールの作成をご覧ください。または IAM ユーザーを作成し、ユーザーにログストリームの kinesis:PutRecords および kinesis:ListShards 権限を与えることもできます。詳細については、AWS の認証情報の解説・取得に関する Amazon のガイドをご参照ください。

ログエンドポイントとしての Amazon Kinesis の追加

AWS のアカウントを作成し、Amazon Kinesis で IAM ユーザーを作成した後、以下の手順で Amazon KDS をログエンドポイントとして追加します。

  1. リモートログストリーミングの設定に関するガイドの情報をご参照ください。
  2. Amazon Kinesis Data Streams Create endpoint ボタンをクリックします。Create an Amazon Kinesis Data Streams endpoint ページが表示されます。
  3. Create an Amazon Kinesis Data Streams endpoint フィールドに以下のように入力します。
    • Name フィールドに分かりやすいエンドポイントの名前を入力します。
    • Placement セクションでは、生成される VCL にログコールが配置される場所を選択します。有効な値は Format Version Defaultwaf_debug (waf_debug_log)None です。詳細については、ログ配置の変更に関するガイドをご参照ください。
    • Log format フィールドに、ログの形式に使用する Apache 形式の文字列や VCL 変数を任意で入力します。詳細については、フォーマットの例をご参照ください。
    • Access method フィールドにて、User Credentials または IAM Role を選択します。
    • User Credentials を選択した場合、AWS アカウントで作成した Fastly 専用の IAM ユーザーに関連するアクセスキーとシークレットキーを入力します。詳細については、セキュリティの認証情報に関する Amazon ドキュメントをご参照ください。
    • IAM Role を選択した場合、KDS への Fastly のアクセスを許可する IAM の役割用の Amazon Resource Name (ARN) を入力します。詳細については、Fastly ログのための AWS IAM の役割の作成をご参照ください。
    • Stream name フィールドに、ログデータの送信される Kinesis ストリームの名前を入力します。
    • Region メニューから、ログを配信するリージョンを選択します。これは、Kinesis ストリームを作成したリージョンと一致する必要があります。
  4. Create ボタンをクリックすると、新しいログエンドポイントが作成されます。
  5. Activate ボタンをクリックして設定変更をデプロイします。

の形式例

Amazon KDS にデータを送信するための文字列の形式例はこちらです。詳細については、形式文字列に関するガイドをご覧ください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
  "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
}
Back to Top