Rust アプリケーションのオンライン例外監視(OpenResty XRay を使用)
このチュートリアルでは、OpenResty XRayを使用して、Rust アプリケーションのプログラム例外(または Panic)をオンラインで解析する方法について説明します。 OpenResty XRay は、Rust オンラインプロセス内のコード例外を検出し、解析することができます。 OpenResty XRay は、プロセスがクラッシュしないキャッチされた例外を含め、Rust オンラインプロセスにおけるコード例外を検出し、解析することができます。 これらのコードパスは、OpenResty XRayが Rust 言語レベルの例外フレームマップを自動的に分析・解釈して導き出したものです。 これにより、パフォーマンスへの影響を最小限に抑えることができます。 その結果、OpenResty XRay は、パフォーマンスのオーバーヘッドやレイテンシに敏感な本番環境に適しています。
Rust アプリケーションのプログラム例外を分析
本文では、実行中の任意の Rust アプリケーションにおけるプログラム例外、つまり panic の分析をオンラインで行う方法をご紹介いたします。OpenResty XRay の Web コンソールに移動します。
現在分析中のマシンが正しいことを確認します。
正しくない場合は、リストから再選択することができます。
「Guided Analysis」ページに移動します。
ここでは、システムが分析可能な様々な種類の問題を確認できます。
「Errors & exceptions」を選択します。
「Next」をクリックします。
先ほどの Rust アプリケーションを選択します。
「Whole applicatio」を選択します。
アプリケーションのタイプが正しいことを確認します。通常、デフォルト値が正しいです。
ここでの言語レベルは「Rust」のみとなっています。
最長分析時間を設定することもできます。ここではデフォルトの 300 秒のままにします。
分析を開始します。
システムは複回数の分析を継続的に実行します。現在、初回の分析を実行中です。
初回の分析が完了し、現在 2 回目のラウンドに入っております。この例では、1 回の分析で十分です。
分析を停止します。
自動生成された分析レポートをご確認しましょう。
これは分析する問題のタイプです。「Errors & exceptions」です。
レポートでは、Rust プログラムの例外を最も多くスローするコードパスを表示します。
internal_constructor
関数は PanicInfo
構造体を構築するために使用されます。この構造体にはプログラムの異常に関する位置などの関連情報が含まれています。
panic_fmt
関数は、プログラムの異常をフォーマットし、トリガーするための低レベル関数です。
配列やスライスの境界チェックが失敗した場合、panic_bounds_check
関数が例外を投げます。これは Rust の保護メカニズムであり、実行時のメモリ境界外アクセスを防ぐことができます。
stat_client_usage
関数は対象アプリケーションのビジネスレベルのコードに属します。
詳細を表示するにはクリックしてください。
このホットコードパスは、Rust 言語レベルの例外フレームグラフから自動的に推論されたものです。
以下は問題に関するより詳細な説明と提案です。先ほど見た PanicInfo
構造体について言及しています。
また、プログラムの異常が範囲境界アクセスの失敗によって引き起こされたことも説明しています。
先ほどのホットコードパスに戻ります。この関数の緑色の枠にマウスを合わせてください。ツールチップにこの関数のソースファイル名と完全なパスが表示されます。
このソースコードの行番号は 7 です。
このアイコンをクリックして、この関数のソースファイルパスをコピーします。
vim エディタを使用してソースファイルを開きます。先ほどコピーしたファイルパスを貼り付けます。お好みのエディタを使用していただいて構いません。
OpenResty XRayが提案したように、7 行目にジャンプします。
配列のサブスクリプト client_id
が配列 CLIENTS
のサイズを超える可能性があります。先ほど見た panic_bounds_check
関数から、ここに明らかにデータサブスクリプトの範囲外アクセスが存在することがわかります。
レポートに示されているように、この行は stat_client_usage
関数内にあります。この Rust の例外は実際には Rust アプリケーション自体によってキャッチされており、Rust アプリケーションのクラッシュを引き起こすことはありません。それでも、OpenResty XRay はリアルタイムでこれを検出し、追跡することができます。
自動生成レポート
OpenResty XRay はオンラインプロセスを自動的に監視し、分析レポートを生成することもできます。「Insights」ページに切り替えます。
「Insights」ページで、日次および週次の自動レポートを見つけることができます。そのため、「Guided Analysis」機能を使用する必要はありません。
もちろん、「Guided Analysis」はアプリケーションの開発とデモンストレーションに非常に有用です。
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(マイクロサービスおよび分散トラフィックに最適化された多機能
翻訳
英語版 の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!