协作开发新的 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 路径,而不是我的分叉回购。我可以去搜索并替换所有这些引用,但我是否正在尝试完全向后执行此操作,是否有更简单的方法来实现我正在尝试做的事情?

我的问题是:

  1. 一般来说,是否可以在克隆的存储库上进行协作,还是需要先对其进行分叉?
  2. 作为 git 和 GitHub 的新手,有没有一种更简单的方法可以在 GitHub 存储库上进行协作,而无需成为贡献者或弄乱源代码存储库?
  3. 我对错误来源的假设是否接近?如果是,正确的解决方案是什么?

原来我的问题是作为一个 git 和菜鸟的组合,或者没有阅读一些关于如何正确设置开发环境的说明,或者这些说明不存在。

无论如何,这就是我需要做的(按照 this Elastic community thread:

上的指示
  1. 安装正确版本的 Go(已经有)
  2. 克隆官方beats repo(这是我出错的地方,我分叉它并克隆了我的叉子)
  3. 在 github
  4. 上创建官方 beats 仓库
  5. 将我的叉子设置为克隆回购的来源,并将官方节拍回购添加为上游
  6. 设置路径变量并安装 mage(我已经设置了环境,但我不记得看到过 mage 的安装命令,所以我猜这是我过程中的一个错误)

此后我不再出错,到目前为止我需要使用的所有命令都有效,包括从头开始构建 filebeat。