OpenResty XRay がどのようにしてアプリケーションの問題特定と効率化を支援するかをご覧ください。

詳細はこちら LIVE DEMO

このチュートリアルでは、OpenResty に付属する resty コマンドラインツールの使用方法をご紹介いたします。

cd ~
export PATH=/usr/local/openresty/bin:$PATH
which resty

截图 1

通常、以下のパスに配置されています。

-V オプションを使用してバージョン番号を確認することができます。

resty -V

截图 3

OpenResty の事前ビルドされた Linux バイナリパッケージをご利用の場合は、openresty-resty パッケージをインストールする必要があります。

dnf list installed openresty-resty

截图 4

これは openresty メインパッケージには含まれていないためです。

例えば、resty コマンドを使用して “hello world” を実行するのは非常に簡単です。

resty -e 'print("Hello World")'

截图 6

-e オプションにご注目ください。

あるいは、ターミナル上で Lua スクリプトを実行することもできます。

echo 'print("Hello World")' > hello.lua
cat hello.lua
resty hello.lua

截图 8

このため、OpenResty を使用して新しいコマンドラインアプリケーションを作成するのにも適しています。

ここでは、ノンブロッキング I/O も実装可能です。

time resty -e 'ngx.sleep(1) ngx.say("done")'

截图 10

cosocket API を使用して openresty.com の 443 ポートに接続してみましょう。

resty -e 'local sock = ngx.socket.tcp() print(sock:connect("openresty.com", 443))'

截图 11

または、軽量スレッドを使用することもできます。

resty -e 'ngx.thread.wait(ngx.thread.spawn(function () print("in thread!") end))'

截图 12

Lua モジュールも簡単に使用できます。test モジュールを作成してみましょう。

mkdir lua/
vim lua/test.lua

lua/test.lua ファイルは以下のようになります。

local _M = {}

function _M.hello() print("Hello") end

return _M

截图 13

そして、-I オプションを使用して lua/ ディレクトリを Lua モジュールの検索パスに追加します。

resty -I lua/ -e 'require "test".hello()'

截图 14

-I オプションがない場合、モジュールを見つけることができません。

resty -e 'require "test".hello()'

截图 15

これは、lua/ ディレクトリがデフォルトで Lua モジュールの検索パスに含まれていないためです。

resty.shell のような標準的な Lua モジュールを直接ロードすることもできます。

resty -e 'local ok, stdout = require "resty.shell".run([[echo ok]]) print(stdout)'

截图 17

このモジュールは、少量の shell コマンドをノンブロッキングで実行するために使用されます。

--shdict オプションを使用して lua 共有メモリディクショナリを定義することもできます。

resty --shdict 'dogs 10m' -e 'print(ngx.shared.dogs:set("age", 11))'

截图 19

複数の共有ディクショナリをこのように定義できます。

resty --shdict 'dogs 7m' --shdict 'cats 5m' -e 'print(ngx.shared.dogs, " ", ngx.shared.cats)'

截图 20

カスタムの nginx 設定コードを簡単に注入することもできます。

resty --http-conf 'lua_regex_match_limit 102400;' -e 'print "ok"'

截图 21

LuaJIT の JIT コンパイラを使えます。

ホットな Lua スクリプトを作成してみましょう。

echo 'local a = 0 for i = 1, 1e8 do a = a + 1 end print(a)' > bench.lua
cat bench.lua

截图 23

そして、JIT コンパイラを完全に無効化します。

time resty -joff bench.lua

截图 24

比較のため、JIT コンパイラを有効にした場合の速度を確認することができます。

time resty bench.lua

截图 25

あるいは、-jv オプションを使用してコンパイルされた Lua コードパス、つまり「トレース」を確認することもできます。

resty -jv bench.lua

截图 26

さらに詳細な情報として、コンパイルされたバイトコードダンプ、IR コードダンプ、マシンコードダンプなども確認できます。

resty -jdump bench.lua

サポートされているすべての機能は、-h オプションでいつでも確認できます。

resty -h

または、restydoc ツールを使用してドキュメントを参照することもできます。

restydoc resty-cli

事前ビルドされたバイナリパッケージを通じて openresty をインストールした場合は、openresty-doc または openresty-restydoc パッケージをインストールする必要があります。

dnf list installed openresty-doc

截图 30

restydoc ツールについては、別の専用のビデオチュートリアルでより詳しく説明いたします。

著者について

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

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

翻訳

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