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 程序实现的。它被实现为 Python 程序的集合,这些程序作为 Linux 服务在不同的进程中运行,通常这些进程分布在多台机器上。

nova程序只是一个小型客户端程序,它通过 HTTP 向 OpenStack 端点发出请求。当您执行上述请求时,将涉及以下服务。请注意,大多数 OpenStack“服务”实际上是由多个 Linux“服务”(也称为守护程序)实现的。这些是您执行nova boot.

  • 身份服务(基石)
    • 基石
  • 计算服务(新星)
    • 新星API
    • 新星调度器
    • 新星计算
    • nova-network(如果不使用新的网络服务(量子))
  • 图像服务(一目了然)
    • 一目了然的API
    • 一目了然注册表

请注意,如果涉及到新的网络服务(量子),那么这里将涉及更多的服务。

OpenStack 使用两种机制进行进程间通信:

  • HTTP(使用 REST API)用于跨 OpenStack 项目边界的通信(例如,Compute 服务和 Image 服务之间的通信)
  • 基于 AMQP 的消息队列(通常是 RabbitMQ,但可以是 Qpid 或 ZeroMQ),用于在单个 OpenStack 项目中跨服务进行通信(例如nova-apinova-compute之间的通信)

这些服务还通过数据库共享信息,但如果您对跟踪控制线程感兴趣,这并不重要

对于您给出的示例nova boot,请注意跨服务发生的所有交互:

  1. nova客户端通过 HTTP 向身份服务(keystone)发出请求,传递用户名和密码并获取令牌
  2. nova客户端通过 HTTP 向计算服务 ( nova-api ) 发出请求以创建新服务器
  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 操作指南,了解有关如何读取日志文件的一些指导。

于 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 回答