重新编译prometheus-kafka-adapter源码,构建镜像
1.github
https://github.com/Telefonica/prometheus-kafka-adapter
2.dockerfile
FROM golang:1.17.5-alpine3.15 ENV GO111MODULE=on \ GOPROXY="https://goproxy.cn,direct" COPY prometheus-kafka-adapter-1.8.0 /apps/prometheus-kafka-adapter-1.8.0 WORKDIR /apps/prometheus-kafka-adapter-1.8.0 RUN apk add --no-cache gcc musl-dev
#这条命令应该可以解决静态库和动态库的问题,具体待研究 RUN go build -ldflags='-w -s -extldflags "-static"' -tags musl,static,netgo -mod=vendor -o prometheus-kafka-adapter COPY prometheus-kafka-adapter-1.8.0/schemas/metric.avsc /schemas/metric.avsc RUN cp /apps/prometheus-kafka-adapter-1.8.0/prometheus-kafka-adapter /bin/prometheus-kafka-adapter WORKDIR /apps/prometheus-kafka-adapter-1.8.0 CMD /bin/prometheus-kafka-adapter
arm版本的编译
在使用arm版本的基础镜像来编译prometheus-kafka-adapter-1.8.0时,会有如下报错:
#0 126.8 /usr/bin/ld: /go/pkg/mod/github.com/confluentinc/confluent-kafka-go@v1.9.0/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_error.o): Relocations in generic ELF (EM: 62)
#0 126.8 /usr/bin/ld: /go/pkg/mod/github.com/confluentinc/confluent-kafka-go@v1.9.0/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_error.o): Relocations in generic ELF (EM: 62)
#0 126.8 /usr/bin/ld: /go/pkg/mod/github.com/confluentinc/confluent-kafka-go@v1.9.0/kafka/librdkafka_vendor/librdkafka_glibc_linux.a: error adding symbols: file in wrong format
可参考:https://github.com/confluentinc/confluent-kafka-go/issues?q=arm
这是因为prometheus-kafka-adapter-1.8.0引用的github.com/confluentinc/confluent-kafka-go依赖是v1.8.2版本的,这个版本是不支持在arm环境下编译的。
通过github.com/confluentinc/confluent-kafka-go的releases可知,从v2.0.2版本可以支持arm环境下编译。
所以需要把prometheus-kafka-adapter-1.8.0引用的github.com/confluentinc/confluent-kafka-go依赖改为v2.0.2以上版本即可。
1.删除prometheus-kafka-adapter-1.8.0文件夹下的go.sum文件和vendor文件夹
2.修改handlers.go文件和main.go文件依赖的github.com/confluentinc/confluent-kafka-go
#原来 "github.com/confluentinc/confluent-kafka-go/kafka" #修改为 "github.com/confluentinc/confluent-kafka-go/v2/kafka"
3.修改go.mod文件
#原来 github.com/confluentinc/confluent-kafka-go v1.8.2 #修改为 github.com/confluentinc/confluent-kafka-go/v2 v2.1.1
4.在prometheus-kafka-adapter-1.8.0文件夹下执行命令,重新生成go.sum文件和vendor文件夹
go mod vendor
5.dockerfile
FROM golang:1.17.5-alpine3.15 ENV GO111MODULE=on \ GOPROXY="https://goproxy.cn,direct" COPY prometheus-kafka-adapter-1.8.0 /apps/prometheus-kafka-adapter-1.8.0 WORKDIR /apps/prometheus-kafka-adapter-1.8.0 #arm版本可以不用apk add #RUN apk add --no-cache gcc musl-dev #执行go build就行 RUN go build # -ldflags='-w -s -extldflags "-static"' -tags musl,static,netgo -mod=vendor -o prometheus-kafka-adapter COPY prometheus-kafka-adapter-1.8.0/schemas/metric.avsc /schemas/metric.avsc RUN cp /apps/prometheus-kafka-adapter-1.8.0/prometheus-kafka-adapter /bin/prometheus-kafka-adapter WORKDIR /apps/prometheus-kafka-adapter-1.8.0 CMD /bin/prometheus-kafka-adapter