OpenResty XRay は動的トレーシング製品であり、アプリケーションを変更することなくオンラインアプリケーションを分析することができます。その使用は非常に効率的かつ安全です。ソフトウェアに X 線検査を行うように、実行中のプロセスをいつでも深く理解することができます。

OpenResty XRay がサポートするアプリケーションの一つに Kong があります。これは、オープンソースの OpenResty フレームワークを基に構築された人気の API ゲートウェイソフトウェアです。Kong には柔軟な拡張メカニズムがあり、コミュニティや自らで構築された多くのプラグインを使用することができます。しかし、これらのプラグインが CPU のボトルネック、高メモリ使用量、またはメモリリークなどの問題を引き起こすことがあります。どのプラグインが問題を引き起こしているのか、そしてその影響がどの程度なのかを見つけ出すにはどうすればよいでしょうか。

ここで OpenResty XRay が役立ちます。実行中の Kong サーバーインスタンスにおいて、ロードされているすべてのプラグインの CPU とメモリ使用状況をサンプリングして統計を取ることができます。Kong に特別なプラグインやビルドオプションをインストールする必要はありません。OpenResty XRay を実行し、Kong プロセスを指定するだけで、その驚くべき効果を目の当たりにすることができます。

この記事では、OpenResty XRay を使用してサーバープロセス内の Kong プラグインの CPU とメモリ使用状況を分析する方法をご紹介します。また、結果の例をお見せし、その意味を説明します。

サーバープロセス内のすべての Kong プラグインの CPU 使用状況

OpenResty XRay は、Kong プロセスを数秒から数分間サンプリングすることができます。その期間はプロセスの忙しさによって異なります。その後、現在ロードされているすべてのプラグイン間で CPU 時間がどのように分配されているかを示します。

例えば、以下は OpenResty XRay が Kong プロセスのために生成した円グラフです:

CPU 时间在所有加载的插件中的使用分布情况

ご覧のように、この場合、prometheus プラグインが CPU 時間の大部分を占めており、次いで ip-restriction プラグインが続いています。他のプラグインの CPU 使用量は無視できるレベルです。これは、Kong サーバーの CPU パフォーマンスを最適化したい場合、これら 2 つのプラグインに焦点を当て、改善や置き換えが可能かどうかを検討すべきであることを意味します。

もちろん、これは一例に過ぎません。より複雑な Kong サーバーでは、より多くのプラグインがここに表示され、トラフィックと設定に応じて分布が異なる可能性があります。

Kong プラグイン内の CPU 使用状況

OpenResty XRay は、すべての Kong プラグインの詳細を深く掘り下げ、どの Lua または C コードパスがより多くの CPU 時間を消費しているかを確認するのにも役立ちます。その簡単な方法の一つは、以下のような Lua-land CPU フレームグラフを見ることです:

このグラフは、サンプリング期間中に CPU 上で実行された Lua コードのコールスタックを示しています。バーが広いほど、より多くの CPU 時間を占有しています。バーにマウスを合わせると、関数名、ファイル名、行番号、CPU 時間の割合などの詳細情報を見ることができます。

このグラフを見ることで、Lua コード内のホットスポットやパフォーマンスの問題を素早く発見し、それに応じて最適化することができます。また、異なるプラグインや同じプラグインの異なるバージョンを比較して、CPU 使用量にどのような違いがあるかを確認することもできます。

サーバープロセス内のすべての Kong プラグインのメモリ使用状況

同様に、OpenResty XRay は Kong サーバープロセス内のメモリ使用状況を簡単にサンプリングすることができます。

以下は、OpenResty XRay が同じ Kong プロセスのために生成した別の円グラフです:

所有加载的 Kong 插件的内存使用分布

この場合、bot-detection プラグインがメモリの大部分を占めており、prometheus プラグインが二番目であることがわかります。他のプラグインのメモリ使用量はかなり少なくなっています。これは、Kong サーバーのメモリ使用量を減らしたい場合、これら 2 つのプラグインを調査し、最適化や置き換えが可能かどうかを検討すべきであることを意味します。

同様に、これは一例に過ぎません。異なる Kong サーバーでは、設定されているプラグインやその他の設定に応じて、異なる結果が見られる可能性があります。

Kong プラグイン内のメモリ使用状況

OpenResty XRay は、Kong プラグイン内の Lua GC オブジェクトのメモリ使用状況を分析するのにも役立ちます。簡単な方法の一つは、GC オブジェクト参照フレームグラフを見ることです。これは、すべての GC オブジェクト参照パス上のメモリ使用分布を示しています。

このグラフは、サンプリング期間中にメモリを占有している Lua GC オブジェクトの参照パスを示しています。バーが広いほど、より多くのメモリを占有しています。バーにマウスを合わせると、オブジェクトタイプ、サイズ、メモリの割合などの詳細情報を見ることができます。

このグラフを見ることで、Lua コード内のメモリリークや非効率な問題を素早く発見し、それに応じて最適化することができます。また、異なるプラグインや同じプラグインの異なるバージョンを比較して、メモリ使用量にどのような違いがあるかを確認することもできます。

サーバーへの追加負荷

OpenResty XRay の使用が Kong サーバーのパフォーマンスに影響を与えるのではないかと心配されるかもしれません。答えは「影響しません」です。サンプリング時に Kong サーバープロセスに追加される負荷は通常非常に小さく、無視できるレベルです。サンプリングしていない時は、プロセスの実行速度は全く影響を受けません。

OpenResty XRay は非侵襲的で軽量であるように設計されています。通常の操作を妨げることはなく、コードや設定を変更する必要もありません。

今後の展開

私たちはここで立ち止まるつもりはありません。OpenResty XRay をさらに強力で有用なものにするための計画がまだまだあります。現在開発中の機能には以下のようなものがあります:

  • Kong の異なるプラグイン間のディスク I/O、ネットワーク I/O、その他のリソースメトリクスのリアルタイム分布を表示します。これにより、システム内のボトルネックやホットスポットを特定し、それに応じて最適化することができます。
  • 他の技術スタックやオープンソースソフトウェアのサポート。OpenResty XRay を、基盤となる技術に関係なく、あらゆるオンラインアプリケーションを分析できる汎用ツールにしたいと考えています。検討中の対象には、Nginx モジュール、Envoy 拡張機能、PostgreSQL 拡張機能、Perl/Python/Ruby モジュールやライブラリなどがあります。

追加のメトリクスや機能に関するご提案やご要望がありましたら、ぜひお聞かせください。私たちは常にお客様のフィードバックに耳を傾け、お客様のニーズに応えるために製品を継続的に改善しています。

結論

本記事では、OpenResty XRay を使用してサーバープロセス内の Kong プラグインの CPU とメモリ使用状況を分析する方法をご紹介しました。また、結果の例をお示しし、その意味を説明しました。

OpenResty XRay を使用することで、どのプラグインが他のプラグインよりも多くのリソースを消費しているか、そして全体的なパフォーマンスにどの程度影響を与えているかを簡単に見つけ出すことができます。そして、この情報を使用して Kong サーバーを最適化し、より高速かつスムーズに動作させることができます。

OpenResty XRay 製品についてさらに詳しく知りたい方、またはオンラインアプリケーションの他の側面でどのように役立つかについて知りたい方は、弊社のウェブサイトをご覧いただくか、お問い合わせください。詳細な情報をご提供いたします。

OpenResty XRay について

OpenResty XRay動的トレーシング製品であり、実行中のアプリケーションを自動的に分析して、パフォーマンスの問題、動作の問題、セキュリティの脆弱性を解決し、実行可能な提案を提供いたします。基盤となる実装において、OpenResty XRay は弊社の Y 言語によって駆動され、Stap+、eBPF+、GDB、ODB など、様々な環境下で複数の異なるランタイムをサポートしております。

著者について

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

翻訳

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