OpenResty Edge では、エラーログを 2 つの場所で確認できます。各アプリケーションは Admin コンソール内に専用のエラーログページを持ち、Dashboard にはすべてのゲートウェイサーバーから収集されたグローバルエラーログがまとめて表示されます。いずれもリクエスト ID・ゲートウェイ・サーバー・ログレベル・時間間隔で絞り込むことができ、個々のゲートウェイや Admin サーバー上の生の error.log ファイルまで掘り下げることも可能です。本チュートリアルではこれらをひととおり解説し、リクエスト ID(Req-ID) によるリクエスト単位のトレースやアクセスログとどのように関係するかも説明します。

OpenResty Edge のエラーログ概要図

OpenResty Edge でアプリケーションのエラーログを確認する方法

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

OpenResty Edge Admin コンソールのログイン画面

引き続き、test-edge.com ドメインのサンプルアプリケーションを使用します。

アプリケーション一覧に表示された test-edge.com サンプルアプリケーション

このアプリケーションに移動します。

コンソールで test-edge.com アプリケーションに入る

ここをクリックして、このアプリケーションのエラーログを確認します。

アプリケーションのエラーログページへのメニュー項目

ご覧のとおり、すでにいくつかのエラーログが記録されています。このページにはエラーログに関する重要な情報が表示されています。

記録済みのエラー項目を一覧表示するアプリケーションのエラーログページ

例えば、リクエスト ID、エラーログメッセージ、ホスト名、リクエストボディ、クライアント IP アドレスなどです。

ここで、アプリケーションに変更を加えてみましょう。変更後に test-edge.com ドメインにアクセスすると、新しいエラーログメッセージが生成されます。

ここでは、すでにページルールを定義しています。

test-edge.com の既存のページルール

このページルールは、事前に定義されたアップストリームへのリバースプロキシを設定しています。

アップストリームへのリバースプロキシとして構成されたページルール

Upstreams ページに移動しましょう。

OpenResty Edge のアップストリーム設定ページ

アップストリームサーバーを編集します。

アップストリームサーバーの項目を編集

このアップストリームサーバーを無効化します。アップストリームサーバーが無効化されると、アプリケーションにアクセスした際に Bad Gateway エラーが発生します。

Bad Gateway エラーを発生させるためアップストリームサーバーを無効化

この変更を保存します。

アップストリームサーバーの変更を保存

いつものように、先ほどの変更を反映させるために新しいバージョンをリリースする必要があります。

変更したページルールを反映する新しいバージョンを作成

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

コンソールのバージョンリリース確認ボタン

リリースします!

すべてのゲートウェイサーバーへバージョンをリリース

新しいバージョンがすべてのゲートウェイサーバーに同期されました。

すべてのゲートウェイサーバーに同期されたバージョン

これで、新しいページルールがすべてのゲートウェイクラスターとサーバーにプッシュされました。

ゲートウェイクラスターへ設定を同期——同期アニメーションの開始

ゲートウェイクラスターへ設定を同期——同期の進行中

ゲートウェイクラスターへ設定を同期——同期の完了

これらの設定変更にはサーバーのリロード、再起動、またはバイナリのアップグレードは必要ありません。そのため、非常に効率的でスケーラブルです。

リロードや再起動を伴わないライブ設定同期

では、リクエストを送信してみましょう。

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

curl -sSI http://test-edge.com

ターミナルから test-edge.com へ curl リクエストを送信

ご覧のとおり、Bad Gateway エラーが返されました。このエラーはアプリケーションのエラーログに記録されます。

502 Bad Gateway レスポンスを表示するターミナル

また、サーバーからのレスポンスにリクエスト ID(Req-ID)が含まれていることがわかります。この ID をコピーして、対応するログ情報を検索するのに使用します。

レスポンスヘッダーに表示された Req-ID リクエスト ID の値

アプリケーションのエラーログページに戻りましょう。エラーログ情報を確認します。

アプリケーションのエラーログページに戻り新しい項目を探す

予想通り、先ほどのリクエストがエラーログを生成しました。新しく生成されたエラーログがリストの一番上に表示されています。

リスト最上部に表示された新しい Bad Gateway エラーログ

リクエスト ID・ゲートウェイ・サーバー・ログレベルでエラーログを絞り込む

このアプリケーションのエラーログは比較的少ないです。次に、オンラインの他のアプリケーションのエラーログを見てみましょう。

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

複数のオンラインドメインが並ぶアプリケーション一覧ページ

OpenResty.com ウェブサイトのエラーログを確認してみましょう。

OpenResty ウェブサイトのアプリケーションを選択

そのページに移動します。

OpenResty ウェブサイトのアプリケーションを開く

エラーログページに移動します。ここにはより多くのエラーログが記録されています。

多数の項目が記録された openresty.com のエラーログページ

上部のフィルタリングクエリ条件は、問題を正確に特定するのに役立ちます。

問題特定に役立つエラーログのフィルタリング条件

例えば、リクエスト ID でフィルタリングできます。

リクエスト ID でエラーログメッセージを絞り込む

またはゲートウェイでフィルタリングできます。

ゲートウェイでエラーログメッセージを絞り込む

サーバーも、

サーバーでエラーログメッセージを絞り込む

エラーログレベルも、

エラーログレベルでエラーログメッセージを絞り込む

そして、時間間隔でもフィルタリングできます。

時間間隔でエラーログメッセージを絞り込む

では、ゲートウェイでメッセージをフィルタリングしてみましょう。

エラーログメッセージを絞り込むゲートウェイを選択

aws-us-west ゲートウェイを選択します。

aws-us-west ゲートウェイで絞り込む

ご覧のとおり、aws-us-west ゲートウェイにはエラーログがありません。

OpenResty Edge の 3 種類のグローバルエラーログ

アプリケーションのエラーログを確認した後、グローバルエラーログを見てみましょう。グローバルエラーログは Dashboard ページに表示されます。

Dashboard ページのグローバルエラーログ領域

Dashboard 上のグローバルエラーログの入口

では、Dashboard ページに移動してグローバルエラーログを確認しましょう。

Dashboard のグローバルエラーログへ移動

3 種類のエラーログがあることがわかります。

3 種類のグローバルエラーログ:グローバル・Admin サイト・ログサーバー

グローバルエラーログ。

グローバルエラーログのタブ

Admin サイトのエラーログ。

Admin サイトエラーログのタブ

ログサーバーのエラーログ。

ログサーバーエラーログのタブ

まず、グローバルエラーログを見てみましょう。

グローバルエラーログの一覧を表示

グローバルエラーログはゲートウェイサーバーによって収集され、特定のアプリケーションに属していません。

ゲートウェイサーバーが収集し特定アプリに属さないグローバルエラーログ

エラーログをフィルタリングすることができます。

グローバルエラーログを絞り込む

次に、Admin サイトのエラーログを見てみましょう。

Admin サイトエラーログを開く

これらのエラーログは Admin コンソールから収集されたものです。

Admin コンソールから収集される Admin サイトエラーログ

ログの条件によるフィルタリングにも対応しています。

Admin サイトエラーログの条件フィルタリング

例えば、ログレベル「Error」を選択できます。

Error ログレベルのフィルターを選択

「Error」レベルかつ繰り返し回数が 1 を超える(2 回以上の)ログがハイライト表示されていることがわかります。

繰り返し回数が 1 を超える Error レベルのログをハイライト表示

最後に、ログサーバーのエラーログを見てみましょう。

ログサーバーエラーログを開く

このページには OpenResty Edge ログサーバーからのエラーログが表示されています。

OpenResty Edge ログサーバーから収集されるログサーバーエラーログ

ここでもログをフィルタリングすることができます。

ログサーバーエラーログを絞り込む

ご覧のとおり、グローバルエラーログとアプリケーションエラーログにはログレベルがありますが、すべてのレベルのログがシステムによって報告されるわけではありません。

グローバルログとアプリケーションログで利用可能なログレベルを比較

グローバル設定ページで報告するログレベルを設定できます。

報告するログレベルを設定するグローバル設定ページ

ここでは「warn」に設定しています。これは警告レベル以上のログのみが報告されることを意味します。

報告するログレベルを warn に設定

設定可能なエラーログレベルには「warn、error、crit、alert」などがあります。

利用可能なログレベル:warn、error、crit、alert

ローカルデプロイメントでは、任意のログレベルを設定することができます。

ゲートウェイ/Admin サーバー上で error.log ファイルを確認する方法

では、OpenResty Edge ゲートウェイサーバーにログインして、error.log ファイルを確認してみましょう。

SSH でゲートウェイサーバーにログイン

最後のエラーログメッセージを確認します。

ゲートウェイサーバーで最後のエラーログメッセージを確認

ゲートウェイサーバーのエラーログメッセージはここに書き込まれています。

ゲートウェイサーバーの error.log ファイルの場所

このコマンドを実行します。

ゲートウェイの error.log を読み取るコマンドを実行

ゲートウェイサーバーのエラーログメッセージを確認できます。

ターミナルに表示されたゲートウェイサーバーのエラーログメッセージ

サーバーからログアウトします。

ゲートウェイサーバーの SSH セッションを終了

次に、OpenResty Edge の Admin サーバーにログインして、error.log ファイルを確認しましょう。

OpenResty Edge Admin サーバーにログイン

最後のエラーログメッセージを確認します。

Admin サーバーで最後のエラーログメッセージを確認

OpenResty Edge Admin のエラーログメッセージはここに書き込まれています。

OpenResty Edge Admin の error.log ファイルの場所

このコマンドを実行します。

Admin の error.log を読み取るコマンドを実行

OpenResty Edge Admin のエラーログメッセージを確認できます。

ターミナルに表示された OpenResty Edge Admin のエラーログメッセージ

よくある質問

OpenResty Edge のどこでエラーログを確認できますか?

2 つの場所があります。各アプリケーションは Admin コンソール内に専用のエラーログページを持ち、そのアプリケーションの各ドメインのエラーが表示されます。それとは別に、Dashboard にはすべてのゲートウェイサーバーにまたがって収集されたグローバルエラーログが表示されます。生のファイルを見たい場合は、ゲートウェイや Admin サーバーに SSH でログインし、その error.log を直接読むこともできます。

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

OpenResty Edge の各レスポンスは、レスポンスヘッダーにリクエスト ID(Req-ID として表示)を付与します。その値をコピーし、アプリケーションのエラーログページのリクエスト ID フィルターに貼り付けると、該当する項目に直接ジャンプできます。リクエストトレースの全体像については、リクエスト ID とは をご覧ください。

3 種類のグローバルエラーログとは何ですか?

Dashboard 上では、グローバルエラーログはグローバルエラーログ(ゲートウェイサーバーが収集し、特定のアプリケーションに属さない)、Admin サイトエラーログ(Admin コンソールが収集)、ログサーバーエラーログ(OpenResty Edge ログサーバーが収集)に分かれています。それぞれログレベルやその他の条件で絞り込めます。

報告するエラーログレベルはどう設定しますか?

報告するログレベルはグローバル設定ページで設定します。例えば warn に設定すると、warn レベル以上のメッセージのみが報告されます。利用可能なレベルには warnerrorcritalert があります。ご自身のローカルデプロイメントでは、必要なレベルを自由に選べます。

問題を特定するためにエラーログをどう絞り込めばよいですか?

エラーログページでは、リクエスト ID・ゲートウェイ・サーバー・エラーログレベル・時間間隔で結果を絞り込めます。例えば、単一のゲートウェイ(aws-us-west など)を選んでエラーが一箇所に限られているか確認したり、Error レベルを選んで最も深刻なメッセージだけを表示したりできます。

OpenResty Edge について

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

このチュートリアルが気に入りましたら、ぜひ当ブログや YouTube チャンネル を購読してください。ありがとうございます!

著者について

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

翻訳

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