数ヶ月前、PythonとNode.js SDKのユーザー向けにプロファイリングのアルファ版がリリースされましたが、本日、PythonとNode.js向けのプロファイリングをベータ版に移行しました。
プロファイリングはベータ版の間、無料で使用できます。正式リリースが近づいたら、また更新情報をお届けします。
プロファイリングは、コードのパフォーマンスボトルネックを発見するのに役立つ重要なツールです。
Sentryのプロファイラでは、実行速度の遅いクエリのコードのファイル/行番号まで正確に把握することができます。
特定の関数の実行に時間がかかっている理由を即座に把握し、コード内の関数を最適化することでアプリケーションのパフォーマンスを向上させることができます。
最新のリリースでは、プロファイリング製品にいくつかの改良を加えています。
Pythonのアップデート
- Geventのサポート:SentryプロファイリングがPythonのgeventをサポートするようになりました。geventライブラリ(Gunicorn WSGI HTTPサーバとよくペアになっている)を使用しているすべてのユーザーに影響があり、以前はデータを取得できなかったgeventコルーチン(リクエスト処理コード)内で実行されているコードを確認できるようになりました。
- WSGIリクエストだけでなく、すべてのトランザクションのプロファイリングをサポート:以前は、SentryはWSGIリクエストのみをプロファイルすることができました。現在では、すべてのトランザクション(手動で開始したものも含む)がプロファイルされ、この動作はプロファイルをサポートする他のSDKとの一貫性を担保します。
これらの機能アップデートはいずれも追加設定を必要とせず、SDKをアップデートすればすぐに動作し、プロファイリングのインサイトを確認することができます。
Node.jsのアップデート
- Node.js 18および19のサポート:SentryプロファイリングがNode.jsの最新バージョン(v18とv19)に対応しました。
- Google Cloud Runに対応:Google Cloud Run環境にデプロイした際に、Node.jsプロファイラがセグメンテーションしてしまうバグを修正しました。これで、Google Cloud Runにデプロイした際に、本番環境で正常にプロファイリングできるようになります。
- このパッケージは、コンパイル済みのバイナリとともに提供されるため、ソースからのビルドはあまり必要ありません。
製品の機能改善
SDKのサポート強化に加え、いくつかの新しいプロファイリング機能のアップデートにより、ユーザー体験(UX)を向上させました。Sentryプロファイリングでは、ユーザーは以下のことができるようになりました。
- フレイムチャートの関数からGitHubのコードへのリンク
- ソースマッピングが設定されている場合、フレイムチャートの関数フレームを右クリックすると、GitHubのその関数のコードに遷移します。これにより、長時間実行される関数のソースコードに直接移動できるため、パフォーマンス問題の修正プログラムを素早く書くことができ、トラブルシューティングの時間を短縮することができます。
- これは、ソースコード管理が設定されているNode.jsとPythonのプロジェクトで機能します。
- トランザクションの処理時間をフレイムチャート上で可視化する
- トランザクションが関連付けられたすべてのプロファイルは、トランザクションからの期間をフレームチャート上に直接出力します。これにより、トランザクションとプロファイルを行き来することなく、特定の処理で実行されたコードを1つの統一された画面で簡単に把握することができます。
- 期間から対応するプロファイルに移動する
- Sentryのトレースを有効にしている場合、トランザクションイベントの詳細ページに移動し、ウォーターフォールビューから期間を選択し、「View Profile」ボタンをクリックすると、その期間に発生するプロファイルの部分に移動することができます。これにより、パフォーマンス問題を抽象的な上層〜詳細な下層にまで目的に合った粒度で分析することができます。
結論
Sentryのプロファイリング機能を繰り返し強化する中で、初期の多くのお客様から、Sentryパフォーマンスとプロファイリングは、パフォーマンスワークフローにおいて、しばしばうまく組み合わせて利用できるという話を聞きます。
Sentryパフォーマンスは、お客様がサービス全体をトレースし、動作の遅いデータベースクエリや外部呼び出しを特定することを可能にします。例えば、プロファイリングのお客様の一人は次のように述べています。
Sentryパフォーマンスで最も遅いAPIコールを確認することは非常に有用です。私たちはパフォーマンスの最適化を行い、p50とp95の劇的な改善を確認しました。” – Aunty Grace(オーストラリアのヘルスケア企業)の開発者、シェーン・ホルコム氏
プロファイリングはトレースを補完するもので、CPU消費を抑えるためにコードのどの部分を最適化する必要があるかについて、ファイルや行レベルで詳細に知らせてくれます。パフォーマンスとプロファイリングを併用することで、プロファイルとトランザクションを関連付け、遅いリクエストの根本的原因を特定し、迅速に修正することができます。
数回のクリックでプロファイリングを始められます。まず、パフォーマンスの計測が完了していることを確認してください(わずか5行のコードで完了します)。
P.S. プロファイラを聞いたことがない、プロファイリングとロギングやトレースとの比較を知りたい、あるいは単に興味があるという方は、プロファイリングとは何か、なぜ運用中のアプリケーションをプロファイリングする必要があるのかを説明するブログシリーズ「Profiling 101」をご覧ください。
Pythonのプロファイリングの例やNodeのプロファイリングの例については、こちらをご覧ください。また、GitHub、Discord、またはメール(profiling@sentry.io)にて、ご意見・ご感想をお待ちしています。
Sentryは、アプリケーションコードの健全性を監視するために不可欠です。エラートラッキングからパフォーマンスモニタリングまで、開発者は、フロントエンドからバックエンドまで、アプリケーションをより明確に把握し、より迅速に解決し、継続的に学習することができます。Sentryは、世界中の350万人以上の開発者と85,000以上の組織に愛され、Disney、Peloton、Cloudflare、Eventbrite、Slack、Supercell、Rockstar Gamesといった世界で最も有名な企業の多くにコードレベルの観測機能を提供しています。
毎月、世界中で人気のサービスやアプリケーションから、数十億件の例外を処理し続けています。
IchizokuはSentryと提携し、日本でSentry製品の導入支援、テクニカルサポート、ベストプラクティスの共有を行なっています。Ichizokuが提供するSentryの日本語サイトについてはこちらをご覧ください。またご導入についての相談はこちらのフォームからお気軽にお問い合わせください。