例如,在 Openstack 中,我输入命令并使用图像 myimage 启动一个实例并使用风味 1。
nova boot --image myimage --flavor 1 server1
我如何实际跟踪此命令并获取详细信息,例如由于代码在 python 中执行了哪些函数,执行命令时它输入了哪些文件等,
对不起,我是一个 linux 菜鸟,我正在努力寻找追踪少数呼叫的方法。而不是通过浏览所有文件并执行此操作来执行此操作。
有没有一种简单的方法可以做到这一点?
例如,在 Openstack 中,我输入命令并使用图像 myimage 启动一个实例并使用风味 1。
nova boot --image myimage --flavor 1 server1
我如何实际跟踪此命令并获取详细信息,例如由于代码在 python 中执行了哪些函数,执行命令时它输入了哪些文件等,
对不起,我是一个 linux 菜鸟,我正在努力寻找追踪少数呼叫的方法。而不是通过浏览所有文件并执行此操作来执行此操作。
有没有一种简单的方法可以做到这一点?
如果您想跟踪常规 Python 程序,请查看Python 跟踪模块。
但是,我认为您会发现跟踪对于理解 OpenStack 在您提供的示例中所做的工作没有用处:
nova boot --image myimage --flavor 1 server1
OpenStack 不是作为单个 Python 程序实现的。它被实现为 Python 程序的集合,这些程序作为 Linux 服务在不同的进程中运行,通常这些进程分布在多台机器上。
该nova
程序只是一个小型客户端程序,它通过 HTTP 向 OpenStack 端点发出请求。当您执行上述请求时,将涉及以下服务。请注意,大多数 OpenStack“服务”实际上是由多个 Linux“服务”(也称为守护程序)实现的。这些是您执行nova boot
.
请注意,如果涉及到新的网络服务(量子),那么这里将涉及更多的服务。
OpenStack 使用两种机制进行进程间通信:
这些服务还通过数据库共享信息,但如果您对跟踪控制线程感兴趣,这并不重要。
对于您给出的示例nova boot
,请注意跨服务发生的所有交互:
Glance-api通过 HTTP 向Glance-registry发出请求,以从图像后端检索文件。
如果您想生成包含所有涉及的 OpenStack 代码的跟踪,则必须跟踪涉及的每个服务。
我建议只阅读代码而不是尝试进行自动跟踪。您还可以查看日志文件,因为它们包含大量调试信息。查看最近发布的OpenStack 操作指南,了解有关如何读取日志文件的一些指导。
除了 Lorin 所说的之外,您还可以运行“nova --debug boot ...”来查看 nova CLI 对 keystone 和 nova-api 进行的 REST API 调用。
strace
如果您可以获得进程ID,则可以使用。
这是解释如何的链接:
http://www.cyberciti.biz/tips/linux-strace-command-examples.html