BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース マイクロサービスを実行しているコンテナのデバッグ: KubeCon NAにおけるツールのレビュー

マイクロサービスを実行しているコンテナのデバッグ: KubeCon NAにおけるツールのレビュー

原文(投稿日:2019/02/24)へのリンク

2018年12月にシアトルで開催されたKubeCon NAにおいて、コンテナ化されたマイクロサービスをデバッグするためのいくつかのツールが、カンファレンスセッションとスポンサーブースのデモを通じて発表された。市場において「アクティブ」デバッグツールと「パッシブ」デバッグツールの間で、注目すべき分離が発生している。これらのカテゴリのそれぞれの例が、RookoutSquashである。

アクティブデバッグは、開発者がデバッグツールと利用セッションに一般的に期待するもの、つまりアプリケーションの実行中にブレイクポイントのセット、停止、ステップができることと、変数をウォッチして動的に変更できる機能である。マイクロサービスベースのアプリケーションでは、各アプリケーションが異なる言語で書くことができ、アプリケーションの実行フローが複数のネットワーク境界を越えて、複数のオペレーティングシステムプロセスにまたがることができるため、アクティブデバッグを実装するのは難しい。メリットとして、この一般的なアプローチはかなり前から存在しているため、デバッグツールと関連した機能は、言語SDKやIDEに含まれているため、一般的にコードの変更や関連する依存関係を変更する必要はない。

開発者はブレイクポイントのセット、ウォッチの追加、動的にロギングステートメントの追加ができるが、通常はプログラムの実行を停止できないため、パッシブデバッグは、高度なロギングとトレースと見ることができる -- それらは単にパッシブ観察者である。 このアプローチの利点は、デバッグが邪魔にならない(つまりユーザーのアプリケーションへの要求は、デバッグプロセスでは停止やブロックされない)また、複数のブレイクポイントの設定を通じた仮説の認識およびテストのサイクルが高速になる。しかし一般的にこのアプローチはコードベースの変更が必要、またはライブラリやSDKを含める必要があり、依存性の実行はアプリケーションのクリティカルパスに配置される可能性がある。

InfoQは最初にRookoutブースでツールのデモを見て、その後エンジニアチームの何人かと会話した。Rookoutは、任意の環境で実行しているコードに対して動的なブレイクポイントと(他のアクションの中で)ログステートメントの追加を可能にする商用SaaSベースの「パッシブ」マイクロサービスとサーバーレスデバッガである。全てのデバッグ構成は、コードの表示とデバッグ結果の情報も表示できるIDEのようなWebインターフェイスで指定できる

Debugging microservices with Rookout.

Rookout Web UI トップウインドウに「ブレイクポイント」を設定て、下部にデバッグ情報を表示(画像ソース: Rookoutデモビデオ)

Rookoutチームは、実際には「従来のアクティブデバッガ」のようにアプリケーションを一時停止や停止をしないため、彼らのブレイクポイント機能を「ノンブレイキングブレイクポイント」と説明した。彼らはまた、ブレイクポイントを設定するために「再起動、再配置、追加のコードが必要などがなく」、非常に迅速に仮説の検証とバグの検出ができると述べている。

アプリケーションの実行フローの中でRookoutブレイクポイントにヒットした結果として、エンジニアはスタックトレース、グローバル変数の値を表示したり、特定の変数を「ウォッチ」できる。InfoQはJavaのデバッグの場合ブレイクポイント機能は、Javaプログラミング言語エージェントでJVMで実行されるinstrumentを可能にするjava.lang.instrumentをベースとしていることを学んだ。アプリケーションのinstrumentationは、MavenやGradleを介して、コードベースへのRookout dependencyを追加することによって実現される。

InfoQはまたsolo.ioの創業者兼CEOであるIdit Levine氏と、オープンソースのマイクロサービスデバッガであるSquashとKubernetesアプリケーション用の関連するデバッガであるKubeSquashについて議論した。 Levine氏は現在のマイクロサービスのデバッグには2つのアプローチによって支援されていると説明した: 1つ目は、分散トレーシングを使う、特に事後分析のためのトランザクションまたはワークフローのトレーシングを助けるOpenTracing -- デバッグメタデータか「baggage」; 2つ目は、レイテンシの問題を特定するためにネットワークをモニターするIstioのようなサービスメッシュを使ったものだ。これらのツールはしかしながらパッシブデバッグのみをサポートしており、開発者はアプリケーションの実行中に「アクティブに」実行を停止したり、アプリケーション内の変数を変更したりできない。

Squashは「コンテナオーケストレーションプラットフォーム上で動作するマイクロサービスアプリ開発者に、モダンで人気のあるデバッガの機能を提供する」ことを目的にしている。Envoyのようなプロキシを使って双方向トラフィックをサポートするように構成することで、SquashはエンジニアのローカルIDEとオーケストレーションプラットフォーム上で実行するアプリケーションのギャップを埋める。gdb, delveJDWP Javaツールのようなデバッガは、ローカルで実行して、リモートで実行中のアプリケーションにアタッチできる。エンジニアは、デバッグに必要なコンテナ、pod、サービス、イメージを選択でき、彼らのコードにブレイクポイントをセット、実行中の変数の値をフォロー、マイクロサービス間を移動しながらコードをステップスルーし、それらの値を実行時に変更できる。

Levine氏のKubeCon NA 2017でのプレゼンテーションの一連のスライドは、Squashによるデバッグのプロセスを示している:

Solo.io's Squash microservices and container debugging steps.

KubeSquashは、Kubernetes固有のプロジェクトで、Squashと似た歴史を共有している。KubeSquashはgdbかdlvを使用してデバッグセッションを開始するコマンドラインツール「ksquash」を提供している。

KubeSquashの起動は非常に簡単で、サーバーを必要としません。そのユーザーインターフェイスは非常にシンプルです: 単一のコマンドksquashを実行して、希望のpodを対象にすると、設定や手間をかけることなくデバッグセッションが自動的に開始されます。

アクティブデバッグスペースに存在するその他のツールには次のものがある: CNCFでホストされたTelepresence。DatawireのエンジニアであるPhilip Lombardi氏が関連セッションで発表した「Effective Development with Kubernetes: Techniques, Tools & Telepresence」。txn2のkubefwdについてKelsey Hightower氏が先日、彼のサポートをツイートした。現在サポートされているまたは、サポートするポジションにある、その他の開発者ワークフローツールで、この種類の機能には、Garden, Tilt, Skaffoldなどがある。

これはまた、マイクロサービスとコンテナベースのドメインが明らかに縮んでいる中、インダストリが今参照している「観測性」ツールとパッシブデバッグツールとの間の距離は注目に値する。InfoQGoogle, Facebook, Lyft, Honeycomb, LightStepチームからこの例をカバーしている。

この記事に星をつける

おすすめ度
スタイル

BT