协作开发新的 filebeat 模块
Collaborating on a new filebeat module
我正在为自定义应用程序日志构建一个新的 filebeat 模块,我希望与我的同事就此进行协作。我知道克隆只是我的本地副本,没有机会让我的同事看到我的更改,而不是先将它们合并到 https://github.com/elastic/beats/ 存储库,所以我选择 fork beats 存储库而不是克隆它然后克隆那个叉子。
我按照 instructions 设置了我的开发环境。 运行 make
在 filebeat 下没有输出所以我假设一切正常。
我生成了模块、文件集,并为文件集设置了摄取管道。我的 pipeline.json
看起来像这样:
{
"description": "Pipeline for parsing CA Service Desk Manager stdlogs",
"processors": [
{
"grok": {
"field": "message",
"patterns": [
"%{TIMESTAMP:casdm.stdlog.timestamp} %{HOSTNAME:casdm.stdlog.hostname} %{PROCESS:casdm.stdlog.process.name} %{PID:casdm.stdlog.process.id} %{LOGLEVEL:casdm.stdlog.level} %{FILENAME:casdm.stdlog.file.name} %{POSINT:casd.stdlog.file.line} %{DATA:casdm.stdlog.message}"
],
"pattern_definitions": {
"TIMESTAMP": "%{MONTHNUM2}/%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND}",
"PROCESS": "%{USERNAME}",
"PID": "%{POSINT}",
"LOGLEVEL": "(FATAL|EXIT|SIGNIFICANT|SEVERE_ERROR|ERROR|WARNING|INFORMATION|MILESTONE|TRACE|VERBOSE)",
"FILENAME": "(?:[A-Za-z0-9_. -]+)"
}
}
}
],
"on_failure" : [{
"set" : {
"field" : "error.message",
"value" : "{{ _ingest.on_failure_message }}"
}
}]
}
这还不是全部,但作为 filebeat 模块创建的新手,我暂时排除了日志格式的所有特殊情况。
那我instructed to generate the fields based on the pipeline configuration。一切看起来都不错:
~/go/src/github.com/jvalkonen/beats/filebeat $ make create-fields MODULE=casdm FILESET=stdlog
Fields.yml generated for casdm/stdlog
但是,在 module/casdm/stdlog/_meta/
下找不到 fields.yml
(无论大小写),模块级别 module/casdm/_meta/fields.yml
不包含我在 module/casdm/stdlog/ingest/pipeline.json
。这已经表明有问题,但我不知道输出表明一切正常。如果我然后 运行 make update
生成文档和配置我得到一个错误,这似乎并不表明 pipeline.json
问题但开发设置本身以及我可能的事实分叉项目而不是仅仅克隆它:
~/go/src/github.com/jvalkonen/beats/filebeat $ make update
mage update
Error: failed to find github.com/elastic/beats/dev-tools/mage in the project's vendor
failed to find github.com/elastic/beats/dev-tools/mage in the project's vendor
make: *** [update] Error 1
构建管道中的某些东西指的是弹性 github 路径,而不是我的分叉回购。我可以去搜索并替换所有这些引用,但我是否正在尝试完全向后执行此操作,是否有更简单的方法来实现我正在尝试做的事情?
我的问题是:
- 一般来说,是否可以在克隆的存储库上进行协作,还是需要先对其进行分叉?
- 作为 git 和 GitHub 的新手,有没有一种更简单的方法可以在 GitHub 存储库上进行协作,而无需成为贡献者或弄乱源代码存储库?
- 我对错误来源的假设是否接近?如果是,正确的解决方案是什么?
原来我的问题是作为一个 git 和菜鸟的组合,或者没有阅读一些关于如何正确设置开发环境的说明,或者这些说明不存在。
无论如何,这就是我需要做的(按照 this Elastic community thread:
上的指示
- 安装正确版本的 Go(已经有)
- 克隆官方beats repo(这是我出错的地方,我分叉它并克隆了我的叉子)
- 在 github
上创建官方 beats 仓库
- 将我的叉子设置为克隆回购的来源,并将官方节拍回购添加为上游
- 设置路径变量并安装 mage(我已经设置了环境,但我不记得看到过 mage 的安装命令,所以我猜这是我过程中的一个错误)
此后我不再出错,到目前为止我需要使用的所有命令都有效,包括从头开始构建 filebeat。
我正在为自定义应用程序日志构建一个新的 filebeat 模块,我希望与我的同事就此进行协作。我知道克隆只是我的本地副本,没有机会让我的同事看到我的更改,而不是先将它们合并到 https://github.com/elastic/beats/ 存储库,所以我选择 fork beats 存储库而不是克隆它然后克隆那个叉子。
我按照 instructions 设置了我的开发环境。 运行 make
在 filebeat 下没有输出所以我假设一切正常。
我生成了模块、文件集,并为文件集设置了摄取管道。我的 pipeline.json
看起来像这样:
{
"description": "Pipeline for parsing CA Service Desk Manager stdlogs",
"processors": [
{
"grok": {
"field": "message",
"patterns": [
"%{TIMESTAMP:casdm.stdlog.timestamp} %{HOSTNAME:casdm.stdlog.hostname} %{PROCESS:casdm.stdlog.process.name} %{PID:casdm.stdlog.process.id} %{LOGLEVEL:casdm.stdlog.level} %{FILENAME:casdm.stdlog.file.name} %{POSINT:casd.stdlog.file.line} %{DATA:casdm.stdlog.message}"
],
"pattern_definitions": {
"TIMESTAMP": "%{MONTHNUM2}/%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND}",
"PROCESS": "%{USERNAME}",
"PID": "%{POSINT}",
"LOGLEVEL": "(FATAL|EXIT|SIGNIFICANT|SEVERE_ERROR|ERROR|WARNING|INFORMATION|MILESTONE|TRACE|VERBOSE)",
"FILENAME": "(?:[A-Za-z0-9_. -]+)"
}
}
}
],
"on_failure" : [{
"set" : {
"field" : "error.message",
"value" : "{{ _ingest.on_failure_message }}"
}
}]
}
这还不是全部,但作为 filebeat 模块创建的新手,我暂时排除了日志格式的所有特殊情况。
那我instructed to generate the fields based on the pipeline configuration。一切看起来都不错:
~/go/src/github.com/jvalkonen/beats/filebeat $ make create-fields MODULE=casdm FILESET=stdlog
Fields.yml generated for casdm/stdlog
但是,在 module/casdm/stdlog/_meta/
下找不到 fields.yml
(无论大小写),模块级别 module/casdm/_meta/fields.yml
不包含我在 module/casdm/stdlog/ingest/pipeline.json
。这已经表明有问题,但我不知道输出表明一切正常。如果我然后 运行 make update
生成文档和配置我得到一个错误,这似乎并不表明 pipeline.json
问题但开发设置本身以及我可能的事实分叉项目而不是仅仅克隆它:
~/go/src/github.com/jvalkonen/beats/filebeat $ make update
mage update
Error: failed to find github.com/elastic/beats/dev-tools/mage in the project's vendor
failed to find github.com/elastic/beats/dev-tools/mage in the project's vendor
make: *** [update] Error 1
构建管道中的某些东西指的是弹性 github 路径,而不是我的分叉回购。我可以去搜索并替换所有这些引用,但我是否正在尝试完全向后执行此操作,是否有更简单的方法来实现我正在尝试做的事情?
我的问题是:
- 一般来说,是否可以在克隆的存储库上进行协作,还是需要先对其进行分叉?
- 作为 git 和 GitHub 的新手,有没有一种更简单的方法可以在 GitHub 存储库上进行协作,而无需成为贡献者或弄乱源代码存储库?
- 我对错误来源的假设是否接近?如果是,正确的解决方案是什么?
原来我的问题是作为一个 git 和菜鸟的组合,或者没有阅读一些关于如何正确设置开发环境的说明,或者这些说明不存在。
无论如何,这就是我需要做的(按照 this Elastic community thread:
上的指示- 安装正确版本的 Go(已经有)
- 克隆官方beats repo(这是我出错的地方,我分叉它并克隆了我的叉子)
- 在 github 上创建官方 beats 仓库
- 将我的叉子设置为克隆回购的来源,并将官方节拍回购添加为上游
- 设置路径变量并安装 mage(我已经设置了环境,但我不记得看到过 mage 的安装命令,所以我猜这是我过程中的一个错误)
此后我不再出错,到目前为止我需要使用的所有命令都有效,包括从头开始构建 filebeat。