Как запустить go-cloud-debug-agent в Google Cloud Run, чтобы я мог отлаживать свое приложение go в Stackdriver Debug

Я пытаюсь запустить агент go-cloud-debug-agent в Cloud Run.

FROM golang:1.13.1 
RUN go get -u cloud.google.com/go/cmd/go-cloud-debug-agent
RUN mkdir -p /go/src/xyz
WORKDIR /go/src/xyz
COPY . .

RUN go build -gcflags=all='-N -l' -o main .


EXPOSE 8080
ENTRYPOINT ["go-cloud-debug-agent","-projectid=someproject-12313423","-appmodule=main","-appversion=1.0","--","/go/src/xyz/main"]

К сожалению, при попытке развернуть его в Cloud Run я вижу следующую ошибку в журнале Stackdriver.

Error loading program: AttrStmtList not present or not int64 for unit 98

Кто-нибудь знает, как использовать go-cloud-debug-agent с Cloud Run?


person Maciej Perliński    schedule 21.10.2019    source источник
comment
Я не видел этой ошибки, но отладчик жалуется на программу. Эта ошибка связана с форматом исполняемого файла (ELF) программы main, которую вы отлаживаете. Попробуйте запустить свой контейнер локально в Docker. Попробуйте использовать версию 1.11 для совместимости с агентом отладки (версии должны совпадать), но я не уверен.   -  person John Hanley    schedule 21.10.2019
comment
Спасибо, @JohnHanley, вы были правы, изменение golang на 1.11 решило проблему, приложение начинает использовать go-cloud-debug-agent.   -  person Maciej Perliński    schedule 22.10.2019
comment
Хорошо, кажется, что go-cloud-debug-agent работает, но теперь, когда я настраиваю снимок в любой точке приложения, облачный запуск не отвечает, и в Stackdriver Debug я вечно жду моментальный снимок, видя только ожидание попадания снимка. . Любые идеи?   -  person Maciej Perliński    schedule 22.10.2019
comment
@ MaciejPerliński, вы когда-нибудь решали проблему с отзывчивостью?   -  person ahong    schedule 17.06.2020
comment
@ahong нет, я отказался от идеи использовать этот подход, но, возможно, сейчас стоит пересмотреть статус   -  person Maciej Perliński    schedule 18.01.2021


Ответы (2)


В настоящее время Go не поддерживается для Cloud Run. Вот список поддерживаемых языков и платформ для отладчика: https://cloud.google.com/debugger/docs/setup/

person wjg    schedule 24.10.2019
comment
Как указано в официальной документации, официальной поддержки нет, но наличие виртуальных машин и контейнеров, работающих в других местах, перечисленных на диаграмме, означает, что мы должны иметь возможность запускать приложение с помощью Cloud Run (это контейнер докеров), как мы это делаем в виртуальной машине, и по-прежнему использовать агент отладчика. . На самом деле не вижу разницы между контейнерным приложением с агентом отладки и обычной виртуальной машиной. Если вы знаете, в чем разница и почему это не будет работать в Cloud Run, поделитесь своими мыслями. - person Maciej Perliński; 14.11.2019
comment
Cloud Run — это служба, управляемая Google. Виртуальные машины и контейнеры, работающие в другом месте, не являются службами, управляемыми Google. - person wjg; 20.11.2019

Как указал @JohnHanley, мне пришлось изменить версию golang на 1.11, чтобы она была совместима с агентом отладки. В заключение следующий файл Dockerfile должен запускать в Cloud Run любой код golang и позволять вам использовать с ним отладку Stackdriver.

FROM golang:1.11
RUN go get -u cloud.google.com/go/cmd/go-cloud-debug-agent
RUN mkdir -p /go/src/xyz
WORKDIR /go/src/xyz
COPY . .

RUN go build -gcflags=all='-N -l' -o main .


EXPOSE 8080
ENTRYPOINT ["go-cloud-debug-agent","-projectid=someproject-12313423","-appmodule=main","-appversion=1.0","--","/go/src/xyz/main"]

GCP должен опубликовать несколько примеров, так как из их текущей документации я могу сделать вывод, что запустить go-cloud-debug-agent в Cloud Run невозможно, и что Cloud Run не поддерживается.

person Maciej Perliński    schedule 22.10.2019