转到Stackdriver debugger错误加载程序

时间:2019-04-02 11:09:23

标签: kubernetes google-kubernetes-engine stackdriver google-cloud-stackdriver

我正在尝试使用Go设置Stackdriver debugging。通过这篇文章和出色的medium post,我想到了这个solution

关键部分,位于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可能已经过时,因为我还没有看到它在Daz的中号帖子以外使用过。官方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 :(得分:0)

OK:-)

是的,您应该遵循当前的Stackdriver文档,例如go-cloud-debug-agent

不幸的是,我的帖子现在有很多问题,其中包括(目前已中断)地区的gcr.io/cloud-builders/kubectl

我认为您的问题与您使用golang:alpine有关。 Alpine使用的是musl,而不是您在大多数其他Linux发行版上找到的glibc,因此,您确实必须为Alpine进行编译,以确保您的二进制文件引用了正确的libc。

通过在Alpine上切换Dockerfile以拉出Cloud Debug Agent并在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

注意事项:要使错误报告“有趣”,您的代码需要生成错误,而对于您的示例,这将是具有挑战性的(通常是一件好事)。您可以考虑添加另一个总是导致错误的错误处理程序,以便测试服务。