贡献给 Beats
如果您有想贡献的错误修复或新功能,请首先在论坛上开启一个主题。可能已经有人在处理它,或者在实施更改之前您应该了解一些特定的问题。
我们乐于与贡献者合作,以使他们的代码被接受。解决问题的方法有很多,重要的是在编写太多代码之前找到最佳方法。提交代码后,查看 Elastic 贡献者计划,您可以在其中获得积分和奖励。
向任何 Elastic 仓库贡献的过程都是类似的。
- 请确保您已签署我们的贡献者许可协议。我们不是要求您将版权转让给我们,而是授予我们无限制地分发您的代码的权利。我们要求所有贡献者这样做,以确保我们的用户了解代码的来源和持续存在。您只需要签署一次 CLA。
- 发送拉取请求!将您的更改推送到您仓库的分支,并使用我们的拉取请求指南提交拉取请求。 新的 PR 将提交到主分支。如果需要,Beats 核心团队会将您的 PR 反向移植。
在拉取请求中,描述您的更改做了什么,并提及与拉取请求相关的任何错误/问题。 另请在 CHANGELOG.next.asciidoc 中添加一个变更日志条目。
Beats 是 Go 程序,因此请安装 1.22.10 版本的 Go,该版本用于 Beats 开发。
在 安装 Go 后,设置 GOPATH 环境变量以指向您的工作区位置,并确保 $GOPATH/bin
在您的 PATH 中。
安装适用于 Beats 的正确 Go 版本的确定性方法是使用 GVM 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
某些 Beats 可能有额外的开发要求,在这种情况下,您会在 Beat 目录中找到一个 CONTRIBUTING.md 文件。
我们在 beats 仓库中使用 EditorConfig 文件来标准化不同的编辑器如何处理我们的文件中的空格、行尾和其他编码样式。 大多数流行的编辑器都有一个 EditorConfig 插件,我们强烈建议您安装它。
Beats 使用基于 Python、make 和 mage 的各种脚本来生成配置文件和文档。 确保使用 .python-version 文件中列出的 python 版本。
更新生成文件的主要命令是
make update
每个 Beat 都有自己的 update
目标(对于 make
和 mage
),以及仓库根目录中的主 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 对。 例如,linux
和 linux/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,例如 filbeat 命令包
golangci-lint run ./filebeat/cmd/...
您可以使用以下命令运行整个测试套件
make testsuite
运行测试套件具有以下要求
- Python >= 3.7
- Docker >= 1.12
- Docker-compose >= 1.11
有关更多详细信息,请参阅测试指南。
所有 Beats 文档都位于 elastic/beats
仓库中
beats/docs/extend
包含有关开发和贡献 Beats 代码的文档。beats/docs/reference
包含每个单独 Beat 的文档,以及beats/docs/reference/libbeat
目录中所有 Beats 通用的一些内容。beats/docs/release-notes
包含所有产品更新说明。
从 9.0.0 版本开始,所有 Elastic 文档都以 Markdown 格式提供。 有关贡献 Elastic 文档的一般信息,包括版本控制指南、语法参考等,请参阅 Elastic Docs v3 欢迎页面。
为了创建 Beats,我们依赖于 Golang 库和其他外部工具。
除了 Go 库之外,我们还使用开发工具来为输入和处理器生成解析器。
需要以下包才能运行 go generate
- FlatBuffers >= 1.9
- Graphviz >= 2.43.0
- Ragel >= 6.10