在 Docker 中运行代理的限制

我们不正式支持使用 Docker CLI 选项或 Docker Compose 参数运行 Docker 映像。这种用法通常仍然有效,但某些功能在运行时将不可用 道路。请注意,代理将在启动期间适当地删除容器内的权限,这意味着即使 在没有这些选项的情况下运行时,容器中几乎没有任何内容会以有效 UID 为 0 实际运行。--useruser:

我们的 POWER8+ Docker 映像不支持我们的 FreeIPMI 收集器。这是FreeIPMI本身的技术限制, 不幸的是,这不是我们可以实际解决的问题。

创建新的 Netdata 代理容器

您可以使用 或 创建新的代理容器。使用任何方法后,您都可以 访问 代理仪表板 。docker rundocker-composehttp://NODE:19999

Netdata 容器需要不同的权限和装载才能提供类似于 主机上安装的 Netdata。您可以在下面找到需要这些权限和挂载的 Netdata 组件列表, 以及他们的描述。特权

元件特权描述
cgroups.plugin主机PID模式,SYS_ADMIN容器网络接口监控。将系统命名空间中的虚拟接口映射到容器内的接口。
proc.plugin主机网络模式主机系统网络堆栈监控。
go.d.插件主机网络模式监视在主机上和容器内运行的应用程序。
本地侦听器主机网络模式,SYS_PTRACE发现本地服务/应用程序。将开放(侦听)端口映射到正在运行的服务/应用程序。

坐骑

元件坐骑描述
网络数据/etc/os-release主机信息检测。
cgroups.plugin/sys、/var/run/docker.sockDocker 容器监视和名称解析。
go.d.插件/var/run/docker.sockDocker 引擎和容器监控。请参阅 docker collector。
go.d.插件/var/日志Web 服务器日志尾随。请参阅博客收集器。
apps.plugin/etc/passwd、/etc/group监视每个用户和用户组的主机系统资源使用情况。
proc.plugin/proc主机系统监控(CPU、内存、网络接口、磁盘等)。
systemd-journal.插件/var/日志查看、浏览和分析 systemd 日志日志。

这两种方法都会在位于 的容器中为 Netdata 的配置文件创建一个。 有关详细信息,请参阅配置部分。如果要从以下位置访问配置文件 您的主机,请参阅主机可编辑配置/etc/netdata

  • docker 运行
  • docker-compose的

使用命令docker run

在终端中运行以下命令以启动新容器。

docker run -d --name=netdata \
--pid=host \
--network=host \
-v netdataconfig:/etc/netdata \
-v netdatalib:/var/lib/netdata \
-v netdatacache:/var/cache/netdata \
-v /etc/passwd:/host/etc/passwd:ro \
-v /etc/group:/host/etc/group:ro \
-v /etc/localtime:/etc/localtime:ro \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /etc/os-release:/host/etc/os-release:ro \
-v /var/log:/host/var/log:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--restart unless-stopped \
--cap-add SYS_PTRACE \
--cap-add SYS_ADMIN \
--security-opt apparmor=unconfined \
netdata/netdata

📑 注意

如果您计划将节点声明给 Netdata Cloud,则可以通过单击” 添加节点“按钮。

使用 systemd 单元监控

监控 systemd 单元需要安装。此挂载在非 systemd 系统上不可用,因此我们不能 以推荐的方式使用它。/run/dbus

安装提供:/run/dbus

  • go.d/systemdunits 中。
  • systemd-list-units 函数:有关所有 systemd 单元的信息,包括其活动状态、描述、是否 它们已启用,以及更多。
  • docker 运行
  • docker-compose的

使用命令docker run

添加到您的 .-v /run/dbus:/run/dbus:rodocker run

使用主机可编辑的配置

使用绑定挂载而不是卷。/etc/netdata

此示例假定您已在主目录中创建。netdataconfig/

mkdir netdataconfig
  • docker 运行
  • docker-compose的

使用命令docker run

在终端中运行以下命令以启动新容器。

docker run -d --name=netdata \
--pid=host \
--network=host \
-v $(pwd)/netdataconfig/netdata:/etc/netdata \
-v netdatalib:/var/lib/netdata \
-v netdatacache:/var/cache/netdata \
-v /etc/passwd:/host/etc/passwd:ro \
-v /etc/group:/host/etc/group:ro \
-v /etc/localtime:/etc/localtime:ro \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /etc/os-release:/host/etc/os-release:ro \
-v /var/log:/host/var/log:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--restart unless-stopped \
--cap-add SYS_PTRACE \
--cap-add SYS_ADMIN \
--security-opt apparmor=unconfined \
netdata/netdata

启用 SSL/TLS 的 HTTP 代理

对于公共服务器上的永久安装,您需要 应保护 Netdata 实例。这 部分包含如何使用 SSL 反向代理和基本身份验证安装 Netdata 的示例。

您可以使用以下文件和 Caddyfile 文件在 Docker 上运行 Netdata。替换域和 在开始之前,请提供 Let’s Encrypt 的电子邮件地址。docker-compose.yml

球童文件

此文件需要与名称一起放置。在这里,您可以自定义您的域,并且您需要提供 您的电子邮件地址以获取 Let’s Encrypt 证书。证书续订将自动进行,并且将 由 Caddy 服务器内部执行。/optCaddyfile

netdata.example.org {
reverse_proxy netdata:19999
tls admin@example.org
}

 docker-compose.yml

设置 Caddyfile 后,运行此命令以在 HTTP 反向后面进行功能齐全的 Netdata 设置 代理。docker-compose up -d

version: '3'
services:
caddy:
image: caddy:2
ports:
- "80:80"
- "443:443"
volumes:
- /opt/Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
netdata:
image: netdata/netdata
container_name: netdata
hostname: example.com # set to fqdn of host
restart: always
pid: host
cap_add:
- SYS_PTRACE
- SYS_ADMIN
security_opt:
- apparmor:unconfined
volumes:
- netdataconfig:/etc/netdata
- netdatalib:/var/lib/netdata
- netdatacache:/var/cache/netdata
- /etc/passwd:/host/etc/passwd:ro
- /etc/group:/host/etc/group:ro
- /etc/localtime:/etc/localtime:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /etc/os-release:/host/etc/os-release:ro
- /var/log:/host/var/log:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
caddy_data:
caddy_config:
netdatalib:
netdatacache:

使用基本身份验证限制访问

您可以通过以下方式限制访问 遵循官方球童指南并添加线条 到 Caddyfile。

使用 Docker 套接字代理

部署一个 Docker 套接字代理,该代理使用 HAProxy 或 CetusGuard 等工具接受和过滤掉请求,以便将连接限制为对 终结点。/containers

将套接字公开给代理更安全的原因是 Netdata 在 Docker 外部公开了一个 TCP 端口 网络。对代理容器的访问仅限于网络内部。

HAProxy(哈普罗克西

version: '3'
services:
netdata:
image: netdata/netdata
container_name: netdata
pid: host
network_mode: host
restart: unless-stopped
cap_add:
- SYS_PTRACE
- SYS_ADMIN
security_opt:
- apparmor:unconfined
volumes:
- netdataconfig:/etc/netdata
- netdatalib:/var/lib/netdata
- netdatacache:/var/cache/netdata
- /etc/passwd:/host/etc/passwd:ro
- /etc/group:/host/etc/group:ro
- /etc/localtime:/etc/localtime:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /etc/os-release:/host/etc/os-release:ro
- /var/log:/host/var/log:ro
environment:
- DOCKER_HOST=localhost:2375
proxy:
network_mode: host
image: tecnativa/docker-socket-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- CONTAINERS=1

volumes:
netdataconfig:
netdatalib:
netdatacache:

注意:替换为代理的端口。2375

CetusGuard(鲸鱼卫队)

注意:社区支持此部署方式

version: '3'
services:
netdata:
image: netdata/netdata
container_name: netdata
pid: host
network_mode: host
restart: unless-stopped
cap_add:
- SYS_PTRACE
- SYS_ADMIN
security_opt:
- apparmor:unconfined
volumes:
- netdataconfig:/etc/netdata
- netdatalib:/var/lib/netdata
- netdatacache:/var/cache/netdata
- /etc/passwd:/host/etc/passwd:ro
- /etc/group:/host/etc/group:ro
- /etc/localtime:/etc/localtime:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /etc/os-release:/host/etc/os-release:ro
- /var/log:/host/var/log:ro
environment:
- DOCKER_HOST=localhost:2375
cetusguard:
image: hectorm/cetusguard:v1
network_mode: host
read_only: true
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
CETUSGUARD_BACKEND_ADDR: unix:///var/run/docker.sock
CETUSGUARD_FRONTEND_ADDR: tcp://:2375
CETUSGUARD_RULES: |
! Inspect a container
GET %API_PREFIX_CONTAINERS%/%CONTAINER_ID_OR_NAME%/json

volumes:
netdataconfig:
netdatalib:
netdatacache:

您可以在其自己的 Docker Compose 文件中运行套接字代理,并将其保留在可以添加到的专用网络上 其他需要访问的服务。

无根模式

Netdata 可以在非 root 环境中成功运行,例如无根 Docker

但是,需要注意的是,Netdata的数据收集能力在无根Docker中受到相当大的限制 由于其固有的局限性。虽然 Netdata 可以在无根环境中运行,但它无法访问某些 需要提升权限的资源。以下组件不起作用:

  • 容器网络接口监控 (cgroup-network helper)
  • 应用程序和进程的磁盘 I/O 和文件描述符 (apps.plugin)
  • debugfs.plugin
  • freeipmi.plugin
  • perf.plugin
  • slabinfo.插件
  • systemd-journal.插件

此方法在位于 的容器中为 Netdata 的配置文件创建一个。 有关详细信息,请参阅配置部分。如果要从以下位置访问配置文件 您的主机,请参阅主机可编辑配置/etc/netdata

  • docker 运行

使用命令docker run

在终端中运行以下命令以启动新容器。

docker run -d --name=netdata \
--hostname=$(hostname) \
-p 19999:19999 \
-v netdataconfig:/etc/netdata \
-v netdatalib:/var/lib/netdata \
-v netdatacache:/var/cache/netdata \
-v /etc/passwd:/host/etc/passwd:ro \
-v /etc/group:/host/etc/group:ro \
-v /etc/localtime:/etc/localtime:ro \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /etc/os-release:/host/etc/os-release:ro \
-v /run/user/$UID/docker.sock:/var/run/docker.sock:ro \
--restart unless-stopped \
--security-opt apparmor=unconfined \
netdata/netdata

📑 注意

如果您计划将节点声明给 Netdata Cloud,则可以通过单击” 添加节点“按钮。

Docker 标签

在 Docker Hub 上查看 Docker 映像的完整列表。

官方 Docker 镜像提供以下命名标签:netdata/netdata

标记描述
stable最近发布的稳定版本。
edge最近发布的 Nightly Build。在大多数情况下,这会在每天 01:00 UTC 左右更新。
latest最近发布的版本,无论是稳定版本还是夜间版本。如果您不指定标签,这是 Docker 默认使用的内容。
vX.Y.Z发行版的完整版本(例如,)。v1.40.0
vX.Y主要版本和次要版本(例如,)。v1.40
vX仅主要版本(例如,)。v1

每当发布与此标记匹配的版本时,都会更新次要版本和主要版本的标记(例如, 如果要发布,则标记将更新到它,而不是指向 )。v1.40.1v1.40v1.40.0

配置代理容器

如果您使用推荐的方法之一启动了代理容器,并且您 想要编辑 Netdata 的配置,必须先使用附加到容器。替换为容器的名称。docker execnetdata

docker exec -it netdata bash
cd /etc/netdata
./edit-config netdata.conf

您需要重新启动代理才能应用更改。如果尚未退出容器,请使用以下命令 要重新启动容器,请执行以下操作: 。dockerdocker restart netdata

更改默认主机名

您可以更改 Docker 容器的主机名,从而更改本地仪表板和 Netdata 中显示的名称 云(在创建新容器时)。如果要在启动 Netdata 容器更改其主机名, 您可以安全地停止并移除它。您的配置和衡量指标数据驻留在永久性卷中,并重新附加 添加到重新创建的容器中。

如果使用 ,请使用带有 的选项。docker-run--hostnamedocker run

docker run -d --name=netdata \
--hostname=my_docker_netdata

如果使用 ,将键/值对添加到文件中,然后创建 容器再次使用 .docker-composehostname:docker-compose.ymldocker-compose up -d

version: '3'
services:
netdata:
image: netdata/netdata
container_name: netdata
hostname: my_docker_compose_netdata

如果不想销毁并重新创建容器,可以直接编辑代理的文件。请参阅 上一节,配置代理容器以根据 容器的创建方式。netdata.conf

或者,您可以通过挂载 容器中的主机。使用 ,这可以通过将 添加到 选项。如果您使用的是 Docker Compose,则可以在容器的部分添加一个条目 读数。/etc/hostnamedocker run--volume /etc/hostname:/host/etc/hostname:rovolumes- /etc/hostname:/host/etc/hostname:ro

在运行时添加额外的包

默认情况下,官方 Netdata 容器映像不包含许多可选的运行时依赖项。你 可以在运行时通过在环境变量中列出这些依赖项或任何其他 APT 包来添加它们。NETDATA_EXTRA_DEB_PACKAGES

常用的软件包包括:

  • apcupsd:用于监控APC UPS设备。
  • lm-sensors:用于监控硬件传感器。
  • netcat-openbsd:用于 IRC 警报支持。

运行状况检查

我们的 Docker 映像通过标准 Docker 接口为运行状况检查提供集成支持。

您可以使用环境变量控制运行状况检查的运行方式,如下所示:NETDATA_HEALTHCHECK_TARGET

  • 如果未设置,运行状况检查将尝试访问代理的终端节点。/api/v1/info
  • 如果设置为确切值“cli”,则运行状况检查脚本将用于确定代理是否 是否正常运行。这足以确保 Netdata 在启动期间不会挂起,但不会提供 严格验证守护程序是否正在收集数据或以其他方式可用。netdatacli ping
  • 如果设置为其他任何值,运行状况检查会将该值视为要检查 200 状态代码的 URL。在大多数 案例,这应该从检查容器中运行的代理开始。http://localhost:19999/

在大多数情况下,检查终结点的默认行为就足够了。如果您使用的是 禁用 Web 服务器或限制对某些 API 的访问的配置,您将需要使用非默认值 运行状况检查正常工作的配置。/api/v1/info

将测试映像发布到您自己的存储库

在Netdata,我们提供了多种使用您自己的存储库测试Docker映像的方法。 您可以使用可用的命令行工具,也可以利用我们的 GitHub Actions 基础设施。

作者 root

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注