重新编译kafka_exporter源码,构建镜像

1.github

https://github.com/danielqsj/kafka_exporter

 

2.dockerfile

FROM golang:1.17
ENV GO111MODULE=on \
    GOPROXY="https://goproxy.cn,direct"
COPY kafka_exporter-1.4.2 /apps/kafka_exporter-1.4.2
WORKDIR /apps/kafka_exporter-1.4.2
RUN make
RUN cp /apps/kafka_exporter-1.4.2/kafka_exporter-1.4.2 /bin/kafka_exporter
WORKDIR /bin
EXPOSE      9308
ENTRYPOINT  [ "/bin/kafka_exporter" ]

 

3.20240110再次编译v1.4.2这个版本的的时候,报错如下

# github.com/danielqsj/kafka_exporter
./kafka_exporter.go:733:19: cannot use "gopkg.in/alecthomas/kingpin.v2".CommandLine (type *"gopkg.in/alecthomas/kingpin.v2".Application) as type *"github.com/alecthomas/kingpin/v2".Application in argument to "github.com/prometheus/common/promlog/flag".AddFlags
!! command failed: build -o /apps/kafka_exporter-1.4.2/kafka_exporter-1.4.2 -ldflags -X github.com/prometheus/common/version.Version=1.4.2 -X github.com/prometheus/common/version.Revision=non-git -X github.com/prometheus/common/version.Branch=non-git -X github.com/prometheus/common/version.BuildUser=root@cc1a0138a1a2 -X github.com/prometheus/common/version.BuildDate=20240110-04:00:28  -extldflags '-static' -a -tags netgo github.com/danielqsj/kafka_exporter: exit status 2
make: *** [Makefile:35: build] Error 1

修改kafka_exporter.go的kingpin依赖

原来

"gopkg.in/alecthomas/kingpin.v2"

改为

kingpin "github.com/alecthomas/kingpin/v2"

再次编译即可

 

4.kafka-exporter的10.10.10.10:9308/debug/vars地址,扫出信息泄露漏洞

expvar包中默认绑定了这个地址,参考https://github.com/golang/go/blob/master/src/expvar/expvar.go

 

expvar_collector.go文件依赖了expvar包,删除expvar_collector.go文件即可,参考https://blog.csdn.net/Meepoljd/article/details/131794675

 

上面的dockerfile中是使用make命令打包的,每次打包都会拉取一次expvar包,所以可以修改Makefile文件

 

5.arm64环境下编译

注意v1.4.2这个版本的kingpin依赖不用向上面第3步那样改改,保持原来的即可

#arm架构的基础镜像
FROM 8685b3216ef4
ENV GO111MODULE=on \
    GOPROXY="https://goproxy.cn,direct" \
    CGO_ENABLED=0 #静态编译
USER root
ADD qemu-aarch64-static /usr/bin
COPY kafka_exporter-1.4.2 /apps/kafka_exporter-1.4.2
WORKDIR /apps/kafka_exporter-1.4.2
#make命令编译会报错,所以用go命令编译 RUN go mod vendor RUN rm -rf ./vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go #/debug/vars漏洞 #静态编译 RUN go build -a -ldflags '-extldflags "-static"' .

 

posted @ 2022-08-28 18:24  wdgde  阅读(236)  评论(0)    收藏  举报