0%

filebeat 本地编译

在本地对 filebeat 进行编译

filebeat 本地编译

使用的 filebeat 版本为 7.13.2,安全漏洞扫描,扫描出 filebeat 有 7 分以上安全漏洞 CVE-2023-44487,CVE-2023-4785。

查阅资源,发现这个安全漏洞是 grpc 引入,7.13.2 的 filebeat 使用的 grpc 版本为 1.29.1,为了解决安全漏洞,需要将 grpc 版本升级到 1.58.3 或者更高的版本。

两个办法,一个是升级 filebeat,但是 filebeat 和 elasticsearch 有兼容关系 产品兼容性。如果升级 filebeat,那么 elasticsearch 和 kibana 很有可能需要同步升级,这很有可能导致其他问题。

另一个办法是自行对 filebeat 进行编译,将 filebeat 依赖的 grpc 升级。本编文章就是介绍这个的。

编译步骤

  1. https://github.com/elastic/beats 下载或者克隆源码,下载选择 7.13.2 版本,克隆则切换到 7.13.2 tag
  2. 访问源码下的 docs/devguide/contributing.asciidoc,这篇只能介绍了本地编译 filebeat 所需的环境,filebeat 只需要 golang 环境即可
  3. golang 环境,这里使用 Docker 镜像构建,设置代理,不然无法访问 filebeat 所需依赖
  4. 将源码放置在指定位置

    1
    2
    mkdir -p $GOPATH/src/github.com/elastic
    mv beats/ $GOPATH/src/github.com/elastic
  5. 修改源码下的 go.mod 文件,将 grpc 版本从 1.29.1 改为 1.58.3,并将倒数第三行从文件中删除,如下。

    1
    github.com/kardianos/service => github.com/blakerouse/service v1.1.1-0.20200924160513-057808572ffa

    这一行似乎是转换,让 github.com/kardianos/service 这个依赖从 github.com/blakerouse/service 下载。但是直接下载并没有找到 github.com/blakerouse/service 这个依赖。依赖可以通过官方仓库搜索

  6. 进入 filebeat 目录,执行 go mod tidy 更新依赖,这一步同时会下载依赖
  7. 在 filebeat 目录下执行 make 命令编译,这一步可以看见编译命令,类似于

    1
    go build -ldflags "-X github.com/elastic/beats/libbeat/version.buildTime=2023-11-20T10:48:12Z -X github.com/elastic/beats/libbeat/version.commit=686ba416a74193f2e69dcfa2eb142f4364a79307"
  8. 交叉编译,编译 windows 下的可执行文件

    1
    CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-X github.com/elastic/beats/libbeat/version.buildTime=2023-11-20T10:48:12Z -X github.com/elastic/beats/libbeat/version.commit=686ba416a74193f2e69dcfa2eb142f4364a79307"

    也可以通过这个命令编译 ARM 平台下的二进制 CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build