Google Cloud Debugger не работает для виртуальных машин, управляемых Python AppEngine

Как было объявлено сегодня в Production Устранение неполадок с помощью Cloud Debugger теперь доступно для Python, предположительно теперь я могу использовать Python Debugger.

Я запускаю виртуальные машины, управляемые AppEngine, на образах GCE, поэтому следую руководству по Настройка Python на Compute Engine. Я изменил свой файл Docker, чтобы добавить pip install google-python-cloud-debugger (я также пытался установить библиотеку непосредственно в свое приложение/библиотеку, которая включена в мой sys.path):

FROM gcr.io/google_appengine/python-compat
RUN pip install google-python-cloud-debugger
ADD . /app

И затем я изменил свой main.py, чтобы включить отладчик:

try:
  import googleclouddebugger
  googleclouddebugger.AttachDebugger()
except ImportError:
  pass

К сожалению, когда я фиксирую код, запускаю gcloud preview app gen-repo-info-file и нажимаю его, я не могу использовать отладчик. Когда я перехожу на страницу https://console.developers.google.com/debug, загружается мой репозиторий github справа, но я вижу сообщение об ошибке в левой области навигации:

Отладка недоступна. Вы можете отлаживать приложения Java, работающие в App Engine или Compute Engine.

Любые идеи, что может пойти не так, или как отлаживать отладчик?


person Mike Lambert    schedule 08.12.2015    source источник


Ответы (3)


Хотя другой поток действительно предоставлял много возможностей следовать общепринятым рекомендациям по отладке, решение оказалось намного проще, чем любой из нас мог себе представить. Вероятно, ошибки, которые вы видите, являются результатом того, что управляемые виртуальные машины с Python еще не поддерживаются платформой для Cloud Debugger, согласно документации.

Однако с ростом службы Cloud Debugger и тем фактом, что Cloud Debugger с Python вообще стал только что анонсировано 7-го числа, вполне возможно, что это изменится.

Не стесняйтесь подавать запросы функций в отслеживании общедоступных проблем облачной платформы. если вы заметили, что чего-то не хватает, и хотели бы сообщить нам, что это представляет интерес для вас и других лиц, которые могут отметить этот вопрос.

person Nick    schedule 10.12.2015
comment
Аааа, я думал, что любое приложение Python, работающее на экземпляре Google Compute Engine, перехватывает приложение Python Managed VM, работающее на экземпляре GCE, но глядя на платформы, поддерживаемые Java, становится ясно, что управляемые виртуальные машины еще не поддерживаются. Спасибо! - person Mike Lambert; 10.12.2015
comment
Итак, googlecloudplatform.blogspot.tw/2016/02/ упоминает: В этом выпуске Cloud Debugger теперь доступен для следующих языков и платформ: приложения Python, работающие в App Engine, виртуальные машины, управляемые App Engine, и Compute Engine. не удается заставить отладчик найти отлаживаемое приложение, и официальные документы по адресу cloud.google.com/debugger по-прежнему говорят, что приложения Python App Engine работают в App Engine. (и не упоминайте управляемые виртуальные машины). Итак... Я предполагаю, что сообщение в блоге неверно? - person Mike Lambert; 02.03.2016

EDIT: хотя ветка этого ответа содержит полезные шаги по отладке, основная причина проблемы объясняется в моем другом опубликованном ответе.

Вероятно, здесь происходят две вещи:

Во-первых, ваша команда pip, работающая от имени обычного пользователя, хочет получить доступ к месту установки системы и терпит неудачу без привилегий root. Попробуйте sudo pip install... или pip install -t lib/ google-python-cloud-debugger.

Второе, что происходит, это то, что ваш код перехватывает ImportError и просто passing. Я уже видел эту конструкцию раньше в своей жизни как говорящий на питоне, и, честно говоря, если я когда-либо видел, то это ружье для ног. Какой цели может служить pass? Журнал ошибок быстро показывает проблему, если вы принимаете такие меры предосторожности.

person Nick    schedule 08.12.2015
comment
Я следил за документацией Google выше дословно по двум проблемам, которые вы упомянули. (Не-sudo pip и тихий проход.) Так что, возможно, стоит сказать автору документа исправить и этот документ? Для тихого прохода я добавил оператор регистрации, но понятия не имею, где его увидеть. Этого не будет в журнале для каждого сервлета (поскольку это происходит до инициализации сервера wsgi), и его нет в выводе последовательной консоли экземпляра виртуальной машины. В моем main.py есть и другие журналы, которые я никогда не вижу в prod. - person Mike Lambert; 09.12.2015
comment
Что касается пункта, я попытался установить библиотеку googleclouddebugger в lib/, которую я нажимаю, как упоминалось в моем первоначальном вопросе. Это не работает, но, возможно, это делает больше прогресса? Похоже, что каждый запрос сразу 500 с (без какого-либо вывода журнала). Запросы /mapreduce/controller_callback возвращают 200, но они направляются через другой сервер/модуль wsgi через мой app.yaml, поэтому я не уверен, насколько это актуально. И если я открою облачный отладчик, пока мое приложение обслуживает 500 секунд, оно продолжает выдавать мне одно и то же сообщение об ошибке: Отладка недоступна. - person Mike Lambert; 09.12.2015
comment
Вам нужно будет добавить lib/ к вашему пути python, если вы используете такую ​​папку. Разве sudo не помогло сделать модуль видимым глобально? - person Nick; 09.12.2015
comment
Я установил его в каталог lib/, в котором уже были другие библиотеки, которые я успешно использую (т.е. он уже находится на моем пути). Я в порядке с этим подходом, поэтому я никогда не пробовал sudo. И тот факт, что поведение теперь меняется с 500s, после загрузки из lib/ , я предполагаю, что оно правильно найдено в lib/, и нет особой причины пробовать sudo...? - person Mike Lambert; 09.12.2015
comment
Почему обслуживают 500? Где-то должны быть логи. Можете ли вы проверить экземпляр GCE, на котором размещен сам процесс Docker? - person Nick; 09.12.2015
comment
Логи, конечно, были бы хороши! :) Из веб-консоли я могу видеть только журналы для каждого сервлета (где каждый сервлет пуст) и журнал последовательной консоли (ничего важного). Я только что вошел в GCE и порылся по всему диску в поисках журналов (либо с объяснением 500-х, либо с чем-то при запуске, связанным с импортом googleclouddebugger), но ничего не нашел. Какие-либо предложения? - person Mike Lambert; 09.12.2015
comment
Выполнив поиск в докере с экземпляром GCE, вы можете проверить сами контейнеры докеров (в /var/log), так как именно здесь лежат журналы запросов и ошибок для вашего приложения, прокси-сервера nginx и т. д. Однако было бы ошибкой, если бы журналы запросов, обслуживающие 500, были видны там, а не в правильном представлении консоли разработчиков. Если журналы контейнера ничего не обнаруживают, 500 могут быть инфраструктурными, или вы находитесь не в том экземпляре... - person Nick; 09.12.2015
comment
Вы проверили заголовки ответа на 500 и определили, что он достиг вашего контейнерного приложения? - person Nick; 09.12.2015
comment
Давайте продолжим обсуждение в чате. - person Mike Lambert; 09.12.2015
comment
Я хотел бы выяснить, что там происходит. Отправьте письмо по адресу [email protected], чтобы мы могли связаться напрямую. - person Vlad Lifliand; 05.01.2016

Самый простой способ проверить правильность установки Python Cloud Debugger — попробовать импортировать его в интерактивную консоль Python:

docker run -i -t cdbgtest bin/bash
python
import googleclouddebugger
print googleclouddebugger.__version__

Я предполагаю, что в вашем случае pip install google-python-cloud-debugger не работает. Если это так, то, вероятно, это связано с устаревшим pip. Установка pip с sudo easy_install pip решит эту проблему.

person Vlad Lifliand    schedule 04.01.2016