2013-03-09 43 views
0

在OpenStack的,可以說,例如,我輸入命令,我使用圖像MYIMAGE啓動一個實例,並用香精1.我如何追蹤特定的終端命令?

nova boot --image myimage --flavor 1 server1 

我怎樣才能真正追溯這一命令,並得到像什麼細節函數執行,因爲代碼是在Python中,它執行命令時輸入的文件等,

對不起,我是一個linux noob,我試圖找到方法來追蹤幾個調用。而不是通過瀏覽所有文件並執行此操作來完成此操作。

有沒有簡單的方法來做到這一點?

回答

2

如果你想跟蹤一個普通的Python程序,看一看的Python trace module

不過,我不認爲你會發現跟蹤有用的瞭解OpenStack的在你提供的例子是這樣做的:

nova boot --image myimage --flavor 1 server1 

OpenStack的未實現爲一個單一的Python程序。它被實現爲Python程序的集合,它們在不同的進程中作爲Linux服務運行,並且通常這些進程分佈在多個機器上。

nova程序只是一個小型的客戶端程序,它通過HTTP向OpenStack端點發出請求。當您執行上述請求時,涉及以下服務。請注意,大多數OpenStack「服務」實際上是由多個Linux「服務」(aka daemons)實現的。這些是您執行nova boot時涉及的OpenStack服務和Linux服務/守護進程。

  • 身份服務(梯形)
    • 梯形
  • 計算服務(新星)
    • NOVA-API
    • 新星調度
    • NOVA-計算
    • NOVA-網絡(如果不使用新的網絡服務(量子))
  • 圖片服務(掃視)
    • 一目瞭然-API
    • glance-registry

請注意,如果涉及新的網絡服務(量子),則會涉及更多的服務。

開棧確實使用兩種機制的進程間通信:

  • HTTP(使用REST API)用於跨開棧項目邊界(例如,計算服務和圖像服務之間的通信)
  • AMQP-通信基於消息隊列(典型的RabbitMQ,但也可以是Qpid或ZeroMQ)用於單個的OpenStack項目中不同服務的通信(例如,通信之間NOVA-APINOVA-計算

該服務還通過數據庫共享信息,但如果您有興趣追蹤控制線程,則這並不重要。

對於你nova boot給的例子,注意所有不同服務所發生的相互作用:

  1. 新星客戶端發出對身份服務(梯形)通過HTTP的請求,通過用戶名和密碼,獲取令牌
  2. nova客戶端通過HTTP針對計算服務(nova-api)向create a new server發出請求。
  3. nova-api通過消息隊列發送請求到nova-scheduler來運行一個實例。
  4. nova-scheduler選擇計算主機並通過消息隊列發出請求到nova-compute在該主機上啓動一個新的虛擬機實例。
  5. nova-compute通過消息隊列發送請求到nova-network爲新實例做網絡配置。
  6. nova-compute通過HTTP針對虛擬機映像文件的圖像服務(glance-api)發出請求。
  7. glance-api通過HTTP請求glance-registry從圖像後端檢索文件。

    如果您想生成一個包含所有涉及的OpenStack代碼的跟蹤,則必須跟蹤所涉及的每個服務。

我建議你只是閱讀代碼而不是試圖做自動化的痕跡。您還可以查看日誌文件,因爲它們包含大量的調試信息。查看最近發佈的OpenStack Operations Guide,瞭解如何閱讀日誌文件的一些指導。

+0

非常感謝您的詳細解答! – Pavan 2013-03-10 16:16:27

1

除了Lorin說你可以運行「nova --debug boot ...」以查看nova CLI對keystone和nova-api所做的REST API調用。