在 Docker 中运行代理的限制
我们不正式支持使用 Docker CLI 选项或 Docker Compose 参数运行 Docker 映像。这种用法通常仍然有效,但某些功能在运行时将不可用 道路。请注意,代理将在启动期间适当地删除容器内的权限,这意味着即使 在没有这些选项的情况下运行时,容器中几乎没有任何内容会以有效 UID 为 0 实际运行。--user
user:
我们的 POWER8+ Docker 映像不支持我们的 FreeIPMI 收集器。这是FreeIPMI本身的技术限制, 不幸的是,这不是我们可以实际解决的问题。
创建新的 Netdata 代理容器
您可以使用 或 创建新的代理容器。使用任何方法后,您都可以 访问 代理仪表板 。docker run
docker-compose
http://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.sock | Docker 容器监视和名称解析。 |
go.d.插件 | /var/run/docker.sock | Docker 引擎和容器监控。请参阅 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:ro
docker 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 服务器内部执行。/opt
Caddyfile
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.1
v1.40
v1.40.0
配置代理容器
如果您使用推荐的方法之一启动了代理容器,并且您 想要编辑 Netdata 的配置,必须先使用附加到容器。替换为容器的名称。docker exec
netdata
docker exec -it netdata bash
cd /etc/netdata
./edit-config netdata.conf
您需要重新启动代理才能应用更改。如果尚未退出容器,请使用以下命令 要重新启动容器,请执行以下操作: 。docker
docker restart netdata
更改默认主机名
您可以更改 Docker 容器的主机名,从而更改本地仪表板和 Netdata 中显示的名称 云(在创建新容器时)。如果要在启动 Netdata 容器后更改其主机名, 您可以安全地停止并移除它。您的配置和衡量指标数据驻留在永久性卷中,并重新附加 添加到重新创建的容器中。
如果使用 ,请使用带有 的选项。docker-run
--hostname
docker run
docker run -d --name=netdata \
--hostname=my_docker_netdata
如果使用 ,将键/值对添加到文件中,然后创建 容器再次使用 .docker-compose
hostname:
docker-compose.yml
docker-compose up -d
version: '3'
services:
netdata:
image: netdata/netdata
container_name: netdata
hostname: my_docker_compose_netdata
如果不想销毁并重新创建容器,可以直接编辑代理的文件。请参阅 上一节,配置代理容器以根据 容器的创建方式。netdata.conf
或者,您可以通过挂载 容器中的主机。使用 ,这可以通过将 添加到 选项。如果您使用的是 Docker Compose,则可以在容器的部分添加一个条目 读数。/etc/hostname
docker run
--volume /etc/hostname:/host/etc/hostname:ro
volumes
- /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 基础设施。