通常の Python プログラムをトレースする場合は、Python トレース モジュールを参照してください。
ただし、提供した例でOpenStackが何をしているのかを理解するのにトレースが役立つとは思わない:
nova boot --image myimage --flavor 1 server1
OpenStack は、単一の Python プログラムとして実装されていません。個別のプロセスで Linux サービスとして実行される Python プログラムのコレクションとして実装され、通常、これらのプロセスは複数のマシンに分散されます。
このnova
プログラムは、HTTP 経由で OpenStack エンドポイントに対して要求を行う小さなクライアント プログラムです。上記のリクエストを行うと、次のサービスが関係します。OpenStack の「サービス」のほとんどは、実際には複数の Linux の「サービス」(別名デーモン) によって実装されていることに注意してください。これらは、実行時に関係する OpenStack サービスと Linux サービス/デーモンですnova boot
。
- ID サービス (keystone)
- コンピューティング サービス (新星)
- nova-api
- 新星スケジューラ
- 新星計算
- nova-network (新しい Network Service (quantum) を使用しない場合)
- イメージ サービス (概要)
新しいネットワーク サービス (クォンタム) が含まれる場合、ここにはさらに多くのサービスが含まれることに注意してください。
OpenStack は、次の 2 つのメカニズムを使用してプロセス間通信を行います。
- OpenStack プロジェクトの境界を越えた通信用の HTTP (REST API を使用) (例: Compute サービスと Image サービス間の通信)
- 単一の OpenStack プロジェクト内のサービス間の通信 (例: nova-apiとnova-compute間の通信) 用の AMQP ベースのメッセージ キュー (通常は RabbitMQ ですが、Qpid または ZeroMQ の場合もあります)
これらのサービスはデータベースを介して情報を共有することもできますが、制御のスレッドを追跡することに関心がある場合、これは重要ではありません。
で示した例ではnova boot
、サービス全体で発生するすべての相互作用に注意してください。
- novaクライアントは HTTP 経由で Identity サービス (keystone) に対してリクエストを行い、ユーザー名とパスワードを渡し、トークンを取得します。
- novaクライアントは HTTP 経由で Compute サービス ( nova-api )に対してリクエストを行い、新しいサーバーを作成します。
- nova-apiは、メッセージ キューを介してnova-schedulerにインスタンスを実行するように要求します。
- nova-schedulerは計算ホストを選択し、メッセージ キューを介して要求を作成し、そのホストでnova-computeに新しい仮想マシン インスタンスを起動します。
- nova-computeはメッセージ キューを介してnova-networkにリクエストを送信し、新しいインスタンスのネットワーク構成を行います。
- nova-computeは、HTTP 経由で Image Service ( glance-api ) に対して仮想マシン イメージ ファイルのリクエストを行います。
glance-apiは、 glance-registryに対して HTTP 経由で要求を行い、イメージ バックエンドからファイルを取得します。
関連するすべての OpenStack コードを含むトレースを生成する場合は、関連する各サービスをトレースする必要があります。
自動トレースを試みるよりも、コードを読むことをお勧めします。ログ ファイルには多くのデバッグ情報が含まれているため、ログ ファイルを確認することもできます。ログ ファイルの読み取り方法に関するガイダンスについては、最近リリースされたOpenStack Operations Guideを参照してください。