OpenResty Edge のアクセスログ:リロードなしでゲートウェイのログフォーマットを設定する
OpenResty Edge でアクセスログを設定するには、Global Config ページで名前付きのログフォーマットを定義し、それをアプリケーションに割り当ててログファイルを指定します。変更はリロードや再起動なしで全ゲートウェイサーバーにプッシュされます。デフォルトの main フォーマットは、リモート IP アドレス、HTTP ホスト、アップストリームステータスを記録します。
このチュートリアルでは、アクセスログフォーマットをグローバルに設定し、それをアプリケーションに適用し、ゲートウェイサーバーでログ出力を検証する手順を説明します。
Global Config でアクセスログフォーマットを定義する
いつものように、OpenResty Edge の Admin Web コンソールにアクセスしましょう。これはコンソールのサンプルデプロイメントです。各ユーザーには独自のローカルデプロイメントがあります。
まず、アクセスログのフォーマットを設定しましょう。
Global Config ページに移動します。
現在のグローバル設定は「default」というネットワークパーティションに属しています。
ログ設定の部分に直接移動します。
これがデフォルトで使用されるログファイルディレクトリです。このディレクトリを変更する場合は、変更後のディレクトリがすべてのゲートウェイサーバーに存在することを確認する必要があります。
これは「main」という名前のデフォルトのアクセスログフォーマットです。
このフォーマットは、リモート IP アドレス、HTTP ホスト、リクエストライン、送信バイト数、アップストリームステータスなど、多くの情報を記録します。
「As default」は、このログフォーマットをそのネットワークパーティションのデフォルトアクセスログフォーマットとして設定することを意味します。アプリケーションで特に指定がない場合、このログフォーマットがデフォルトとして使用されます。
新しいフォーマットを追加したい場合は、このボタンをクリックします。
このチュートリアルでは、既存の「tutorial-example」フォーマットを使用します。
これはリクエスト時間、リモート IP アドレス、HTTP ホスト、リクエストラインを記録します。
アプリケーションにアクセスログフォーマットを割り当てる
では、アプリケーションにこのアクセスログフォーマットを設定しましょう。
アプリケーションリストページに移動します。
以前のサンプルアプリケーション、test-edge.com を引き続き使用できます。
そのアプリケーションに入ります。
設定ページに移動します。
以前、このアプリケーションに「default」という名前のネットワークパーティションを設定しました。
このアプリケーションがデフォルトでグローバル設定のデフォルトアクセスログフォーマットを使用していることがわかります。
デフォルトのログフォーマットを使用している場合、アクセスログのファイル名を変更することはできません。
では、使用するログフォーマットを変更しましょう。「tutorial-example」という名前のアクセスログフォーマットを選択します。
これでログファイル名を変更できるようになりました。「example.access.log」に変更しましょう。
この変更を保存します。
いつものように、この変更を反映させるためにリリースする必要があります。
このボタンをクリックします。
リリースします!
変更がすべてのゲートウェイサーバーに同期されました。
これで、先ほどの変更がすべてのゲートウェイクラスターとサーバーにプッシュされました。
アクセスログフォーマットを変更すると、その変更はすべてのゲートウェイサーバーに同期され、その際にバイナリアップグレード(binary upgrade)が実行されます。これは OpenResty のオンラインホットアップグレードで、リロードや再起動は不要で、ダウンタイムも既存接続の切断もありません。そのため、依然として非常に効率的でスケーラブルです。
ゲートウェイサーバーでアクセスログをテストする
以前のチュートリアルで、すでにアップストリームを定義しました。
この my_backend アップストリームには、バックエンドサーバーが 1 つ定義済みです。
また、ページルールも定義しました。
このページルールは、先ほど見たアップストリームへのリバースプロキシを設定しています。
そのため、アプリケーションにアクセスすると、アップストリームからコンテンツが返されます。
では、アプリケーションがどのゲートウェイサーバーに属しているかを確認しましょう。
ゲートウェイクラスターページに移動します。
アプリケーションは “default” という名前のネットワークパーティションに属しています。
「default」という名前のネットワークパーティションに属する多くのゲートウェイクラスターがあることがわかります。
その中の1つを選んでアクセスログメッセージを確認しましょう。
まず、アプリケーションにアクセスしてアクセスログメッセージを生成しましょう。
ターミナルで、curl を使用してリクエストを送信します。
curl -sSI -H 'Host: test-edge.com' http://52.53.251.226/
アクセスに成功しました!
次に、アクセスログメッセージを確認しましょう。OpenResty Edge ゲートウェイサーバーにログインします。
example.access.log ファイルの最後のアクセスログメッセージを確認します。
ログファイルディレクトリはグローバル設定で定義されています。
ログファイル名はアプリケーションで定義しました。
コマンドを実行します。
アクセスログメッセージにリクエスト時間が含まれていることがわかります。
そしてリモート IP アドレス。
HTTP ホスト。
そしてリクエストライン。
アクセスログメッセージが「tutorial-example」アクセスログフォーマットと一致していることがわかります。
ちなみに、設定ページでアプリケーションのアクセスログフォーマットを設定する以外に、新しいアプリケーションを作成する際にも設定できます。
アプリケーションリストページに戻ります。
新しいアプリケーションボタンをクリックして、アクセスログフォーマットを設定できる場所を確認しましょう。
ここでアクセスログフォーマットを設定できます。
アクセスログは 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、LuaJIT、GDB、SystemTap、LLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。
翻訳
英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!










































































