正在加载

贡献给 Beats

如果您有想贡献的错误修复或新功能,请首先在论坛上开启一个主题。可能已经有人在处理它,或者在实施更改之前您应该了解一些特定的问题。

我们乐于与贡献者合作,以使他们的代码被接受。解决问题的方法有很多,重要的是在编写太多代码之前找到最佳方法。提交代码后,查看 Elastic 贡献者计划,您可以在其中获得积分和奖励。

向任何 Elastic 仓库贡献的过程都是类似的。

  1. 请确保您已签署我们的贡献者许可协议。我们不是要求您将版权转让给我们,而是授予我们无限制地分发您的代码的权利。我们要求所有贡献者这样做,以确保我们的用户了解代码的来源和持续存在。您只需要签署一次 CLA。
  2. 发送拉取请求!将您的更改推送到您仓库的分支,并使用我们的拉取请求指南提交拉取请求。 新的 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 目标(对于 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,例如 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

要及时了解社区开发者官方 Beats 的更改,请在此处关注开发者变更日志

© . All rights reserved.