YSQL 言語を使用した Nginx プロセスのリアルタイムリクエスト数カウント
Nginx や OpenResty が処理するリクエスト数を動的に統計する方法をお知りになりたいですか?ログや API に依存せず、実行中のプロセスを直接読み取り専用データベースとして扱い、クエリを実行できる簡単かつ強力なツールが欲しいですか?これらの質問に対する答えが「はい」であれば、OpenResty XRay とそれに付属する run-ysql
コマンドラインツールをきっと気に入っていただけるでしょう。
OpenResty XRay は革新的な製品で、YSQL を使用してプロセスの動的トレーシングを行うことができます。YSQL は SQL に似た言語で、様々なデータソースと操作をサポートしています。YSQL がアクセスできるデータソースの1つに ngx.reqs
があり、これには nginx リクエストの情報が含まれています。基盤となる実装では、OpenResty XRay は当社の Y 言語によって駆動され、Stap+、eBPF+、GDB、ODB など、異なる環境で複数の異なるランタイムをサポートしています。
本記事では、run-ysql
コマンドラインツールを使用して nginx プロセス上で YSQL クエリを実行し、プロセスのパフォーマンスと動作を深く理解する方法をご紹介します。いくつかの簡単な例を通じて、YSQL と OpenResty XRay の強力さと簡便さを体験していただけます。
run-ysql ツールのインストール方法
run-ysql
ツールを使用する前に、Linux システムに openresty-xray-cli
パッケージをインストールする必要があります。openresty-xray-cli
パッケージには、run-ysql
コマンドと OpenResty XRay とインタラクティブするための他のツールが含まれています。
インストール方法は、使用している Linux ディストリビューションによって異なります。ただし、どのディストリビューションを使用している場合でも、まず OpenResty XRay の Agent ソフトウェアをインストールする必要があります。これにより、システムに適切なソフトウェアリポジトリが自動的に有効化されます。Agent ソフトウェアは OpenResty の公式ウェブサイトからダウンロードし、指示に従ってインストールできます。
以下は、Agent ソフトウェアをインストールした後に openresty-xray-cli
パッケージをインストールする一般的な例です:
Fedora/CentOS/RHEL/Rocky/Oracle
Fedora、CentOS、または RHEL を使用している場合、dnf または yum コマンドを使用して openresty-xray-cli
パッケージをインストールできます。例えば:
$ sudo dnf install openresty-xray-cli
これらのディストリビューションの古いバージョンでは、yum コマンドを使用できます:
$ sudo yum install openresty-xray-cli
Debian/Ubuntu
Debian または Ubuntu を使用している場合、apt コマンドを使用して openresty-xray-cli
パッケージをインストールできます。例えば:
$ sudo apt-get update
$ sudo apt-get install openresty-xray-cli
openresty-xray-cli
パッケージをインストールした後、以下のコマンドを実行して run-ysql
ツールが正常に動作することを確認できます:
$ which run-ysql
以下のような出力が表示されるはずです:
/usr/bin/run-ysql
これで、run-ysql
ツールを使用してプロセス上で YSQL クエリを実行する準備が整いました。
リアルタイムの総リクエスト数の統計
nginx が処理した総リクエスト数をどのように統計するのでしょうか? nginx サーバーに関する最も基本的な指標の 1 つは、一定期間内に処理したリクエスト数です。この情報を取得するには、以下の YSQL クエリを使用できます:
select count(*) from ngx.reqs
このクエリは ngx.reqs
テーブルの行数を返します。この行数は nginx が処理したリクエスト数に対応します。run-ysql
コマンドラインツールを使用してこのクエリを実行できます。クエリ文を 1 つの引数として、nginx ワーカープロセスのプロセス ID(PID)を別の引数として受け取ります。例えば、nginx ワーカープロセスの PID が 9708 の場合、以下のように実行できます:
$ run-ysql -e 'select count(*) from ngx.reqs' -p 9708
...
Goto https://8pu4z6.xray.openresty.com.cn/targets/1355/history/4378702043 for charts
run-ysql
コマンドはターゲットプロセス上でクエリを実行し、URL を出力します。この URL には表形式のクエリ結果が含まれています。ブラウザでこの URL を開くと、以下のような内容が表示されます:
row | count |
---|---|
1 | 106512 |
この表は、3秒間(run-ysql
のデフォルトの持続時間)で nginx ワーカープロセスが 106512 件のリクエストを処理したことを示しています。なんと素晴らしいことでしょう!
特定のリクエストのフィルタリング
では、特定の URI プレフィックスを持つリクエスト数をどのように統計するのでしょうか? nginx サーバーに関するもう1つの有用な指標は、特定の URI プレフィックスを持つリクエストの数です。例えば、"/css/" ディレクトリ内の静的ファイルを対象とするリクエストの数を知りたい場合があります。この情報を取得するには、以下の YSQL クエリを使用できます:
select count(*) from ngx.reqs where uri prefix '/css/'
このクエリは、ngx.reqs
テーブルの uri
列が /css/
で始まるかどうかをチェックして ngx.reqs
テーブルの行をフィルタリングし、一致する行の数をカウントします。前回と同じ run-ysql
コマンドを使用してこのクエリを実行できますが、異なるクエリパラメータを使用します。例えば:
$ run-ysql -e "select count(*) from ngx.reqs where uri prefix '/css/'" -p 9708
...
Goto https://8pu4z6.xray.openresty.com.cn/targets/1355/history/4378707156 for charts
...
run-ysql
コマンドはクエリを実行し、URL を出力します。この URL には表形式のクエリ結果が含まれています。ブラウザでこの URL を開くと、以下のような内容が表示されます:
row | count |
---|---|
1 | 47026 |
この表は、3 秒間で nginx ワーカープロセスが URI プレフィックス /css/
を持つ 47026 件のリクエストを処理したことを示しています。かなりの数ですね!
Web コンソールでの YSQL の使用
プロセス上でデータをクエリおよび分析するために YSQL を使用するもう1つの方法は、OpenResty XRay の Web コンソールを使用することです。Web コンソールは、ターゲットプロセス、アナライザー、チャート、ダッシュボード、アラートを作成および管理できるグラフィカルユーザーインターフェースです。
OpenResty XRay の Web コンソールで YSQL を使用するには、以下の手順を実行します:
- OpenResty XRay の Web コンソールにログインします。
- 「アナライザー」タブをクリックし、「アナライザーの作成」ボタンをクリックします。アナライザーは、ターゲットプロセス上で実行され、チャート用のデータを生成する YSQL クエリです。
- アナライザーの名前と説明を入力します。次に、「クエリ」ボックスに YSQL クエリを入力します。YSQL でサポートされているすべての構文とデータソースを使用できます。
- 「保存」ボタンをクリックしてアナライザーを保存します。「今すぐ実行」ボタンをクリックしてアナライザーをすぐに実行することもできます。
OpenResty XRay の Web コンソールで YSQL を使用することで、コードを書いたりコマンドラインツールを使用したりすることなく、プロセスのデータを簡単に探索できます。
真の非侵襲的トレーシング
OpenResty XRay とその YSQL ツールチェーンの最も魅力的な特徴の1つは、ターゲットの Nginx または OpenResty プロセスの協力なしに動作することです。これは、OpenResty XRay と YSQL を使用するために以下のことを行う必要がないことを意味します:
- ターゲットプロセスに追加のモジュールやプラグインをインストールする必要はありません。OpenResty XRay と YSQL は、設定や機能に関係なく、プロセスのデータにアクセスして分析できます。
- ターゲットプロセスをコンパイルする際に特別なビルドオプションを使用する必要はありません。OpenResty XRay と YSQL は、ソースコードを変更したり再コンパイルしたりすることなく、すべてのバイナリ実行可能ファイルに対して機能します。
- OpenResty XRay と YSQL を使用する際にターゲットプロセスを再起動する必要はありません。OpenResty XRay と YSQL は、プロセスの通常の操作を妨げたりダウンタイムを引き起こしたりすることなく、動的にプロセスに追加または削除できます。
- OpenResty XRay と YSQL の使用によるパフォーマンスへの影響を心配する必要はありません。OpenResty XRay と YSQL は、動的トレーシング、サンプリング、集約、フィルタリングなどの先進的な技術を使用して、データ収集と分析のオーバーヘッドを最小限に抑えています。OpenResty XRay と YSQL を使用することのメリットと比較すると、オーバーヘッドは取るに足りません。さらに、トレーシングとサンプリングを行っていない場合、ターゲットプロセスは絶対に 100% フルスピードで動作します。
OpenResty XRay とその YSQL ツールチェーンを使用することで、ターゲットプロセスのパフォーマンスと信頼性を犠牲にすることなく、動的トレーシングと分析の利便性と強力さを享受できます。
結論
YSQL ステートメントと run-ysql
コマンドラインツールを使用して、nginx リクエストの数を動的に測定する方法をご紹介しました。YSQL と OpenResty XRay を使用して、ログや API を必要とせずに、実行中のプロセスのデータにアクセスして分析することがいかに簡単で便利であるかをご覧いただきました。
YSQL がサポートする構文とデータソースは、ここで紹介したものよりもはるかに多くあります。例えば、YSQL を使用して Lua 変数、システムコール、ネットワークパケット、MySQL クエリ、Redis コマンドなどのデータにアクセスできます。また、YSQL を使用してデータに対して集約、グループ化、ソート、フィルタリング、結合などの様々な操作を行うこともできます。
将来的には、より多くのターゲットアプリケーションタイプを YSQL クエリの「仮想テーブル」としてサポートする計画もあります。例えば、Envoy、Apache Traffic Server (ATS) などのさらに多くのサーバープロセス、Python、Go、Java の様々なアプリケーションフレームワーク、さらには MySQL、Pg などのデータベースプロセスなどです。可能性は無限大です。
YSQL と OpenResty XRay についてさらに詳しく知りたい場合は、YSQL ユーザーマニュアルをご覧ください。
著者について
章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。
章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty XRay(マイクロサービスおよび分散トラフィックに最適化された多機能
翻訳
英語版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!