Kubernetesのサービスのパフォーマンスを継続的に分析する

Kubernetesのサービスのパフォーマンスを継続的に分析する

開発者は、問題の原因を特定するために、運用アプリケーションのパフォーマンスのボトルネックを確認する必要があることがよくあります。これを実行するには、多くの場合、ログやコード インストルメンテーションを通じて収集できる情報が必要になります。残念ながら、このアプローチは時間がかかることが多く、根本的な問題に関する詳細な情報が十分に提供されません。

現代的でより高度なアプローチは、プロファイリング技術とツールを適用して使用し、最も遅いアプリケーション コード、つまりリソー​​スを最も消費する領域を強調表示することです。

この記事では、Pyroscope というオープンソース ツールを使用して、Kubernetes 上で実行されているマイクロサービスの継続的な分析とインストルメンテーションについて説明します。

Pyroscopeとは何ですか?

コードを分析、デバッグ、レビューして、実行速度を上げる最も効果的な方法を決定する必要があります。プロファイリング ツールを使用してアプリケーションのコードを調べると、パフォーマンスのボトルネックを特定して修正するのに役立ちます。これにより、アプリケーションのパフォーマンスを迅速に診断できるようになり、プログラマーはパフォーマンス低下の核心の詳細まで掘り下げることができます。その結果、コードベースが合理化され、CPU/メモリの消費が削減され、ユーザー エクスペリエンスが大幅に向上します。

プロファイリングは、プログラムのメモリや時間の複雑さ、または関数呼び出しの頻度と期間を測定するプログラム分析の一種です。プロファイリング情報は、プログラムの最適化とパフォーマンスを支援するために使用されます。プロファイラー プログラムは、コードのすべての行を追跡できます。

継続的な分析

トラブルシューティングをより迅速かつ簡単にする継続的なプロファイラー。 Continuous Profiler は、環境全体のコードレベルのパフォーマンスを時間の経過とともに分析できる実稼働コード アナライザーです。プロファイルは時間の経過とともに収集されるため、新しいコードが導入された後、最もリソースを消費する機能 (またはコード行) をすぐに明らかにすることができます。最適化により、エンド クラウド プロバイダー アカウントとユーザーの両方のレイテンシを削減できます。

連続分析装置とは何ですか?

以下に、遭遇する可能性のあるアナライザーの一部を示します。

  • Pyroscope: Pyroscope は、サーバーとエージェントで構成されるオープンソース プラットフォームです。これにより、ユーザーは CPU とディスクを効率的に使用しながら分析データを収集、保存、クエリできるようになります。
  • Parca: Parca は、時間の経過とともにクエリを実行するためのプロファイルを収集、保存、提供します。 Parca は、トレースとサンプリングという 2 つの主要なタイプのプロファイルのサンプリング分析に重点を置いているため、オープン ソースであり、実稼働環境に導入できます。
  • Datadog: Datadog Continuous Profiler は、本番環境を含むあらゆる環境でコードのパフォーマンスを常に分析および比較します。非効率的なコードによって発生する、再現が難しい本番環境の問題を特定します。自動コード分析の洞察も備えています。
  • Google - Cloud Profiler: Cloud Profiler は、運用アプリケーションから CPU 使用率とメモリ割り当て情報を継続的に収集する、オーバーヘッドの少ない統計プロファイラーです。実用的なアプリケーション分析、影響の少ない本番環境プロファイリング、幅広いプラットフォーム サポートを備えています。

パイロスコープを使用する理由

Pyroscope の調査を始める前に、市場で入手可能な他の継続的な分析ツールとどう違うのかを見てみましょう。 DataDog と Google Cloud Profiler は業界で広く使用されています。ある Reddit ユーザーが指摘したように、Pyroscope が他の 2 つよりも優れている理由はいくつかあります。

出典: Datadog、Google Cloud、Pyroscope の継続的分析機能の比較

Pyroscope は、分析データ専用のストレージ エンジンを構築し、データをできるだけ効率的に保存およびクエリすることに重点を置いています。プロキシ サーバー モデルを使用して、アプリケーションから Pyroscope サーバーに構成ファイルを送信します。

出典: Pyroscope はどのように機能しますか?

Pyroscope を使用すると、任意の言語のパーサーがデータを送信し、ストレージ エンジンがそのデータを効率的に保存できるようになります。たとえば、Pyroscope には、Go、Python、Ruby、eBPF、Java、.NET、PHP、Rust 用の言語固有のエージェントがあります。

一方、Parca は少し異なるアプローチを採用しており、eBPF を利用して C、C++、Go などの言語をコンパイルします。執筆時点では、他の言語のサポートが進行中です。 Pyroscope と同様に、HTTP エンドポイントから任意の pprof 形式のプロファイルを読み取ることもできます。

理論的には、これらの言語はすべて最終的にコンパイルされてカーネル上で実行されるため、eBPF はこれらの言語のいずれでも動作するはずです。しかし、実際には、Python のようなインタープリタ型言語で eBPF を実行すると、関数名が人間には判読できない場合がよくあります。これは、シンボルがこれらの言語に保存されていないためです。

このため、Pyroscope は言語固有のアナライザーと eBPF アナライザーの両方をサポートしています。これには、カーネル レベルでのみ動作する eBPF と比較して、言語固有のエージェントを統合するための作業が若干多く必要になります。しかし、より実用的で人間が判読できる構成ファイルの利点も得られます。

Pyroscope をインストールするにはどうすればよいですか?

Docker、Linux のいずれを使用する場合でも、また Ruby や Go のドキュメントを探している場合でも、Pyroscope はサーバーを起動してからエージェントを起動できます。カスタム設計されたストレージ エンジンにより、目標が 10 秒であっても 10 か月分のソフトウェア分析データであっても、高速なクエリが可能になります。

— パイロスコープのウェブサイト

minikube を使用して Kubernetes クラスターを実行します。 minikube を使用してクラスターを作成します。

 minikube スタート

Helm チャート リポジトリを追加します。


helm リポジトリにpyroscope - io を追加しますhttps://pyroscope-io.github.io/helm-chart

Helm チャートをインストールします。

 helm でpyroscope をインストールし、 pyroscope -io / pyroscope -- サービス設定しますタイプ= ノードポート

Pyroscope Helm チャートが正常にインストールされたことを確認します。

 ヘルムリスト

Pyroscope が実行されているかどうかを確認します。

 kubectl すべて取得

Kubernetes クラスターで Pyroscope が実行されるようになったので、アプリケーションを使用する手順に進みます。このデモでは Google マイクロサービスを使用します。

Google マイクロサービス デモを Pyroscope と統合する

pyroscope バイナリを使用するようにコンテナ イメージを変更します。このバイナリはアプリケーションを起動し、監視のために自身を挿入します。詳細については、この Pyroscope のドキュメントを参照してください。

デモンストレーションには、Google Microservices の Python、Go、.NET マイクロサービスを使用します。すべての変更は GitHub の Google マイクロサービス ブランチにプッシュされます。各サービスの変更点を見てみましょう。

注: Google Microservices デモで Pyroscope を試すには、Docker イメージを自分でビルドする必要はありません。 「マイクロサービスから分析データを取得する」セクションに示されているように、Kubernetes マニフェストを適用するだけです。

(1)パイソン

Python で記述された電子メール サービス アプリケーションを使用します。 Pyroscope で Python アプリケーションを使用するには、Dockerfile に次の変更を加える必要があります。

 コピー-- from = pyroscope / pyroscope : 最新/ usr / bin / pyroscope / usr / bin / pyroscope
CMD [ "pyroscope""exec""python""email_server.py" ]

Dockerfile を編集した後、同じフォルダーでイメージのビルドとプッシュに進みます。

 docker ビルド -t beellzrocks / emailservice : 最新
docker push beellzrocks / emailservice : 最新

(2).NET

.NET 用の Cart Service アプリケーションを使用します。 Pyroscope で .NET アプリケーションを使用するには、Dockerfile に次の変更を加える必要があります。

 コピー-- from = pyroscope / pyroscope : 最新/ usr / bin / pyroscope / usr / bin / pyroscope
ENTRYPOINT [ "pyroscope""exec""-spy-name""dotnetspy""/app/cartservice" ]

Dockerfile を編集した後、イメージのビルドとプッシュに進みます。

(3)行く

Go で記述された製品カタログ サービス アプリケーションを使用します。 Go アプリケーションを Pyroscope で使用するには、server.go に次の変更を加える必要があります。

 輸入
pyroscope "github.com/pyroscope-io/pyroscope/pkg/agent/profiler"


関数main (){

パイロスコープ開始( pyroscope . Config {
アプリケーション名: osGetenv ( "アプリケーション名" )、
サーバーアドレス: osGetenv ( "SERVER_ADDRESS" )、
})
// ここにコード

server.go を編集した後、イメージのビルドとプッシュに進みます。

マイクロサービスから分析データを取得する

Pyroscope でイメージを使用するために Kubernetes マニフェストを変更しました。

kubernetes-manifests.yaml ファイルには、すべてのアプリケーション リソースが含まれています。上記の手順で構築したイメージ、つまり電子メール サービス、ショッピング カート サービス、製品カタログ サービスを使用するように編集しました。

 コンテナ:
- 名前: サーバー
画像: beellzrocks / emailservice

Kubernetes で Pyroscope を実行する場合は、次の変更を加える必要があります。

  • SYS_PTRACE 機能を追加しました。
  • 環境変数を使用して、エージェントに Pyroscope サーバーの場所とアプリケーション名を伝えます。
 コンテナ:
- 名前: サーバー
環境:
- name : PYROSCOPE_SERVER_ADDRESS # Pyroscope サーバーポートを変更するには変更します
: "http://pyroscope:4040"
- name : PYROSCOPE_APPLICATION_NAME # UI 表示されるアプリケーション
: "email.service"
セキュリティコンテキスト:
機能:
追加
-SYS_PTRACE

これで、すべてのサービスをデプロイするために、Kubernetes マニフェストをクラスターに適用できます。

 kubectl apply -f https://raw.githubusercontent.com/infracloudio/microservices-demo-dev/master/release/kubernetes-manifests.yaml

Pyroscope サービスの URL を取得します。

 minikube サービスパイロスコープ
 | -- -- -- -- -- |  -- -- -- -- -- |  -- -- -- -- -- -- |  -- -- -- -- -- -- -- -- -- -- -- -- -- -- - |
| 名前空間| 名前| ターゲットポート| URL |
| -- -- -- -- -- | -- -- -- -- -- | -- -- -- -- -- -- | -- -- -- -- -- -- -- -- -- -- -- -- -- -- - |
| デフォルト| パイロスコープ| http / 4040 | http://192.168.49.2:30639 |
| -- -- -- -- -- | -- -- -- -- -- | -- -- -- -- -- -- | -- -- -- -- -- -- -- -- -- -- -- -- -- -- - |
🎉 デフォルトのブラウザでサービスdefault /pyroscope を開く

Pyroscope UI にアクセスするには、次の URL にアクセスします: http://192.168.49.2:30639 (上記のフィードバックに基づいて実際のアドレスを開きます)。

Pyroscope サーバー CPU を備えた Pyroscope UI

上のスクリーンショットからわかるように、Pyroscope 自体は、データをローカルに保存するときに CPU をほとんど使用しません。 Badger データベースを使用してデータをローカルに保存します。

パイロスコープのリソース利用

Kubernetes ポッドの監視は、リソースの使用状況、利用率、コスト管理の観点からも重要です。 Pyroscope は使用するリソースが少なく、オーバーヘッドも低くなります。

Pyroscope の CPU 使用率

パイロスコープによる監視

Pyroscope は、プログラミング言語に応じて異なるエージェントを使用してコードを分析します。以下は、Pyroscope を使用したプロファイリング アプリケーションからのフレーム グラフの例です。

Go 製品カタログ サービス アプリケーションを備えた Pyroscope

Pyroscope と .Net カート アプリケーション

Python メール アプリケーションを備えた Pyroscope

結論は

継続的な分析パフォーマンスは、エンドユーザーの期待に応えるための重要な要素です。パフォーマンスの問題が発生した場合は、エンドユーザー エクスペリエンスに影響する前に問題を診断する準備をする必要があります。

したがって、Pyroscope などのツールを使用して、アプリケーションを最適化し、問題を解決し続け、ユーザーに超高速のアプリケーション パフォーマンスを提供し続けましょう。 Pyroscope は、実稼働環境でコードのパフォーマンスを向上させ、クラウド インフラストラクチャのコストを削減する方法を理解するのに役立つ可視性のレイヤーを公開します。

<<:  ロシア・ウクライナ戦争のIT暴露:我が国のITと財政自立の価値と難しさ

>>:  中国のクラウドコンピューティング戦争:外国のクラウドの衰退の簡単な歴史

推薦する

ウェブマスターの面接体験談: アウトラインを効果的に作成する方法

最近、ウェブマスターの面接に関わるようになりました。面接は初めてなので、初心者の視点から、ここでいく...

高品質なコンテンツと外部リンクを構築するときに注意すべき点

ウェブマスターのウェブサイトは、開設から登録まで順調に進むことはなく、私も例外ではありません。私が以...

#おすすめ# cmivps: 全品30%オフ、香港の無制限トラフィックVPS、Windowsシステムをサポート

cmivps香港VPSは3つの新しいニュースをもたらしました:(1)双方向トラフィックが単方向トラフ...

ウェブサイト最適化におけるキーワードデータベースの役割

ウェブサイトの最適化を行う際、まずキーワードを選択する必要があります。小規模サイトの場合、選択は比較...

インターネットマーケティングは伝統的なマーケティング概念と結びつく必要がある

確かに、オンライン マーケティング自体はマーケティング手段の 1 つであり、従来のマーケティングを基...

ウェブサイトの収集が不安定になる理由をご存知ですか?

私のように、多くのウェブマスターがGGとBaiduのインデックスを分析したことがあると思います。この...

JD.com の 3 段階分類ページの SEO、ユーザー エクスペリエンス、マーケティング手法の簡単な分析 (パート 2)

昨日の「JDの3階層カテゴリーページのSEO、ユーザーエクスペリエンス、マーケティング手法の簡単な分...

Zookeeper を廃止した後、Kafka はトピックとコンシューマー グループをどのように保存しますか?

筆者の会社で現在使用している Kafka のバージョンは 2.2.1 であるため、Kafka カーネ...

本当に必要なのはどのような検索エンジンでしょうか?

私たちは「なぜ検索エンジンが必要なのか」と尋ねる習慣を失ってしまったようです。なぜなら、私たちは検索...

古くなった冗長なウェブサイトコンテンツは削除すべきでしょうか?

インターネット社会では、誰もがトラフィックを獲得し、ユーザーの好みに応えるために時間と競争しています...

3人の男が営利目的で「伝説のプライベートサーバー」を立ち上げ、著作権侵害の疑い

楽山市の20代前半の若者3人が個人的にネットワークサーバーを設置し、人気のオンラインゲーム「Lege...

創業者の解釈: Akamai のクラウド コンピューティング戦略の将来

著者: トム・レイトン博士 1998 年に Akamai Technologies を共同設立し、2...

データ統合手法 ETL、ELT、リバース ETL の詳細な説明

翻訳者 |チェン・ジュン校正:孫淑娟データ パイプライン プロジェクトに適したデータ統合アプローチを...

新しい KVM: alpharacks - $18/年/512MB RAM/30GB HDD/1.5TB トラフィック/QN/ロサンゼルス

alpharacks からの最新のメールには、OVZ 仮想化に基づく VPS を提供するだけではなく...

企業サイト構築の3つのステップの簡単な分析

今日のインターネット時代は変化の時代です。1 秒に起こったことは次の 1 秒で変化します。もちろん、...