创建 Metricbeat 模块编辑

Metricbeat 模块用于将多个 Metricset 组合在一起,并实现 Metricset 的共享功能。在大多数情况下,不需要实现模块,并且会自动选择默认模块实现。

完成模块的配置文件和文档文件非常重要。运行 make create-metricset 创建新的 Metricset 时,会在 _meta 目录中生成这些文件的默认版本。

模块文件编辑

  • config.ymlconfig.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-environmentmake system-tests-environment 可用于对所有模块运行测试。如果您正在开发模块,则仅对一个模块运行测试并直接在您的机器上运行它会很方便。

首先,您需要启动要测试的模块的环境,并将端口公开到您的本地机器。为此,您可以在 metricbeat 目录中运行以下命令

MODULE=apache PORT=80 make run-module

注意:这里以端口为 80 的 apache 模块为例。您必须在此处输入您自己的模块的名称和端口。

这将启动环境,您必须等到服务完全启动。之后,您可以运行需要环境的测试

MODULE=apache make test-module

这将运行集成和系统测试,连接到 docker 容器中的环境。