OpenResty Edge における リクエスト IDReq-ID ヘッダー)は、ゲートウェイがすべてのリクエストに付与する一意の識別子で、複雑な分散システムの中から特定の 1 つのリクエストを追跡できるようにするものです。この機能はデフォルトで有効になっており、プロキシヘッダーとレスポンスヘッダーの両方に付与されます。問題が発生したときは、その ID を Edge 管理コンソール内蔵の リクエスト ID デコーダー に貼り付けると、そのリクエストを処理したアプリケーションのドメイン、ゲートウェイパーティション、ゲートウェイクラスター、ゲートウェイサーバーが判明し、エラーログや WAF ログの該当エントリにそのまま移動できます。本記事では、リクエスト ID を有効にし、デコードし、それを使って 1 件のリクエストに絞ってエラーログと WAF ログをフィルタリングする手順を解説します。

ビジネスの成長に伴い、システムはますます複雑になる可能性があります。複雑なシステムでは、リクエストを正確に追跡することが非常に重要であり、同時に困難でもあります。

大規模な分散システム全体で 1 件のリクエストを追跡する

OpenResty Edge は、リクエストに一意の ID を付与することで、リクエストの追跡を容易にします。これが本日のトピックです:リクエスト ID。

OpenResty Edge はすべてのリクエストに一意の Req-ID を付与して追跡を容易にする

リクエスト ID のグローバル設定

OpenResty Edge の管理者用 Web コンソールにアクセスしましょう。これはコンソールのサンプルデプロイメントです。各ユーザーは独自のローカルデプロイメントを持っています。

OpenResty Edge 管理コンソールのダッシュボード

グローバル設定ページに移動します。ここでは、すべてのリクエストヘッダーにリクエスト ID を追加するかどうかを設定できます。

OpenResty Edge 管理コンソールでグローバル設定ページを開く

グローバル設定ページのリクエスト ID 設定項目

この設定項目はデフォルトでオンになっており、各リクエストのプロキシヘッダーとレスポンスヘッダーに Req-ID フィールドが含まれることを意味します。

では、openresty.org にリクエストを送信して、この ID がどのように使用されるかを見てみましょう。

openresty.org にリクエストを送信して Req-ID を確認する

リクエストヘッダーに「Req-ID」フィールドがあることがわかります。

レスポンスヘッダーに返された Req-ID フィールド

リクエスト ID デコーダー

次に、ツールページに移動します。

OpenResty Edge 管理コンソールでツールページを開く

リクエスト ID デコーダーページに進みます。

OpenResty Edge のリクエスト ID デコーダーページ

先ほど確認したリクエスト ID を入力します。

リクエスト ID デコーダーの入力欄に Req-ID を貼り付ける

このボタンをクリックしてデコードします。

リクエスト ID デコーダーのデコードボタンをクリックする

下に、そのリクエストに関連する詳細情報が表示されていることがわかります。

アプリケーションのドメイン名、

デコード結果に表示されたアプリケーションのドメイン

ゲートウェイパーティション、

デコード結果に表示されたゲートウェイパーティション

ゲートウェイクラスター、

デコード結果に表示されたゲートウェイクラスター

そしてゲートウェイサーバーなどです。

デコード結果に表示されたゲートウェイサーバー

ここに 2 つのボタンがあります。openresty.org アプリケーションのエラーログページと WAF ログページでこのリクエスト ID を検索できます。

このリクエスト ID をエラーログと WAF ログで検索する 2 つのボタン

では、その方法をデモンストレーションしましょう。

「Search in Error Logs」ボタンをクリックします。

デコードしたリクエスト ID で「Search in Error Logs」をクリックする

これによりエラーログページに移動します。

リクエスト ID でフィルタリングされた OpenResty Edge のエラーログページ

ログが表示されていないのは、使用したリクエスト ID が正常なリクエストからのものだからです。このリクエストはエラーログを生成していません。

正常なリクエストの ID にはエラーログが存在しない

リクエスト ID のフィルターをクリアします。

エラーログページの検索条件をクリアする

すべてのエラーログの詳細が表示されます。

そのうちの 1 つのリクエスト ID をコピーします。

エラーログのエントリからリクエスト ID をコピーする

それを検索ボックスに貼り付けます。

エラーログの検索ボックスにリクエスト ID を貼り付ける

エラーログリストがフィルタリングされ、選択したリクエスト ID に一致するエラーログのみが表示されていることがわかります。

選択した 1 つのリクエスト ID に絞り込まれたエラーログ

これがエラーログページです。同様に、WAF によってブロックされた疑わしいリクエストのページでも、すべてのリクエストにリクエスト ID 情報が含まれています。

WAF のログページに移動します。

ブロックされたリクエストを一覧表示する OpenResty Edge の WAF ログページ

WAF によってブロックされたすべてのリクエストと、それぞれのリクエスト ID が表示されます。

ここでもリクエスト ID を使用してリクエストをフィルタリングできます。

OpenResty Edge で WAF ログをリクエスト ID でフィルタリングする

また、リスト内で直接リクエスト ID をデコードすることもできます。

リクエスト ID の 1 つをクリックします。

WAF ログのリスト内でリクエスト ID をクリックしてデコードする

WAF ログのリスト内に表示されたリクエスト情報のポップアップ

このポップアップのリンクをクリックすると、対応するページに移動します。例えば、ゲートウェイサーバーのリンクをクリックしてみましょう。ゲートウェイサーバーのページに移動しました。

デコード結果のリンクをたどってゲートウェイサーバーのページへ移動する

この時点でもリクエスト情報のポップアップは開いたままです。他のページに移動したい場合があるかもしれないからです。

閉じたい場合は、閉じるボタンをクリックするだけです。

リクエスト情報のポップアップウィンドウを閉じる

よくある質問

OpenResty Edge のリクエスト ID とは何ですか?

リクエスト ID とは、OpenResty Edge がすべてのリクエストに付与する一意の識別子で、複雑な分散システムの中を移動する特定の 1 つのリクエストを追跡できるようにするものです。プロキシヘッダーとレスポンスヘッダーの両方に Req-ID フィールドとして付与され、この設定はグローバル設定ページでデフォルトで有効になっています。ID には処理された場所の情報がエンコードされているため、後からデコードして、単一のアプリケーション、ゲートウェイパーティション、クラスター、サーバーまでリクエストをたどることができます。

OpenResty Edge でリクエスト ID をデコードするにはどうすればよいですか?

Edge 管理コンソールの ツール ページを開き、リクエスト ID デコーダー に進んで Req-ID の値を貼り付け、デコードをクリックします。すると、そのリクエストを処理したアプリケーションのドメイン、ゲートウェイパーティション、ゲートウェイクラスター、ゲートウェイサーバーが表示されます。WAF ログページでは、リスト内のリクエスト ID を直接クリックすることで、ページを離れることなく同じデコード情報をインラインで確認することもできます。

特定のリクエストのエラーログや WAF ログを見つけるにはどうすればよいですか?

リクエスト ID をデコードした後、Search in Error LogsSearch in WAF Logs のボタンを使うと、そのリクエストに一致するエントリに直接移動できます。エラーログページでは、検索ボックスにリクエスト ID を貼り付けることで、そのリクエストの 1 行だけに表示を絞り込むこともでき、WAF ログページでも同じリクエスト ID によるフィルタリングに対応しています。そのため、無関係なログエントリをたどる必要がありません。リクエスト ID をログ以外も含めて横断的に検索したい場合は、OpenResty Edge のグローバル検索を参照してください。

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 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

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