Программа загрузки ошибок отладчика Go Stackdriver - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь настроить Отладка Stackdriver с помощью Go.Используя статью и этот замечательный средний пост Я придумал это решение .

Ключевые части, в cloudbuild.yaml

- name: gcr.io/cloud-builders/wget
  args: [
    "-O",
    "go-cloud-debug",
    "https://storage.googleapis.com/cloud-debugger/compute-go/go-cloud-debug"
  ]

...

DockerfileУ меня есть

...

COPY gopath/bin/stackdriver-demo /stackdriver-demo

ADD go-cloud-debug /
ADD source-context.json /

CMD ["/go-cloud-debug","-sourcecontext=./source-context.json", "-appmodule=go-errrep","-appversion=1.0","--","/stackdriver-demo"]

...

Однако блоки продолжают сбой, журналы контейнеров показывают эту ошибку:

Error loading program: decoding dwarf section info at offset 0x0: too short

РЕДАКТИРОВАТЬ: использование https://storage.googleapis.com/cloud-debugger/compute-go/go-cloud-debug может быть устаревшим, так как я не видел его использоватьвне среднего поста Даза.Официальный docs использует пакет cloud.google.com/go/cmd/go-cloud-debug-agent

У меня есть обновление файла cloudbuild.yaml для установки этого пакета:

- name: 'gcr.io/cloud-builders/go'
  args: ["get", "-u", "cloud.google.com/go/cmd/go-cloud-debug-agent"]
  env: ['PROJECT_ROOT=github.com/roberson34/stackdriver-demo', 'CGO_ENABLED=0', 'GOOS=linux']

- name: 'gcr.io/cloud-builders/go'
  args: ["install", "cloud.google.com/go/cmd/go-cloud-debug-agent"]
  env: ['PROJECT_ROOT=github.com/roberson34/stackdriver-demo', 'CGO_ENABLED=0', 'GOOS=linux']

А в Dockerfile я могуполучить доступ к двоичному файлу в gopath/bin/go-cloud-debug-agent

Когда я выполняю gopath/bin/go-cloud-debug-agent с моей собственной программой в качестве аргумента:

/go-cloud-debug-agent -sourcecontext=./source-context.json -appmodule=go-errrep -appversion=1.0 -- /stackdriver-demo

Я получаю еще одну непрозрачную ошибку:

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

Таким образом, использование двоичного кода cloud-debug из https://storage.googleapis.com/cloud-debugger/compute-go/go-cloud-debug и cloud-debug-agent из пакета cloud.google.com/go/cmd/go-cloud-debug-agent не работает и выдает разные ошибки.

БудетСпасибо за любые советы о том, что я делаю неправильно и как это исправить.

1 Ответ

0 голосов
/ 03 апреля 2019

ОК: -)

Да, вы должны следовать текущей документации Stackdriver, например, go-cloud-debug-agent

К сожалению, теперь в моем сообщении возникают различные проблемы, включая (в настоящее время не работает) gcr.io/cloud-builders/kubectl для регионов.

Я думаю, что ваша проблема касается использования golang:alpine.Alpine использует musl, а не glibc, который вы найдете в большинстве других дистрибутивов Linux, и поэтому вам действительно необходимо скомпилировать Alpine, чтобы гарантировать, что ваши двоичные файлы ссылаются на правильный libc.

Я могу заставить ваше решение работать в первую очередь , переключив ваш Dockerfile на использование агента отладки в облаке, находясь на Alpine, и на компиляцию вашего источника на Alpine:

FROM golang:alpine

RUN apk add git
RUN go get -u cloud.google.com/go/cmd/go-cloud-debug-agent

ADD main.go src
RUN CGO_ENABLED=0 go build -gcflags=all='-N -l' src/main.go

ADD source-context.json /

CMD ["bin/go-cloud-debug-agent","-sourcecontext=/source-context.json", "-appmodule=stackdriver-demo","-appversion=1.0","--","main"]

Я думаю, что это должно помочь вам избежать ошибок, которые вы задокументировали, и вы должныиметь возможность развернуть ваш контейнер в Kubernetes.

Я сделал мою версию вашего изображения общедоступной (и сохраню ее в течение нескольких дней для вас):

gcr.io/dazwilkin-190402-55473323/roberson34@sha256:17cb45f1320e2fe04e0681310506f4c229896429192b0d1c2c8dc20ed54adb0d

Вы можетеВы хотите сослаться на него (с помощью этого дайджеста) в вашем deployment.yaml

NB Чтобы отчеты об ошибках были "интересными", ваш код должен генерировать ошибки, и, на вашем примере, этобудет сложным (обычно это хорошая вещь).Вы можете добавить еще один обработчик ошибок, который всегда приводит к ошибкам, чтобы вы могли протестировать службу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...