DUICUO

Pyroscope というオープンソースのリアルタイム パフォーマンス分析ツールをお勧めします。

ウェブサイトの公開後、トラフィックの増加や一時的な障害はユーザーエクスペリエンスの低下につながる可能性があります。では、パフォーマンスのボトルネックを素早く見つけるにはどうすればよいでしょうか?CPU使用率が100%の場合、根本的な問題を特定するのが難しいことがよくあります。

この記事では、開発者がコードパフォーマンスのボトルネックを迅速に特定できるPyroscopeというツールを紹介します。Pyroscopeは現在、Python、Ruby、Go環境をサポートしています。この記事ではGo環境に焦点を当てます。

パイロスコープとは何ですか?

Pyroscopeは、オープンソースのリアルタイムパフォーマンス監視プラットフォームです。シンプルなサーバーとエージェントのアーキテクチャにより、開発者はコードパフォーマンスを容易に監視できます。10秒単位のパフォーマンスデータでも、数分単位のパフォーマンスデータでも、迅速かつリアルタイムに更新されます。開発者は、この監視ツールの導入によるパフォーマンスのオーバーヘッドを心配する必要はありません。PyroscopeはBadgerキーバリューデータベースをストレージに使用しており、優れたパフォーマンスを提供します。現在、3つの言語(Python、Ruby、Go)をサポートしており、将来的にはNode.jsのサポートも予定されています。まだパフォーマンス分析ツールやプラットフォームを導入していない場合は、Pyroscopeが最適です。

パイロスコープアーキテクチャ

パフォーマンス分析ツール プラットフォームをお探しの場合、Pyroscope は開発者が安心して使用できる 3 つの重要な利点を提供します。

  • 低い CPU 使用率は既存のプラットフォームには影響しません。
  • 数年間分のデータを保存でき、10 秒間隔でデータを詳細に表示できます。
  • 保存されたデータを圧縮して、無駄なハードドライブのスペースを削減します
  • アーキテクチャはサーバーとエージェントに分かれています。Go、Python、Rubyアプリ以外にも、pyroscopeコマンドを使用して関連アプリを起動し、システムパフォーマンスを監視します。

パイロスコープアーキテクチャ図

Pyroscopeサービスを開始する

起動方法は2つあります。1つ目は、docker コマンドを使って直接起動する方法です。

  1. $ docker run -it -p 4040:4040 pyroscope/pyroscope:最新サーバー

あるいは、docker-compose を使用して起動することもできます。

  1. ---  
  2. サービス:  
  3. パイロスコープ:  
  4. 画像: "pyroscope/pyroscope:latest"  
  5. ポート:  
  6. - 「4040:4040」  
  7. 指示:  
  8. - 「サーバー」

エージェントのインストール

Goでの使用

この記事ではGoを例に挙げます。まずはパッケージをインポートします。

  1. 「github.com/pyroscope-io/pyroscope/pkg/agent/profiler」をインポートします。

次に、次のコードを main.go に追加するだけです。

  1. プロファイラー.Start(プロファイラー.Config{  
  2. アプリケーション名: "simple.golang.app",  
  3. サーバーアドレス: "http://pyroscope:4040",  
  4. })

http://pyroscope をご自身のカスタムホスト名に置き換えてください。その後、上記のURLを開いてパフォーマンス監視画面を確認してください。

画面を見ると、どの SQL ステートメントまたは関数の実行に時間がかかっているかをすぐに特定できます。

PythonおよびRuby言語での使用

  1. # Pythonを使用している場合 
  2. $ pyrscope exec python manage.py runserver  
  3. # Rubyを使用している場合 
  4. $ pyroscope exec レールサーバー

考え

このツールは非常に便利です。pprofを使えばGoの問題点を素早く見つけることができますが、それでも一部の領域ではパフォーマンスのボトルネックを手動で特定する必要があります。このプラットフォームを使えば、アプリ全体を監視でき、ユーザーは問題が発生した場合、Pyroscopeを通してどのコードが問題を引き起こしているかを素早く確認できます。