在 Docker 上运行 Packetbeat

编辑

Packetbeat 的 Docker 镜像可从 Elastic Docker 注册表获得。基础镜像为 centos:7

所有已发布的 Docker 镜像和标签的列表可在 www.docker.elastic.co 上找到。

这些镜像在 Elastic 许可下可以免费使用。它们包含开源和免费的商业功能,并可访问付费商业功能。开始 30 天试用以试用所有付费商业功能。有关 Elastic 许可级别的信息,请参阅订阅页面。

拉取镜像

编辑

获取 Packetbeat 的 Docker 镜像非常简单,只需向 Elastic Docker 注册表发出 docker pull 命令。

docker pull docker.elastic.co/beats/packetbeat:8.17.0

或者,您可以下载其他仅包含 Apache 2.0 许可下可用功能的 Docker 镜像。要下载镜像,请访问 www.docker.elastic.co

可选:验证镜像

编辑

您可以使用 Cosign 应用程序来验证 Packetbeat Docker 镜像签名。

wget https://artifacts.elastic.co/cosign.pub
cosign verify --key cosign.pub docker.elastic.co/beats/packetbeat:8.17.0

cosign 命令会以 JSON 格式打印检查结果和签名负载。

Verification for docker.elastic.co/beats/packetbeat:8.17.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

运行 Packetbeat 设置

编辑

使用 setup 命令运行 Packetbeat 将创建索引模式并加载可视化、仪表板和机器学习作业。运行此命令

docker run --rm \
--cap-add=NET_ADMIN \
docker.elastic.co/beats/packetbeat:8.17.0 \
setup -E setup.kibana.host=kibana:5601 \
-E output.elasticsearch.hosts=["elasticsearch:9200"]  

替换您的 Kibana 和 Elasticsearch 主机和端口。

如果您正在 Elastic Cloud 中使用托管的 Elasticsearch 服务,请使用以下语法将 -E output.elasticsearch.hosts 行替换为 Cloud ID 和 elastic 密码

-E cloud.id=<Cloud ID from Elasticsearch Service> \
-E cloud.auth=elastic:<elastic password>

在只读文件系统上运行 Packetbeat

编辑

如果您想在只读文件系统的 Docker 容器中运行 Packetbeat,可以通过指定 --read-only 选项来实现。Packetbeat 需要一个有状态的目录来存储应用程序数据,因此使用 --read-only 选项时,还需要使用 --mount 选项来指定存储该数据的路径。

例如

docker run --rm \
  --mount type=bind,source=$(pwd)/data,destination=/usr/share/packetbeat/data \
  --read-only \
  docker.elastic.co/beats/packetbeat:8.17.0

在 Docker 上配置 Packetbeat

编辑

Docker 镜像提供了几种配置 Packetbeat 的方法。传统方法是通过卷挂载提供配置文件,但也可以创建包含配置的自定义镜像。

示例配置文件

编辑

下载此示例配置文件作为起点

curl -L -O https://raw.githubusercontent.com/elastic/beats/8.17/deploy/docker/packetbeat.docker.yml

卷挂载配置

编辑

在 Docker 上配置 Packetbeat 的一种方法是通过卷挂载提供 packetbeat.docker.yml。使用 docker run,可以像这样指定卷挂载。

docker run -d \
  --name=packetbeat \
  --user=packetbeat \
  --volume="$(pwd)/packetbeat.docker.yml:/usr/share/packetbeat/packetbeat.yml:ro" \
  --cap-add="NET_RAW" \
  --cap-add="NET_ADMIN" \
  --network=host \
  docker.elastic.co/beats/packetbeat:8.17.0 \
  --strict.perms=false -e \
  -E output.elasticsearch.hosts=["elasticsearch:9200"]  

替换您的 Elasticsearch 主机和端口。

如果您正在 Elastic Cloud 中使用托管的 Elasticsearch 服务,请使用前面显示的语法将 -E output.elasticsearch.hosts 行替换为 Cloud ID 和 elastic 密码。

自定义您的配置

编辑

先前下载的 packetbeat.docker.yml 应根据您的环境进行自定义。有关详细信息,请参阅配置。编辑配置文件并对其进行自定义以匹配您的环境,然后重新部署 Packetbeat 容器。

自定义镜像配置

编辑

可以将 Packetbeat 配置嵌入到自定义镜像中。这是一个实现此目的的示例 Dockerfile

FROM docker.elastic.co/beats/packetbeat:8.17.0
COPY --chown=root:packetbeat packetbeat.yml /usr/share/packetbeat/packetbeat.yml

所需的网络功能

编辑

在 Docker 下,Packetbeat 以非 root 用户身份运行,但需要一些特权网络功能才能正常运行。确保容器可以使用 NET_ADMIN 功能。

docker run --cap-add=NET_ADMIN docker.elastic.co/beats/packetbeat:8.17.0

从主机系统捕获流量

编辑

默认情况下,Docker 网络会将 Packetbeat 容器连接到隔离的虚拟网络,该网络对网络流量的视图有限。您可能希望将容器直接连接到主机网络,以便查看发往主机系统和来自主机系统的流量。使用 docker run,可以通过指定 --network=host 来实现此目的。

docker run --cap-add=NET_ADMIN --network=host docker.elastic.co/beats/packetbeat:8.17.0

在 Windows 和 MacOS 上,指定 --network=host 会将容器的网络接口绑定到 Docker 嵌入式 Linux 虚拟机的虚拟接口,而不是绑定到主机系统的物理接口。