加载中

为 Beats 做贡献

如果您有想要贡献的错误修复或新功能,请先在论坛上发起一个话题。可能已经有人在处理相关事宜,或者在您实施更改之前,有一些特定的问题是您需要了解的。

我们乐于与贡献者合作,以让他们的代码被接受。解决问题的方法有很多,在编写大量代码之前找到最佳方案非常重要。在提交代码后,请查看Elastic 贡献者计划 (Elastic Contributor Program),在那里您可以为自己的贡献赚取积分和奖励。

为任何 Elastic 存储库做出贡献的过程都是相似的。

  1. 请确保您已签署我们的贡献者许可协议 (Contributor License Agreement)。我们并不要求您将版权转让给我们,而是希望您授予我们不受限制地分发您的代码的权利。我们要求所有贡献者这样做,是为了向我们的用户保证代码的来源和持续存在。您只需要签署一次 CLA。
  2. 发送拉取请求 (Pull Request)!将您的更改推送到您的存储库 fork,并使用我们的拉取请求指南提交拉取请求。新的 PR 会合并到主分支 (main branch)。Beats 核心团队会在必要时将您的 PR 向后移植 (backport)。

在拉取请求中,请描述您的更改内容,并提及与该拉取请求相关的任何错误/问题。此外,请使用变更日志工具./changelog/fragments 中添加变更日志。

Beats 是 Go 程序,因此请安装 Beats 开发所使用的 1.22.10 版本 Go

安装 Go 后,设置 GOPATH 环境变量以指向您的工作区位置,并确保 $GOPATH/bin 在您的 PATH 中。

注意

使用 GVM Go 版本管理器是安装适用于 Beats 的正确 Go 版本的一种确定性方法。Mac 用户的一个示例如下

gvm use 1.22.10
eval $(gvm 1.22.10)
		

然后您可以克隆 Beats git 存储库

mkdir -p ${GOPATH}/src/github.com/elastic
git clone https://github.com/elastic/beats ${GOPATH}/src/github.com/elastic/beats
		
注意

如果您有多个 go 路径,请使用 ${GOPATH%%:*} 而不是 ${GOPATH}

Beats 开发人员主要使用 Mage 进行开发。您可以使用 make 目标安装 mage

make mage
		

然后,您可以使用 Mage 编译特定的 Beat。例如,对于 Filebeat

cd beats/filebeat
mage build
		

您可以使用以下命令列出所有可用的 mage 目标

mage -l
		

一些 Beat 可能有额外的开发要求,在这种情况下,您会在 Beat 目录中找到 CONTRIBUTING.md 文件。

我们在 beats 存储库中使用 EditorConfig 文件来标准化不同编辑器处理我们文件中的空格、换行符和其他编码样式的方式。大多数主流编辑器都有 EditorConfig 插件,我们强烈建议您安装它。

Beats 使用各种基于 Python、make 和 mage 的脚本来生成配置文件和文档。请确保使用 .python-version 文件中列出的 Python 版本。

更新生成文件的主要命令是

make update
		

每个 Beat 都有自己的 update 目标(适用于 makemage),以及存储库根目录中的主 update 目标。如果 PR 添加或删除了依赖项,请在根 beats 目录中运行 make update

另一个命令可以正确格式化 go 源文件并添加版权声明头

make fmt
		

这两个命令都应在提交 PR 之前运行。您可以使用 make help 查看所有可用的 make 目标。

这些命令具有以下依赖项

Python venv 模块包含在 Python 3 的标准库中。在 Debian/Ubuntu 系统上,还需要安装 python3-venv 软件包,其中包含额外的支持脚本

sudo apt-get install python3-venv
		

Beats 是使用 make release 目标构建的。默认情况下,make 会从有限数量的预设构建目标中进行选择

  • darwin/amd64
  • darwin/arm64
  • linux/amd64
  • windows/amd64

您可以使用 PLATFORMS 环境变量更改构建目标。使用 PLATFORMS 变量设置的目标可以是 GOOS 值,也可以是 GOOS/arch 对。例如,linuxlinux/amd64 都是有效的目标。您可以选择多个目标,并且 PLATFORMS 列表以空格分隔,例如 darwin windows 将在所有受支持的 darwin 和 windows 架构上进行构建。此外,您可以通过在给定目标前加上 +- 来添加或从构建目标列表中删除目标。例如:+bsd-darwin

您可以使用 go tool dist list 找到受支持构建目标的完整列表。

Beats 使用 golangci-lint。您可以针对您的更改运行预配置的 linter

mage llc
		

llc 代表 Lint Last Change,它包含在最后一次提交(如果您在 main 分支上)或您的功能分支与 main 分支之间的差异中更改的所有 Go 文件。

有时贡献者可能会被要求修复与其贡献无关的 linter 问题,这是预料之中的,因为 linter 的引入时间晚于某些文件中的更改。

您还可以针对单个包运行 linter,例如 filebeat 命令包

golangci-lint run ./filebeat/cmd/...
		

您可以使用以下命令运行整个测试套件

make testsuite
		

运行测试套件有以下要求

  • Python >= 3.7
  • Docker >= 1.12
  • Docker-compose >= 1.11

有关更多详细信息,请参阅测试 (Testing) 指南。

所有 Beats 文档都位于 elastic/beats 存储库中

  • beats/docs/extend 包含有关开发和贡献 Beats 代码的文档。
  • beats/docs/reference 包含每个单独 Beat 的文档,以及 beats/docs/reference/libbeat 目录中所有 Beats 通用的某些内容。
  • beats/docs/release-notes 包含所有产品更新说明。

从 9.0.0 版本开始,所有 开源搜索教程均以 Markdown 格式提供。有关为 开源搜索教程做出贡献的一般信息(包括版本控制指南、语法参考等),请参阅 Elastic Docs v3 欢迎页面

为了创建 Beats,我们依赖 Golang 库和其他外部工具。

除了 Go 库之外,我们还使用开发工具来为输入和处理器生成解析器。

运行 go generate 需要以下软件包

  • FlatBuffers >= 1.9
  • Graphviz >= 2.43.0
  • Ragel >= 6.10

要及时了解官方 Beats 面向社区开发人员的变更,请关注此处的开发人员变更日志

© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.