在 Docker 上运行 Metricbeat
编辑在 Docker 上运行 Metricbeat
编辑Metricbeat 的 Docker 镜像可从 Elastic Docker 仓库获取。基础镜像为 centos:7。
所有已发布的 Docker 镜像和标签列表可在 www.docker.elastic.co 查看。
这些镜像根据 Elastic 许可证免费使用。它们包含开源和免费的商业功能以及付费商业功能的访问权限。 开始 30 天试用 以试用所有付费商业功能。有关 Elastic 许可证级别的信息,请参阅 订阅 页面。
拉取镜像
编辑获取 Docker 版 Metricbeat 就像对 Elastic Docker 仓库发出 docker pull
命令一样简单。
docker pull docker.elastic.co/beats/metricbeat:8.16.0
或者,您可以下载其他仅包含 Apache 2.0 许可证下可用功能的 Docker 镜像。要下载镜像,请访问 www.docker.elastic.co。
可选:验证镜像
编辑您可以使用 Cosign 应用程序 验证 Metricbeat Docker 镜像签名。
wget https://artifacts.elastic.co/cosign.pub cosign verify --key cosign.pub docker.elastic.co/beats/metricbeat:8.16.0
cosign
命令以 JSON 格式打印检查结果和签名有效负载。
Verification for docker.elastic.co/beats/metricbeat:8.16.0 -- The following checks were performed on each of these signatures: - The cosign claims were validated - Existence of the claims in the transparency log was verified offline - The signatures were verified against the specified public key
运行 Metricbeat 设置
编辑使用 setup 命令运行 Metricbeat 将创建索引模式并加载可视化、仪表板和机器学习作业。运行此命令:
docker run --rm \ docker.elastic.co/beats/metricbeat:8.16.0 \ setup -E setup.kibana.host=kibana:5601 \ -E output.elasticsearch.hosts=["elasticsearch:9200"]
替换您的 Kibana 和 Elasticsearch 主机和端口。 |
|
如果您正在使用 Elastic Cloud 中托管的 Elasticsearch 服务,请使用以下语法将 |
-E cloud.id=<Cloud ID from Elasticsearch Service> \ -E cloud.auth=elastic:<elastic password>
在只读文件系统上运行 Metricbeat
编辑如果您想在只读文件系统上的 Docker 容器中运行 Metricbeat,可以通过指定 --read-only
选项来实现。Metricbeat 需要一个有状态目录来存储应用程序数据,因此使用 --read-only
选项,还需要使用 --mount
选项指定数据可以存储的路径。
例如:
docker run --rm \ --mount type=bind,source=$(pwd)/data,destination=/usr/share/metricbeat/data \ --read-only \ docker.elastic.co/beats/metricbeat:8.16.0
在 Docker 上配置 Metricbeat
编辑Docker 镜像提供了几种配置 Metricbeat 的方法。常规方法是通过卷挂载提供配置文件,但也可以创建包含您配置的自定义镜像。
示例配置文件
编辑下载此示例配置文件作为起点:
curl -L -O https://raw.githubusercontent.com/elastic/beats/8.16/deploy/docker/metricbeat.docker.yml
卷挂载配置
编辑在 Docker 上配置 Metricbeat 的一种方法是通过卷挂载提供 metricbeat.docker.yml
。使用 docker run
,卷挂载可以这样指定:
docker run -d \ --name=metricbeat \ --user=root \ --volume="$(pwd)/metricbeat.docker.yml:/usr/share/metricbeat/metricbeat.yml:ro" \ --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \ --volume="/sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro" \ --volume="/proc:/hostfs/proc:ro" \ --volume="/:/hostfs:ro" \ docker.elastic.co/beats/metricbeat:8.16.0 metricbeat -e \ -E output.elasticsearch.hosts=["elasticsearch:9200"]
自定义您的配置
编辑您之前下载的 metricbeat.docker.yml
文件配置为根据应用于您的容器的 Docker 标签部署 Beats 模块。有关更多详细信息,请参阅 基于提示的自动发现。将标签添加到您的应用程序 Docker 容器,当它们部署时,Beats 自动发现功能将拾取它们。以下是用于具有标签的 Apache HTTP Server 容器的示例命令,用于为 Apache HTTP Server 配置 Filebeat 和 Metricbeat 模块:
docker run \ --label co.elastic.logs/module=apache2 \ --label co.elastic.logs/fileset.stdout=access \ --label co.elastic.logs/fileset.stderr=error \ --label co.elastic.metrics/module=apache \ --label co.elastic.metrics/metricsets=status \ --label co.elastic.metrics/hosts='${data.host}:${data.port}' \ --detach=true \ --name my-apache-app \ -p 8080:80 \ httpd:2.4
自定义镜像配置
编辑可以将 Metricbeat 配置嵌入到自定义镜像中。这是一个实现此目标的示例 Dockerfile:
FROM docker.elastic.co/beats/metricbeat:8.16.0 COPY --chown=root:metricbeat metricbeat.yml /usr/share/metricbeat/metricbeat.yml
监控主机
编辑在容器中执行 Metricbeat 时,如果您想监控主机或其他容器,则需要注意一些重要事项。让我们使用 Docker 作为我们的容器编排工具来逐步介绍一些示例。
此示例重点介绍了使系统模块在容器内正常工作所需的更改。这使 Metricbeat 能够从容器内监控主机。
docker run \ --mount type=bind,source=/proc,target=/hostfs/proc,readonly \ --mount type=bind,source=/sys/fs/cgroup,target=/hostfs/sys/fs/cgroup,readonly \ --mount type=bind,source=/,target=/hostfs,readonly \ --mount type=bind,source=/var/run/dbus/system_bus_socket,target=/hostfs/var/run/dbus/system_bus_socket,readonly \ --env DBUS_SYSTEM_BUS_ADDRESS='unix:path=/hostfs/var/run/dbus/system_bus_socket' \ --net=host \ --cgroupns=host \ docker.elastic.co/beats/metricbeat:8.16.0 -e -system.hostfs=/hostfs
Metricbeat 的 系统模块 通过 Linux proc 文件系统收集大部分数据,该文件系统通常位于 |
|
默认情况下,系统进程指标集 启用了 cgroup 报告,因此您需要在容器内挂载主机的 cgroup 挂载点。它们需要挂载在 |
|
如果您想通过使用 系统文件系统指标集 来监控主机的文件系统,则需要在容器内挂载这些文件系统。它们可以挂载在任何位置。 |
|
系统用户指标集 和 系统服务指标集 都需要访问 dbus。挂载 dbus 套接字并将 |
|
系统网络指标集 使用来自 |
|
使用主机的 cgroup 命名空间运行容器,而不是私有命名空间。虽然这是可选的,但 系统进程指标集 在主机模式下运行时可能会产生更正确的 cgroup 指标。 |
特殊文件系统 /proc
和 /sys
仅当主机系统运行 Linux 时才可用。尝试绑定挂载这些文件系统将在 Windows 和 MacOS 上失败。
如果在 Linux 上使用 系统套接字指标集,则需要向 Metricbeat 授予更多权限。此指标集读取来自 /proc
的文件,这些文件是其他用户拥有的内部对象的接口。读取所有这些文件所需的权限(sys_ptrace
和 dac_read_search
)在 Docker 上默认情况下是被禁用的。要授予这些权限,还需要这些标志:
--user root --cap-add sys_ptrace --cap-add dac_read_search
监控另一个容器中的服务
编辑接下来,让我们来看一个从 Metricbeat 容器监控容器化服务的示例。
docker run \ --network=mysqlnet \ -e MYSQL_PASSWORD=secret \ docker.elastic.co/beats/metricbeat:8.16.0
将 Metricbeat 和 MySQL 容器放在同一个 Docker 网络上,允许 Metricbeat 访问 MySQL 容器公开的端口,并使主机名 |
|
如果您不想将某些值硬编码到 Metricbeat 配置中,则可以将它们作为环境变量或命令行标志传递到容器中(请参阅 命令参考 中的 |
mysql 模块配置如下所示: