0

我正在为自定义应用程序日志构建一个新的 filebeat 模块,我希望与我的一位同事合作。我知道克隆只是我的本地副本,没有机会让我的同事看到我的更改,而无需先将它们合并到https://github.com/elastic/beats/ repo,所以我选择了 fork beats 存储库,而不是克隆它,然后克隆该 fork。

我按照说明设置了我的开发环境。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 模块是新手,我暂时排除了日志格式的所有特殊情况。

然后指示我根据管道配置生成字段。一切看起来都不错:

~/go/src/github.com/jvalkonen/beats/filebeat $ make create-fields MODULE=casdm FILESET=stdlog
Fields.yml generated for casdm/stdlog

但是,fields.yml在 下找不到(无论情况如何),module/casdm/stdlog/_meta/并且模块级别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. 在一般层面上,一个人可以在克隆的 repo 上进行协作,还是需要先分叉?
  2. 作为 git 和 GitHub 的新手,有没有更简单的方法可以在不成为贡献者或弄乱源代码库的情况下在 GitHub 存储库上进行协作?
  3. 我对错误来源的假设是否更接近?如果是,那么正确的解决方案是什么?
4

1 回答 1

0

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

无论如何,这就是我需要做的(按照这个 Elastic 社区线程中的说明:

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

在此之后,我不再收到错误,到目前为止,我需要工作的所有命令都有效,包括从头开始构建 filebeat。

于 2019-03-23T12:50:20.743 回答