如何跟踪特定的终端命令?

时间:2013-03-09 13:58:23

标签: python ubuntu openstack openstack-nova

在Openstack中,比方说,我正在输入命令,我使用图像myimage启动一个实例并使用flavor 1。

nova boot --image myimage --flavor 1 server1 

我如何实际跟踪此命令并获取详细信息,例如代码在python中执行的函数,执行命令时输入的文件等。

抱歉,我是一个Linux菜鸟,我正试图找到跟踪几个电话的方法。而不是通过浏览所有文件并执行此操作。

有一种简单的方法吗?

3 个答案:

答案 0 :(得分:2)

如果要跟踪常规Python程序,请查看Python trace module

但是,我认为您不会发现跟踪对于了解OpenStack在您提供的示例中所做的事情有用:

nova boot --image myimage --flavor 1 server1 

OpenStack不是作为单个Python程序实现的。它是作为一组Python程序实现的,这些程序在不同的进程中作为Linux服务运行,通常这些进程分布在多台机器上。

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

  • 身份服务(keystone)
    • 梯形
  • 计算服务(新星)
    • NOVA-API
    • 新星调度
    • NOVA-计算
    • nova-network (如果不使用新的网络服务(量子))
  • 影像服务(一瞥)
    • 一目了然-API
    • 一目了然的注册表

请注意,如果涉及新的网络服务(量子),则此处将涉及更多服务。

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

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

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

对于您使用nova boot提供的示例,请注意服务中发生的所有互动:

  1. nova 客户端通过HTTP针对身份服务(keystone)发出请求,传递用户名和密码并获取令牌
  2. nova 客户端通过HTTP针对Compute服务( 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代码的跟踪,则必须跟踪所涉及的每个服务。

  8. 我建议只阅读代码而不是尝试自动跟踪。您还可以查看日志文件,因为它们包含大量调试信息。请查看最近发布的OpenStack Operations Guide,以获取有关如何读取日志文件的一些指导。

答案 1 :(得分:1)

除了Lorin所说的你可以运行“nova --debug boot ...”之外,还可以看到nova CLI对keystone和nova-api进行的REST API调用。

答案 2 :(得分:0)

如果您可以获取进程ID,则可以使用strace

以下链接说明了如何:

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