OpenResty Edge でアクセスログを設定するには、Global Config ページで名前付きのログフォーマットを定義し、それをアプリケーションに割り当ててログファイルを指定します。変更はリロードや再起動なしで全ゲートウェイサーバーにプッシュされます。デフォルトの main フォーマットは、リモート IP アドレス、HTTP ホスト、アップストリームステータスを記録します。

このチュートリアルでは、アクセスログフォーマットをグローバルに設定し、それをアプリケーションに適用し、ゲートウェイサーバーでログ出力を検証する手順を説明します。

OpenResty Edge の Admin コンソールでアプリケーションのアクセスログフォーマットを設定する

Global Config でアクセスログフォーマットを定義する

いつものように、OpenResty Edge の Admin Web コンソールにアクセスしましょう。これはコンソールのサンプルデプロイメントです。各ユーザーには独自のローカルデプロイメントがあります。

OpenResty Edge Admin Web コンソールのサンプルデプロイメント

まず、アクセスログのフォーマットを設定しましょう。

OpenResty Edge でアクセスログフォーマットの設定を開始する

Global Config ページに移動します。

OpenResty Edge コンソールで Global Config ページを開く

現在のグローバル設定は「default」というネットワークパーティションに属しています。

default という名前のネットワークパーティションの Global Config

ログ設定の部分に直接移動します。

Global Config ページのログ設定セクション

これがデフォルトで使用されるログファイルディレクトリです。このディレクトリを変更する場合は、変更後のディレクトリがすべてのゲートウェイサーバーに存在することを確認する必要があります。

Global Config のデフォルトのアクセスログファイルディレクトリ

これは「main」という名前のデフォルトのアクセスログフォーマットです。

main という名前のデフォルトアクセスログフォーマット

このフォーマットは、リモート IP アドレス、HTTP ホスト、リクエストライン、送信バイト数、アップストリームステータスなど、多くの情報を記録します。

main アクセスログフォーマットはリモート IP、HTTP ホスト、リクエストライン、アップストリームステータスを記録する

「As default」は、このログフォーマットをそのネットワークパーティションのデフォルトアクセスログフォーマットとして設定することを意味します。アプリケーションで特に指定がない場合、このログフォーマットがデフォルトとして使用されます。

フォーマットをネットワークパーティションのデフォルトアクセスログフォーマットに設定する

新しいフォーマットを追加したい場合は、このボタンをクリックします。

新しいアクセスログフォーマットを追加するボタン

このチュートリアルでは、既存の「tutorial-example」フォーマットを使用します。

tutorial-example アクセスログフォーマット

これはリクエスト時間、リモート IP アドレス、HTTP ホスト、リクエストラインを記録します。

tutorial-example フォーマットはリクエスト時間、リモート IP、HTTP ホスト、リクエストラインを記録する

アプリケーションにアクセスログフォーマットを割り当てる

では、アプリケーションにこのアクセスログフォーマットを設定しましょう。

アプリケーションにアクセスログフォーマットを設定する

アプリケーションリストページに移動します。

OpenResty Edge でアプリケーションリストページを開く

以前のサンプルアプリケーション、test-edge.com を引き続き使用できます。

test-edge.com ドメインのサンプルアプリケーション

そのアプリケーションに入ります。

OpenResty Edge のサンプルアプリケーションに入る

設定ページに移動します。

アプリケーションの設定ページを開く

以前、このアプリケーションに「default」という名前のネットワークパーティションを設定しました。

default という名前のネットワークパーティションに設定されたアプリケーション

このアプリケーションがデフォルトでグローバル設定のデフォルトアクセスログフォーマットを使用していることがわかります。

Global Config のデフォルトアクセスログフォーマットを使用するアプリケーション

デフォルトのログフォーマットを使用している場合、アクセスログのファイル名を変更することはできません。

デフォルトログフォーマット使用中はロックされるアクセスログファイル名

では、使用するログフォーマットを変更しましょう。「tutorial-example」という名前のアクセスログフォーマットを選択します。

アプリケーションに tutorial-example アクセスログフォーマットを選択する

これでログファイル名を変更できるようになりました。「example.access.log」に変更しましょう。

アプリケーションのログファイルを example.access.log に変更する

この変更を保存します。

アクセスログフォーマットとログファイルの設定を保存する

いつものように、この変更を反映させるためにリリースする必要があります。

アクセスログの変更をプッシュするためにリリースする

このボタンをクリックします。

OpenResty Edge で新しいリリースを作成するボタン

リリースします!

新しいリリースをゲートウェイクラスターにプッシュする

変更がすべてのゲートウェイサーバーに同期されました。

リリースがすべてのゲートウェイに完全同期された

これで、先ほどの変更がすべてのゲートウェイクラスターとサーバーにプッシュされました。

設定変更がすべてのゲートウェイクラスターへの同期を開始

設定変更がすべてのゲートウェイクラスターへ同期中

設定変更がすべてのゲートウェイサーバーへ同期完了

アクセスログフォーマットを変更すると、その変更はすべてのゲートウェイサーバーに同期され、その際にバイナリアップグレード(binary upgrade)が実行されます。これは OpenResty のオンラインホットアップグレードで、リロードや再起動は不要で、ダウンタイムも既存接続の切断もありません。そのため、依然として非常に効率的でスケーラブルです。

設定が Edge Admin から各ゲートウェイノードのローカルストレージへ同期される

ゲートウェイサーバーでアクセスログをテストする

以前のチュートリアルで、すでにアップストリームを定義しました。

以前の OpenResty Edge チュートリアルで定義したアップストリーム

この my_backend アップストリームには、バックエンドサーバーが 1 つ定義済みです。

バックエンドサーバーが定義された my_backend アップストリーム

また、ページルールも定義しました。

アプリケーションに定義済みのページルール

このページルールは、先ほど見たアップストリームへのリバースプロキシを設定しています。

アップストリームへのリバースプロキシを設定するページルール

そのため、アプリケーションにアクセスすると、アップストリームからコンテンツが返されます。

では、アプリケーションがどのゲートウェイサーバーに属しているかを確認しましょう。

ゲートウェイクラスターページに移動します。

ゲートウェイクラスターページを開く

アプリケーションは “default” という名前のネットワークパーティションに属しています。

アプリケーションが属する default という名前のネットワークパーティション

「default」という名前のネットワークパーティションに属する多くのゲートウェイクラスターがあることがわかります。

default という名前のネットワークパーティションに属するゲートウェイクラスター

その中の1つを選んでアクセスログメッセージを確認しましょう。

アクセスログメッセージを確認するゲートウェイクラスターを選択する

まず、アプリケーションにアクセスしてアクセスログメッセージを生成しましょう。

ターミナルで、curl を使用してリクエストを送信します。

curl -sSI -H 'Host: test-edge.com' http://52.53.251.226/

curl でアプリケーションにリクエストを送信する

アクセスに成功しました!

ゲートウェイへの curl リクエストが成功する

次に、アクセスログメッセージを確認しましょう。OpenResty Edge ゲートウェイサーバーにログインします。

OpenResty Edge ゲートウェイサーバーにログインする

example.access.log ファイルの最後のアクセスログメッセージを確認します。

example.access.log の最新のアクセスログメッセージを確認する

ログファイルディレクトリはグローバル設定で定義されています。

Global Config で定義されたアクセスログファイルディレクトリ

ログファイル名はアプリケーションで定義しました。

アプリケーションで定義されたアクセスログファイル名

コマンドを実行します。

ゲートウェイサーバーでアクセスログを読み取るコマンドを実行する

アクセスログメッセージにリクエスト時間が含まれていることがわかります。

アクセスログメッセージに表示されるリクエスト時間

そしてリモート IP アドレス。

アクセスログメッセージに表示されるリモート IP アドレス

HTTP ホスト。

アクセスログメッセージに表示される HTTP ホスト

そしてリクエストライン。

アクセスログメッセージに表示されるリクエストライン

アクセスログメッセージが「tutorial-example」アクセスログフォーマットと一致していることがわかります。

tutorial-example フォーマットと一致するアクセスログメッセージ

ちなみに、設定ページでアプリケーションのアクセスログフォーマットを設定する以外に、新しいアプリケーションを作成する際にも設定できます。

アプリケーションリストページに戻ります。

OpenResty Edge のアプリケーションリストページに戻る

新しいアプリケーションボタンをクリックして、アクセスログフォーマットを設定できる場所を確認しましょう。

OpenResty Edge の新しいアプリケーションボタン

ここでアクセスログフォーマットを設定できます。

OpenResty Edge の新規アプリケーション作成ページにあるアクセスログフォーマットの選択欄

アクセスログは OpenResty Edge のオブザーバビリティの一部です。障害を調査するには、アプリケーションおよびゲートウェイサーバー全体でエラーログを確認する方法や、Request ID でリクエストを追跡する方法を参照してください。

よくある質問

OpenResty Edge でアクセスログフォーマットを設定するには?

Global Config ページを開き、ログ設定の下で名前付きのアクセスログフォーマットを定義(または選択)します。次にアプリケーションの設定を開き、そのフォーマットを選択してログファイル名を設定します。リリースを行うと、変更がすべてのゲートウェイサーバーにプッシュされます。

OpenResty Edge のアクセスログファイルはどこに保存されますか?

ログファイルのディレクトリは Global Config で定義され、ログファイル名はアプリケーションごとに定義されます。このチュートリアルでは、アプリケーションは各ゲートウェイサーバー上の設定済みログディレクトリ内の example.access.log に書き込みます。

ゲートウェイを再起動せずにアクセスログフォーマットを変更できますか?

できます(再起動は不要です)。リリース後、設定変更はすべてのゲートウェイクラスターとサーバーにプッシュされます。ただし、アクセスログフォーマットの変更はゲートウェイのバイナリアップグレード(binary upgrade)を伴います——これは OpenResty のオンラインホットアップグレードで、ダウンタイムがなく既存の接続も切断しないため、ゲートウェイを再起動する必要はなく、引き続き効率的でスケーラブルです。

デフォルトの「main」アクセスログフォーマットはどのフィールドを記録しますか?

「main」という名前のデフォルトフォーマットは、リモート IP アドレス、HTTP ホスト、リクエストライン、送信バイト数、リクエスト時間、アップストリームステータスなど、多くの情報を記録します。

アプリケーションごとに異なるアクセスログフォーマットを設定できますか?

できます。各アプリケーションはネットワークパーティションのデフォルトフォーマットを使用することも、独自のフォーマットを選択することもできます。たとえば本記事で使用した「tutorial-example」フォーマットは、リクエスト時間、リモート IP アドレス、HTTP ホスト、リクエストラインを記録します。新しいアプリケーションを作成する際にフォーマットを設定することもできます。

OpenResty Edge について

OpenResty Edge は、マイクロサービスと分散トラフィックアーキテクチャ向けに設計された多機能ゲートウェイソフトウェアで、当社が独自に開発しました。トラフィック管理、プライベート CDN 構築、API ゲートウェイ、セキュリティ保護などの機能を統合し、現代のアプリケーションの構築、管理、保護を容易にします。OpenResty Edge は業界をリードする性能と拡張性を持ち、同時接続数が多く高負荷なシナリオの厳しい要求を満たすことができます。K8s などのコンテナアプリケーショントラフィックのスケジューリングをサポートし、大量のドメイン名を管理できるため、大規模ウェブサイトや複雑なアプリケーションのニーズを容易に満たすことができます。

著者について

章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。

章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty Edge(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJITGDBSystemTapLLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!