0

たとえば、Openstack でコマンドを入力し、イメージ myimage を使用してインスタンスを起動し、フレーバー 1 を使用するとします。

nova boot --image myimage --flavor 1 server1 

このコマンドを実際にトレースして、コードが Python にあるために実行される関数、コマンドの実行中に入力されるファイルなどの詳細を取得するにはどうすればよいですか?

申し訳ありませんが、私は Linux 初心者で、いくつかの呼び出しを追跡する方法を見つけようとしています。これを行う代わりに、すべてのファイルを調べてこれを行います。

これを行う簡単な方法はありますか?

4

3 に答える 3

2

通常の 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) を使用しない場合)
  • イメージ サービス (概要)
    • 一瞥-API
    • 一瞥レジストリ

新しいネットワーク サービス (クォンタム) が含まれる場合、ここにはさらに多くのサービスが含まれることに注意してください。

OpenStack は、次の 2 つのメカニズムを使用してプロセス間通信を行います。

  • OpenStack プロジェクトの境界を越えた通信用の HTTP (REST API を使用) (例: Compute サービスと Image サービス間の通信)
  • 単一の OpenStack プロジェクト内のサービス間の通信 (例: nova-apinova-compute間の通信) 用の AMQP ベースのメッセージ キュー (通常は RabbitMQ ですが、Qpid または ZeroMQ の場合もあります)

これらのサービスはデータベースを介して情報を共有することもできますが、制御のスレッドを追跡することに関心がある場合、これは重要ではありません

で示した例ではnova boot、サービス全体で発生するすべての相互作用に注意してください。

  1. novaクライアントは HTTP 経由で Identity サービス (keystone) に対してリクエストを行い、ユーザー名とパスワードを渡し、トークンを取得します。
  2. novaクライアントは HTTP 経由で Compute サービス ( nova-api )に対してリクエストを行い、新しいサーバーを作成します
  3. nova-apiは、メッセージ キューを介してnova-schedulerにインスタンスを実行するように要求します。
  4. nova-schedulerは計算ホストを選択し、メッセージ キューを介して要求を作成し、そのホストでnova-computeに新しい仮想マシン インスタンスを起動します。
  5. nova-computeはメッセージ キューを介してnova-networkにリクエストを送信し、新しいインスタンスのネットワーク構成を行います。
  6. nova-computeは、HTTP 経由で Image Service ( glance-api ) に対して仮想マシン イメージ ファイルのリクエストを行います。
  7. glance-apiは、 glance-registryに対して HTTP 経由で要求を行い、イメージ バックエンドからファイルを取得します。

    関連するすべての OpenStack コードを含むトレースを生成する場合は、関連する各サービスをトレースする必要があります。

自動トレースを試みるよりも、コードを読むことをお勧めします。ログ ファイルには多くのデバッグ情報が含まれているため、ログ ファイルを確認することもできます。ログ ファイルの読み取り方法に関するガイダンスについては、最近リリースされたOpenStack Operations Guideを参照してください。

于 2013-03-10T02:19:50.893 に答える
1

Lorin が言ったことに加えて、「nova --debug boot ...」を実行して、nova CLI が keystone と nova-api に対して行う REST API 呼び出しを確認できます。

于 2013-03-10T05:49:11.117 に答える
0

straceプロセスIDが取得できれば使えます。

方法を説明するリンクは次のとおりです。

http://www.cyberciti.biz/tips/linux-strace-command-examples.html

于 2013-03-09T14:40:57.153 に答える