我正在为自定义应用程序日志构建一个新的 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 路径,而不是我的分叉存储库。我可以去搜索并替换所有这些引用,但我是否试图完全倒退,有没有更简单的方法来实现我想要做的事情?
我的问题是:
- 在一般层面上,一个人可以在克隆的 repo 上进行协作,还是需要先分叉?
- 作为 git 和 GitHub 的新手,有没有更简单的方法可以在不成为贡献者或弄乱源代码库的情况下在 GitHub 存储库上进行协作?
- 我对错误来源的假设是否更接近?如果是,那么正确的解决方案是什么?