ログストリーミング: 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 にストリームがスロットルされていることを示すエラーを返し、一部のログが配信されない可能性があります。AWS CloudWatch は、Kinesis Data Streams のメトリクス (WriteProvisionedThroughputExceeded) を提供しており、これを用いてモニタリングすることで、必要に応じてストリーム容量の調整を行うことができます。

前提条件

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

ログエンドポイントとしての 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