Netdata 本地集群部署,不通过netdata cloud,没有子节点数量限制


目录

[TOC]


安装前说明

配置太低的机器不推荐使用
虽然服务端Netdata Parent (centralization point)和客户端Netdata Child (production system)运行的都是同一个镜像,但是服务端资源占用会多一点

测试下来服务端内存占用900MB,客户端内存占用300MB

效果图

部署

​ 1.Netdata Master(服务端)

​ •收集自身的监控数据

​ •接收所有客户端(Agent)的数据

​ •通过 Web UI 展示所有节点的数据

​ 2.Netdata Agent(客户端)

​ •监控自身服务器数据

​ •将数据流式发送到 Master


1. 确保 Docker 和 Docker Compose 已安装

所有服务器(Master + Agents) 上执行:

sudo apt update && sudo apt install -y docker.io docker-compose vim

检查 Docker 是否正常运行:

docker --version
docker-compose --version

2. 创建目录结构

在 Master(服务端)上执行

mkdir -p /home/netdata/master
cd /home/netdata
服务端不用重复安装客户端了,安装服务端就有监控

在每个 Agent(客户端)上执行

mkdir -p /home/netdata/agent
cd /home/netdata

3. 生成 API Key

Master(服务端) 执行:

uuidgen

例如生成:

11111111-2222-3333-4444-555555555555

复制这个 API Key,在后面的配置中使用


4. 配置 Netdata Master(服务端)

创建 docker-compose.yml

Master(服务端) 上创建 docker-compose.yml:

cd /home/netdata
vim docker-compose.yml

写入以下内容:

version: '3.3'

services:
  netdata-master:
    image: netdata/netdata
    container_name: netdata-master
    restart: unless-stopped
    pid: host
    ports:
      - "19999:19999"
    volumes:
      - ./master/netdata.conf:/etc/netdata/netdata.conf:ro
      - ./master/stream.conf:/etc/netdata/stream.conf:ro
      - ./master/lib:/var/lib/netdata
      - ./master/cache:/var/cache/netdata
      - /:/host/root:ro,rslave
      - /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
    environment:
      - DISABLE_TELEMETRY=1
    cap_add:
      - SYS_PTRACE
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    networks:
      - netdata-network

networks:
  netdata-network:
    driver: bridge

创建 netdata.conf

vim /home/netdata/master/netdata.conf

写入以下内容:

[global]
  run as user = root
  bind to = *
  hostname = aaa
hostname = aaa: aaa是服务端节点名字,可自定义

创建 stream.conf

vim /home/netdata/master/stream.conf

写入以下内容:

[stream]
  enabled = yes
  accept_streams_from = *

[11111111-2222-3333-4444-555555555555]
  enabled = yes
  allow from = *
11111111-2222-3333-4444-555555555555由命令uuidgen生成(也可以自己瞎编一个),用来给其他子节点(机器)使用,每个子节点的uuid需要不相同

5. 启动 Netdata Master(服务端)

Master(服务端) 执行以下命令启动服务:

cd /home/netdata
docker-compose up -d

6. 配置 Netdata Agent(客户端)

创建 docker-compose.yml

每个 Agent(客户端) 上创建 docker-compose.yml:

cd /home/netdata
vim docker-compose.yml

写入以下内容:

version: '3.3'

services:
  netdata-agent:
    image: netdata/netdata
    container_name: netdata-agent
    restart: unless-stopped
    pid: host
    volumes:
      - ./agent/netdata.conf:/etc/netdata/netdata.conf:ro
      - ./agent/stream.conf:/etc/netdata/stream.conf:ro
      - ./agent/lib:/var/lib/netdata
      - ./agent/cache:/var/cache/netdata
      - /:/host/root:ro,rslave
      - /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
    environment:
      - DISABLE_TELEMETRY=1
    cap_add:
      - SYS_PTRACE
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    networks:
      - netdata-network

networks:
  netdata-network:
    driver: bridge

创建 netdata.conf

vim /home/netdata/agent/netdata.conf

写入以下内容:

[global]
  run as user = root
  bind to = *
  hostname = bbb
hostname = bbb子节点名字可以自定义

创建 stream.conf

vim /home/netdata/agent/stream.conf

写入以下内容:

[stream]
  enabled = yes
  destination = 服务端IP:19999
  api key = 11111111-2222-3333-4444-555555555555

7. 启动 Netdata Agent(客户端)

每个 Agent(客户端) 上执行以下命令启动服务:

cd /home/netdata
docker-compose up -d

8. 访问 Web UI

在 Master(服务端) 上打开浏览器,访问:

http://服务端IP:19999/v3
不加/v3会先到一个让你登录的界面,虽然可以手动选不登录,但每次都手动选太麻烦

在 Web UI 上:

​ 1. 进入 “Nodes”

​ 2. 可以看到所有 子节点(Agent) 的数据

另一个类似netdata的软件beszel,这个没有netdata复杂,是beszel客户端安装一个ssh服务端,然后beszel服务端通过ssh连接beszel客户端获取机器的信息,也就是说客户端和服务端的ip必须要连通

安全相关

推荐nginx加一个auth_basic密码验证

比如用htpasswd生成.htpasswd 文件

apt-get install apache2-utils
htpasswd -c /path/to/file/netdata.passwords yourName

然后nginx配置文件中添加:

auth_basic "Registry Realm";
auth_basic_user_file /path/to/file/netdata.passwords;

还有/v3也可以通过重写实现

if ($request_uri !~ ^/v3) {
    rewrite ^(.*)$ /v3$1 break;
}

上面两个合起来就是:

location / {
        if ($request_uri !~ ^/v3) {
            rewrite ^(.*)$ /v3$1 break;
        }
        proxy_pass http://172.17.0.1:19999;
        
        auth_basic "Registry Realm"; 
        auth_basic_user_file /path/to/file/netdata.passwords;

    }
Last modification:February 4, 2025
V50%看看实力