ログストリーミング: Elasticsearch

Fastly のリアルタイムログストリーミング機能によって、ログファイルを Elasticsearch に送信することができます。Elasticsearch は、分散型の RESTful 検索及び分析エンジンです。

Fastly ではサードパーティのサービスに関する設定等のサポートは行っておりません。詳細は Fastly's Terms of Service をご参照ください。

前提条件

Fastly サービスのログエンドポイントとして Elasticsearch を追加する前に、Elasticsearch がリモートサーバー上で作動していることを確認してください。ログを送信するポートを含むエンドポイント URL (Fastly からのトラフィックを受信できることを確認してください) と、ログの送信先インデックスの名前が必要になります。Elasticsearch の設定に関する詳細については、Elasticsearch 設定ドキュメントを確認してください。

このログエンドポイントは、Elasticsearch のサポートが有効なすべてのバージョンおよび既に有効期限が終了した一部バージョンと連携しています。また、OpenSearch サーバー統合もサポートしています。Elasticsearch との API 互換性を持つその他のディストリビューションも機能する可能性はありますが、明確にテストは実行しておらず、また一切の保証を行いません。

必須権限

Fastly は Bulk APIを使用し、index アクションを介してデータを送信します。BASIC 認証を使用する場合、index アクションを使用するために必要なインデックス権限をユーザーロールに付与するようにしてください。

また、Elasticsearch サーバーのルートパス API へのアクセスも必要です。API は、サーバーのバージョン番号などのメタデータを返します。これにより、統合がお客様のサーバーに最適なバルクデータ API を選択できます。API へのアクセスにより、お客様が使用する幅広い Elasticsearch バージョンとその他の Elasticsearch との互換性を持つディストリビューションとの適切な連携が可能になります。

Elasticsearch をログエンドポイントとして追加する

次の手順に従って、ログエンドポイントとして Elasticsearch を追加します。

  1. Deliver サービス
  2. Compute サービス
  1. リモートログストリーミングの設定に関するガイドの情報をご確認ください。

  2. Elasticsearch エリアで、Create endpoint をクリックします。
  3. Create an Elasticsearch endpoint に次のように入力します。
    • Name フィールドに、エンドポイントの分かりやすい名前を入力します。

    • Placement エリアで、生成された VCL のどこにログコールを配置するかを選択します。有効な値は、形式のバージョンのデフォルトなしです。詳細については、ログの配置の変更に関するガイドをご覧ください。

    • Log format フィールドに、Elasticsearch に送信するデータを入力します。詳細はフォーマットの例のセクションを参照してください。
    • URL フィールドに、ログの送信先のポートを含む Elasticsearch エンドポイント URL を入力します。URL は、Fastly からの TCP トラフィックを受信できるポートで HTTPS を使用し、送信する必要があります。
    • Index フィールドに、ログの送信先となる Elasticsearch インデックス名を入力します。インデックスは、Elasticsearch インデックス形式のルールに従う必要があります。Fastly は、ポンド記号から始まる中括弧内の strftime 補間変数をサポートしています。例えば、#{%F}では YYYY-MM-DD 形式で今日の日付が補間されます。
    • (オプション) Pipeline フィールドには、インデックス作成前に事前処理変換を適用する Elasticsearch ingest pipeline ID を入力します (例: my_pipeline_id)。
    • (オプション) Maximum logs フィールドに、ゼロでない場合、バッチに追加するログの最大数を入力します。
    • (オプション) Maximum bytes フィールドには、ログバッチの最大サイズを入力します。
    • (オプション) BasicAuth user フィールドには、Basic 認証ユーザー名を入力します。
    • (オプション) BasicAuth password フィールドには、Basic 認証パスワードを入力します。
    • TLS hostname フィールドに、任意でログ記録先サーバーの証明書を検証するためのホスト名を入力します。これは証明書の Subject Alternative Name (SAN) フィールドの1つである必要があります。一般名 (CN) はサポートされていません。

    • (オプション) TLS CA certificate フィールドには、オリジンサーバーの証明書が有効であることの確認に使用する認証局 (CA) の証明書をコピー & ペーストしてください。アップロードする証明書は PEM 形式である必要があります。周知の認証局によって署名されてない場合には、証明書をアップロードすることを検討してください。TLS 証明書が周知の認証局によって署名されていれば、必要ありません。
    • (オプション) TLS client certificate フィールドには、オリジンサーバーへの認証に使用する TLS クライアント証明書をコピー & ペーストしてください。アップロードする TLS クライアント証明書は、PEM 形式で、クライアント証明書を添付する必要があります。TLS クライアント証明書により、Fastly が接続を実行していることをサーバーが認証できるようになります。
    • (オプション) TLS client key フィールドには、バックエンドサーバーへの認証に使用する TLS クライアントキーをコピー & ペーストしてください。アップロードする TLS クライアントキーは、PEM 形式で、TLS クライアント証明書を添付する必要があります。TLS クライアントキーを使用すると、Fastly が接続を実行していることをサーバーが認証することができます。
  4. Create をクリックして、新しいログ記録エンドポイントを作成します。

  5. Activate メニューから、Activate on Production を選択して、設定の変更をデプロイします。

フォーマットの例

Elasticsearch に送信されるデータは、JSON オブジェクトとしてシリアル化する必要があります。以下は、Elasticsearch にデータを送信するための書式指定文字列の例です。

{
"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
}