Как мне отследить определенную команду терминала?
Например, в Openstack я ввожу команду и запускаю экземпляр, используя образ myimage и использую аромат 1.
nova boot --image myimage --flavor 1 server1
Как я могу на самом деле отследить эту команду и получить подробную информацию о том, какие функции выполняются, поскольку код находится на python, какие файлы он вводит при выполнении команды и т. Д.,
Извините, я новичок в Linux и пытаюсь найти способ отследить несколько звонков. Вместо того, чтобы делать это, просматривая все файлы и делая это.
Есть ли простой способ сделать это?
3 ответа
Если вы хотите отследить обычную программу на Python, взгляните на модуль трассировки Python.
Однако я не думаю, что вы найдете полезной трассировку, чтобы понять, что делает OpenStack в приведенном вами примере:
nova boot --image myimage --flavor 1 server1
OpenStack не реализован как отдельная программа на Python. Он реализован в виде набора программ Python, которые выполняются как службы Linux в отдельных процессах, и обычно эти процессы распределены по нескольким машинам.
nova
Программа - это небольшая клиентская программа, которая отправляет запросы к конечной точке OpenStack по HTTP. Когда вы делаете запрос выше, участвуют следующие услуги. Обратите внимание, что большинство "сервисов" OpenStack на самом деле реализуются несколькими "сервисами" Linux (иначе говоря, демонами). Это службы / демоны OpenStack и службы Linux, задействованные при nova boot
,
- Идентификационная служба (краеугольный камень)
- замковый камень
- Компьютерный сервис (нова)
- новоподобных апи
- новоподобных планировщик
- новоподобное вычисление
- nova-network (если не используется новый сетевой сервис (квант)
- Сервис изображений (взгляд)
- взгляд-апи
- взгляд-реестр
Обратите внимание, что если бы был задействован новый сетевой сервис (квант), здесь было бы задействовано еще больше сервисов.
OpenStack осуществляет межпроцессное взаимодействие, используя два механизма:
- HTTP (используя REST API) для связи через границы проекта OpenStack (например, связь между службой Compute и службой Image)
- Очередь сообщений на основе AMQP (обычно RabbitMQ, но может быть Qpid или ZeroMQ) для связи между службами в рамках одного проекта OpenStack (например, связь между nova-api и nova-compute)
Службы также обмениваются информацией через базу данных, но это не важно, если вы заинтересованы в отслеживании потока управления.
Для примера, который вы дали с nova boot
обратите внимание на все взаимодействия между службами:
- клиент nova делает запрос через HTTP против службы Identity (keystone), передавая имя пользователя и пароль и получая токен
- Клиент nova отправляет запрос через HTTP на службу Compute (nova-api) для создания нового сервера.
- nova-api отправляет запрос в очередь сообщений на nova-scheduler для запуска экземпляра.
- nova-scheduler выбирает вычислительный хост и делает запрос к очереди сообщений на nova-compute на этом хосте для загрузки нового экземпляра виртуальной машины.
- nova-compute отправляет запрос в очередь сообщений на nova-network, чтобы выполнить настройку сети для нового экземпляра.
- nova-compute делает запрос через HTTP к службе изображений (glance-api) для файла образа виртуальной машины.
glance-api отправляет запрос через HTTP против glance-registry для получения файла из серверной части образа.
Если вы хотите сгенерировать трассировку, охватывающую весь задействованный код OpenStack, вам придется отслеживать каждую задействованную службу.
Я бы рекомендовал просто читать код, а не пытаться делать автоматические трассировки. Вы также можете посмотреть файлы журналов, так как они содержат много отладочной информации. Взгляните на недавно выпущенное Руководство по эксплуатации OpenStack, чтобы узнать, как читать файлы журнала.
В дополнение к тому, что сказал Лорин, вы можете запустить "nova --debug boot ... ", чтобы увидеть вызовы API REST, которые CLA nova делает к keystone и nova-api.
Ты можешь использовать strace
если вы можете получить идентификатор процесса.
Вот ссылка, которая объясняет, как:
http://www.cyberciti.biz/tips/linux-strace-command-examples.html