从 Beats 模块导入集成
导入过程大量使用了 import-beats 脚本。如果您对其内部工作原理感兴趣,请随意查看该脚本的 README。
在 integrations 仓库中创建一个 issue,以跟踪集成的进展(特别是手动更改)。
专注于您想要集成的特定产品(例如 MySQL、ActiveMQ)。使用此 issue 记录所应用的每一项手动更改。这将有助于调整
import-beats脚本并审查集成。准备开发环境
克隆/刷新以下仓库
克隆/刷新 Elastic Integrations 以始终使用最新版本的脚本
确保您已安装
mage工具$ go get -u -d github.com/magefile/mage
使用
elastic-package stack up -v -d命令启动所需的依赖项Elasticsearch 实例
- Kibana 的依赖项
Kibana 实例
用于迁移仪表板,如果不可用,您可以跳过生成(
SKIP_KIBANA=true)提示。这里有可用的
elastic-package速查表 此处。
在
integrations仓库中为集成创建一个新分支(从 main 分叉)。运行命令:
mage ImportBeats以启动导入过程(请注意,导入脚本假设在第 2 步中检出的项目位于+../{{project-name}}+)。运行
import-beats脚本的结果是一个包含刷新和更新后的集成的目录。完成需要一段时间,但控制台输出应会频繁更新以跟踪进度。该命令应以退出代码 0 终止。如果不是,请提交一个 issue。
生成的包默认存储在
packages目录中。通常,导入过程会更新所有集成,因此如果您发现多个集成有更新(包括您当前正在处理的集成,例如packages/foobarbaz),请不要感到惊讶。您可以提交这些更改,也可以留待以后处理。如果您想选择一部分包,请设置环境变量
PACKAGES(以逗号分隔的列表)$ PACKAGES=aws,cisco mage ImportBeats
大部分迁移工作已由 import-beats 脚本完成,但仍有一些任务需要开发人员进行干预。
如果您的集成缺少截图或图标,现在是将缺失的资源添加到 Beats/Kibana 仓库并重新导入集成(幂等操作)的好时机。
建议按照清单中的操作项顺序进行,以防止贡献者重复某些操作(修复已修复的内容,因为脚本已覆盖了部分内容)。
如果缺少图标,请添加。
集成图标显示在 Kibana 的不同位置,因此最好定义自定义图标以使 UI 更易于导航。
由于
import-beats脚本会在 Kibana 和 EUI 仓库中查找图标,请按照教程资源的方式将图标添加到第一个仓库中(Kibana 目录:src/legacy/core_plugins/kibana/public/home/tutorial_resources/logos/)。如果缺少截图,请添加。
Kibana 集成管理器会显示与集成相关的截图。截图展示了可视化指标/日志数据的 Kibana 仪表板。
import-beats脚本会查找_meta/docs.asciidoc中提到的截图引用,并从 Beats 目录复制图像文件metricbeat/docs/imagesfilebeat/docs/images
改进/纠正产品名称的拼写。
正确的产品名称拼写会给人留下更好的印象。
import-beats脚本使用fields.yml文件作为正确拼写的来源(title属性),例如 Mysql - MySQL, Nginx - NGINX, Aws - AWS。请记住,此步骤需要重新导入包内容。
为集成编写 README 模板文件。
README 模板用于渲染包含导出字段的最终 README 文件。该模板应放置在
package/<integration-name>/_dev/build/docs/README.md中。如果该目录不存在,请创建它。查看 MySQL 文档模板以了解如何使用模板函数(例如
{{fields "data-stream-name"}})。如果指标和日志中使用了相同的数据流名称,请在模板中添加-metrics和-logs。例如,elb既是日志的数据流,也是指标的数据流。在 README.md 模板中,使用{{fields "elb_logs"}}和{{fields "elb_metrics"}}来区分它们。检查字段文件和文档中的导出字段。
此操作项的目标是验证生成的文件(artifacts)是否正确。
包中的字段文件(package-fields.yml、fields.yml 和 ecs.yml)是从原始的 fields.yml 文件(可能包含 ECS 模式字段)和 fields.epr.yml(定义了摄取管道中使用的其他字段)创建的。原始来源可能会有拼写错误、描述不当或缺少字段定义。所有现有文件中的字段总和应仅包含实际使用的字段,例如,并非所有现有的 ECS 字段。
摄取管道可能会使用从 ECS 抽象出来但未在
fields.yml中提及的字段。集成应包含这些字段并将其记录在案。集成包的字段分为以下三个文件
- ecs.yml:此特定数据流使用的 ECS 合规字段。
- package-fields.yml:此特定数据流使用的包级字段,这些字段不存在于
<integration-package-name>.<data-stream-name>下。 - fields.yml:特定于该数据流且不符合 ECS 标准的数据集级字段。
请参阅 PR https://github.com/elastic/beats/pull/17895,了解如何使用
fields.epr.yml文件将它们添加到 Beats(例如event.code、event.provider)。Metricbeat:添加缺失的配置选项。
import-beats脚本会从 Metricbeat 模块的_meta目录中提取配置选项。它会分析配置文件并根据启用的指标集(未注释的)选择选项。如果您发现包的清单文件中缺少某些配置选项,只需创建一个包含所有必需选项的config.epr.yml文件即可。检查清单文件中的标题和描述。
标题和描述是 Kibana UI 中显示的字段。大多数用户将使用它们来了解如何配置与产品安装相关的集成,或如何使用高级配置选项。
压缩配置选项 (vars)。
目前,所有配置选项均由
import-beats脚本在数据流级别进行设置(路径:data stream/<data-stream-name>/manifest.yml)。不同数据流中的某些选项可能是重复的,或者涉及相同的设置,这些设置通常是相同的(例如 MySQL 用户名、密码)。请记住,两个数据流可能具有相同的配置选项,但值不同(例如
period、paths),因此无法压缩。总而言之,压缩可以减少用户多次设置相同配置选项(每个数据流一次)的必要。
定义所有变量属性。
变量属性用于自定义 Kibana UI 中配置选项的可视化效果。请确保它们在所有清单文件中都有定义。
vars: - name: paths required: true show_user: true title: Access log paths description: Paths to the nginx access log file. type: text multi: true default: - /var/log/nginx/access.log*- required - 选项是必需的
- show_user - 不要隐藏配置选项(折叠菜单)
- title - 人类可读的变量名称
- description - 变量描述(可能包含一些细节)
- type - 字段类型(参考:text, password, bool, integer)
- multi - 该字段具有多个值。
检查数据流配置。
由于模板引擎从标准的 Golang 模板引擎更改为 handlebars,因此自动转换 Filebeat 输入配置(嵌套变量、多种表示形式、条件、循环)可能会很困难。请检查输出数据流配置并识别潜在的错误。
使用示例事件更新文档模板。
Agent 收集的事件与原始的 Metricbeat 和 Filebeat 事件略有不同。根据已迁移的集成(例如 MySQL 集成)手动调整事件内容,或者在成功使用真实 Agent 运行整个设置后复制它们。
Kibana:使用
stream.data stream字段而不是event.data stream。使用
stream.data stream代替event.data stream还可以使查询效率更高,因为这是一个constant_keyword。请确保包中的仪表板不使用event.data stream字段。如果是,只需将它们替换为更高效的字段即可。