创建 Metricbeat 模块
编辑创建 Metricbeat 模块
编辑Metricbeat 模块用于将多个 metricset 组合在一起,并实现 metricset 的共享功能。在大多数情况下,不需要模块实现,会自动选择默认的模块实现。
完成模块的配置和文档文件非常重要。当您运行 make create-metricset
创建新的 metricset 时,这些文件的默认版本会生成在 _meta
目录中。
模块文件
编辑-
config.yml
和config.reference.yml
-
docs.asciidoc
-
fields.yml
更新任何这些文件后,请确保在您的 beat 目录中运行 make update
,以便更新所有生成的文件。
config.yml 和 config.reference.yml
编辑config.yml
文件包含基本的配置选项,如下所示:
- module: {module} metricsets: ["{metricset}"] enabled: false period: 10s hosts: ["localhost"]
它包含模块名称、您的 metricset 和默认周期。如果您的模块中有多个 metricset,请确保扩展 metricset 数组。
metricsets: ["{metricset1}", "{metricset2}"]
full.config.yml
文件是可选的,默认情况下与 config.yml
的内容相同。它用于添加和记录更高级的配置选项,这些选项不应成为默认情况下提供的最小配置文件的一部分。
docs.asciidoc
编辑docs.asciidoc
文件包含有关您的模块的文档。在生成文档期间,默认配置文件将附加到文档中。使用此文件更详细地描述您的模块并记录特定的配置选项。
This is the {module} module.
fields.yml
编辑fields.yml
文件包含 metricset 中字段的顶级结构。它与每个 metricset 中的 fields.yml
文件结合使用,以生成字段的模板和文档。
默认文件如下所示:
- key: {module} title: "{module}" release: beta description: > {module} module fields: - name: {module} type: group description: > fields:
请确保至少更新模块的描述。
测试
编辑一个常见的模式是在模块包中使用 testing.go
文件,以便在 metricset 之间共享一些测试功能。此文件名称中不包含 _test.go
,否则它将不会为子包编译。
要查看 testing.go
文件的示例,请查看 mysql 模块。
手动测试 Metricbeat 模块
编辑要手动测试 Metricbeat 模块,请按照以下步骤操作。
首先,我们必须构建可用于模块的 Docker 镜像。Dockerfile 位于每个模块文件夹内的 _meta
文件夹中。例如,让我们以 MySQL 模块为例。
这些步骤假设您已从 Github 检出 Beats 存储库,并且位于 beats
目录中。首先,我们必须进入上面提到的 _meta
文件夹并构建名为 metricbeat-mysql
的 Docker 镜像。
$ cd metricbeat/module/mysql/_meta/ $ docker build -t metricbeat-mysql . ... Removing intermediate container 0e58cfb7b197 ---> 9492074840ea Step 5/5 : COPY test.cnf /etc/mysql/conf.d/test.cnf ---> 002969e1d810 Successfully built 002969e1d810 Successfully tagged metricbeat-mysql:latest
在我们运行刚刚创建的容器之前,我们还需要知道要公开哪个端口。端口列在 metricbeat/{module}/_meta/env
文件中。
$ cat env MYSQL_DSN=root:test@tcp(mysql:3306)/ MYSQL_HOST=mysql MYSQL_PORT=3306
正如我们所看到的,端口是 3306。现在我们拥有了在本地启动 MySQL 服务所需的所有信息。
$ docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret metricbeat-mysql
这将启动容器,您现在可以使用它来测试 MySQL 模块。
要使用该模块运行 Metricbeat,我们需要构建二进制文件,首先启用该模块。现在假设您回到了 beats
文件夹路径。
$ cd metricbeat $ mage build $ ./metricbeat modules enable mysql
这将启用模块并将文件 metricbeat/modules.d/mysql.yml.disabled
重命名为 metricbeat/modules.d/mysql.yml
。根据我们的 文档,我们应该为用户 MySQL 指定用户名和密码。查看文档以了解也提供了预构建的仪表板始终是一个好主意。因此,稍微调整一下配置,它看起来像这样:
$ cat modules.d/mysql.yml # Module: mysql # Docs: https://elastic.ac.cn/guide/en/beats/metricbeat/current/metricbeat-module-mysql.html - module: mysql metricsets: - status # - galera_status period: 10s # Host DSN should be defined as "user:pass@tcp(127.0.0.1:3306)/" # or "unix(/var/lib/mysql/mysql.sock)/", # or another DSN format supported by <https://github.com/Go-SQL-Driver/MySQL/>. # The username and password can either be set in the DSN or using the username # and password config options. Those specified in the DSN take precedence. hosts: ["tcp(127.0.0.1:3306)/"] # Username of hosts. Empty by default. username: root # Password of hosts. Empty by default. password: secret
它现在正在向您的本地 Elasticsearch 实例发送数据。如果需要修改 mysql 配置,请调整 modules.d/mysql.yml
并重新启动 Metricbeat。
运行单个模块的环境测试
编辑所有环境都使用 docker 设置。make integration-tests-environment
和 make system-tests-environment
可用于运行所有模块的测试。如果您正在开发模块,则仅对一个模块运行测试并在您的机器上直接运行它会很方便。
首先,您需要启动要测试的模块的环境并将端口暴露到您的本地机器。为此,您可以在 metricbeat 目录中运行以下命令:
MODULE=apache PORT=80 make run-module
注意:此处以端口 80 的 apache 模块为例。您必须在此处填写您自己的模块的名称和端口。
这将启动环境,您必须等到服务完全启动后才能运行需要环境的测试。
MODULE=apache make test-module
这将运行连接到 Docker 容器中环境的集成和系统测试。