Netdata —— 秒级采集、零配置大盘、Parent 集中与健康告警的分布式可观测代理
Netdata —— 秒级采集、零配置大盘、Parent 集中与健康告警的分布式可观测代理
分类:03 一体化监控平台 适用:Linux/FreeBSD/macOS 物理机、虚机、云主机、容器宿主机、边缘与 IoT;单机排障到数千节点(Parent 分层) 一句话:每台机器装一个 Agent,1 秒粒度自动发现指标、自带 Web 大盘、就地判定健康告警,再用 Parent 汇聚成统一视图 官方:https://www.netdata.cloud/ | https://github.com/netdata/netdata | https://learn.netdata.cloud/ 授权:Agent 开源(GPLv3+),可完全离线;Netdata Cloud 为商业 SaaS / 私有化控制面,按节点订阅
1. 它解决什么问题
| 痛点 | 对应能力 |
|---|---|
| 传统监控 15~60s 采样,瞬时毛刺被平均掉 | 默认 1 秒采集,抓得住 3~5 秒 CPU 尖峰、OOM 前抖动 |
| 装完还要 exporter + PromQL + Grafana 面板 | 自动发现系统/容器/应用,自带 Web 大盘,零配置、无查询语言 |
| 排障要 SSH 登机翻 top / dmesg / 多套日志 | 指标、进程、网络连接、systemd-journal 日志同屏按时间轴关联 |
| 告警阈值全靠人工调、误报多 | 数百条内置 health 告警 + 每指标本地 ML 异常检测,开箱即用 |
| 多机无统一视图,又不想引入重型 TSDB 集群 | Parent/Child 流:Child 近无状态推送,Parent 统一存储、大盘与告警 |
| 中心故障导致监控全盲、气隙环境无法连公网 | 每个 Agent 独立离线可用;集中化用自建内网 Parent 或 Cloud On-Prem |
不擅长:年级合规归档与复杂 PromQL 多维聚合(配 VictoriaMetrics/Thanos)、日志全文检索与链路追踪(仅轻量日志关联)、以业务 SLO / 自定义 PromQL 为核心的场景。
2. 核心概念与架构
2.1 术语表
| 术语 | 含义 |
|---|---|
| Agent / Node | 装在监控机上的单进程 netdata,自带采集、存储、告警、Web 全套能力 |
| Collector / Plugin | 采集插件:proc.plugin、go.d.plugin(应用/容器)、python.d.plugin、apps.plugin(按进程归类)、statsd.plugin |
| Chart / Dimension / Context | 图表 / 图表内一条序列 / 同类图表模板;告警与查询以 context 或 chart 为对象 |
| dbengine | 分层时序引擎:tier0 秒级 → tier1 分钟 → tier2 小时级降采样,按磁盘配额滚动淘汰 |
| health / alarm | 内置健康引擎;规则在 health.d/*.conf,用 alarm:/template: + lookup/warn/crit 描述 |
| ML | 每指标本地训练异常模型输出异常带,[ml] 可关以省 CPU |
| Parent / Child | 流式汇聚角色:Child 实时推指标,Parent 担历史与统一大盘;同一套软件、不同配置 |
| stream.conf | 流式配置:Parent 用 [<UUID>] 授权,Child 用 [stream] 指定 destination 与 api key |
| Netdata Cloud | 可选控制面,只存元数据、实时下发查询,指标不出域 |
| edit-config | 官方脚本,把内置模板复制到用户目录再编辑,避免升级被覆盖 |
2.2 组件与数据流
/proc /sys /应用端点 ─▶ collectors(proc/go.d/apps/statsd,每秒采集·自动发现)
▼
┌───────────────── 单节点 Agent ─────────────────┐
│ database(dbengine: tier0秒→tier1分→tier2时) │
│ ├─▶ Web/API :19999(大盘 + /api/v1) │
│ ├─▶ health(health.d + reload-health)─────────│──▶ alarm-notify ──▶ 通知
│ └─▶ ML 异常检测(可关) │
└─────────────────────┬──────────────────────────┘
│ streaming:stream.conf / tcp:19999 / api key 鉴权
Child A/B/N ──────────┴──▶ Parent(汇聚存储·统一大盘·集中告警)
(Child 可设 [db] mode=ram 近无状态) ─▶ 浏览器 / 二级 Parent / Cloud
- collectors → database:按
update every(默认 1s)取数写本地 dbengine,采集与存储同进程,无外部 TSDB 依赖。 - database → health → Web:健康引擎按
health.d规则与 ML 模型判定状态;Web 直接读本地引擎渲染大盘并暴露/api/v1/*、/netdata.conf。 - Child → Parent / 与中心解耦:Child 实时复制指标到 Parent(
[<UUID>]段接受落盘),浏览器只看 Parent 即可纵览全簇;任何中心节点宕机,Child 本地大盘与告警仍可用——区别于"中心轮询式"监控的关键。
3. 安装与部署
版本一律 以官方最新稳定版为准(https://github.com/netdata/netdata/releases)。下列 URL、镜像名与端口均来自官方安装文档;
<xxx>为占位符;不确定参数先sh /tmp/netdata-kickstart.sh --help。
3.1 环境准备
| 项 | 要求 |
|---|---|
| 系统 | Linux 主流发行版、FreeBSD、macOS;容器需挂载 /proc /sys |
| 依赖 | 一键脚本自动装齐;无需外部数据库、无需外部时序库 |
| 端口 | 19999/TCP(Web/API 与 streaming 复用);生产仅对 Parent/内网放行 |
| 权限 | 脚本以 root 安装以读全部内核指标;服务以 netdata 用户常驻 |
| 资源/时间 | 默认 1 |
| 容器前置 | SYS_PTRACE + apparmor=unconfined + 只读挂载 /proc /sys /etc/passwd /etc/group /etc/os-release |
3.2 多种安装方式
方式 A:官方一键脚本(推荐)
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh \
&& sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry
# 等价历史入口:bash <(curl -Ss https://my-netdata.io/kickstart.sh)
sh /tmp/netdata-kickstart.sh --help # 离线/认领/不自动启动等参数以 --help 为准
方式 B:Docker run(单机试跑 / 容器宿主机)
docker run -d --name=netdata -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 /proc:/host/proc:ro -v /sys:/host/sys:ro \
-v /etc/os-release:/host/etc/os-release:ro \
--restart unless-stopped --cap-add SYS_PTRACE \
--security-opt apparmor=unconfined netdata/netdata
用 docker compose 时务必写死
hostname:,否则节点身份漂移、历史被打散;compose 其余挂载与环境变量同方式 B(NETDATA_LISTENER_PORT、DISABLE_TELEMETRY)。
方式 C:发行版包 / 静态二进制 + systemd(离线、信创首选)
sudo apt-get install -y netdata # Debian/Ubuntu;RHEL/Rocky 用 dnf(必要时启 EPEL)
tar xzf netdata-<version>-linux-<arch>.tar.gz -C /opt/ # 静态二进制解压即用
sudo systemctl enable --now netdata
sudo touch /etc/netdata/.opt-out-from-anonymous-statistics # 关闭遥测
气隙集中化:内网部署 Parent(见场景二)或 Netdata Cloud On-Prem,不依赖公网 SaaS。
3.3 首次启动与验证
sudo systemctl enable --now netdata && sudo systemctl status netdata
curl -fsS http://127.0.0.1:19999/api/v1/info | grep -o '"version":"[^"]*"' # 健康检查
curl -fsS http://127.0.0.1:19999/netdata.conf | grep -E 'config directory|health config'
sudo netdatacli ping && sudo tail -n 30 /var/log/netdata/error.log
# 浏览器打开 http://<节点IP>:19999,左上角出现 hostname 与实时图表即成功
4. 配置文件详解
4.1 路径与关键项
| 路径 / 键 | 作用 / 建议值 |
|---|---|
/etc/netdata/netdata.conf |
主配置(静态安装常在 /opt/netdata/etc/netdata/);/netdata.conf 只读查看生效值 |
/etc/netdata/edit-config |
官方脚本:cd /etc/netdata && sudo ./edit-config netdata.conf(依赖 $EDITOR/vi) |
/etc/netdata/health.d/*.conf |
用户自定义/覆盖告警;内置规则在 stock 目录,勿直接改 |
health_alarm_notify.conf / stream.conf |
通知渠道凭据 / Parent-Child 流式配置(含 Token,chmod 640) |
go.d.conf、go.d/*.conf |
采集插件总开关 / 单应用端点与凭据 |
/var/lib/netdata/、/var/cache/netdata/ |
dbengine 数据与缓存 |
/var/log/netdata/{error,access,health}.log |
错误 / 访问 / 健康日志 |
[global] hostname / update every |
节点唯一标识 / 采集间隔秒数(默认 1,小机 2~`5`) |
[db] mode |
dbengine(Parent)/ ram(近无状态 Child)/ none |
[db] dbengine tier 0 disk space MB |
tier0 磁盘配额,决定秒级数据可存多久,小机 256~`1024` |
[web] bind to / default port |
监听地址(生产收敛内网/本机)/ 默认 19999 |
[ml] enabled / [health] enabled |
ML 开关 / 本机告警总开关 |
版本差异:配置键随版本迁移(如
[global] memory mode→[db] mode、tier 参数按 tier 命名)。不确定的键先访问http://<节点>:19999/netdata.conf看本机生效项再照抄,以官方文档为准。
4.2 完整可运行最小示例
# /etc/netdata/netdata.conf —— 用 `sudo ./edit-config netdata.conf` 写入
[global]
hostname = <node-01>
update every = 1
[db]
mode = dbengine
dbengine tier 0 disk space MB = 512
[web]
bind to = 127.0.0.1 localhost
default port = 19999
[ml]
enabled = no
[health]
enabled = yes
sudo systemctl restart netdata
curl -fsS http://127.0.0.1:19999/netdata.conf | grep -E 'hostname|update every|mode ='
5. 核心使用方法(CLI / HTTP API / Web UI)
5.1 命令与操作速览(≥20 条)
| # | 命令 / 路径 | 用途 |
|---|---|---|
| 1 | systemctl start|stop|restart|status netdata |
服务生命周期 |
| 2 | journalctl -u netdata -f |
实时服务日志 |
| 3 | netdatacli ping |
daemon 存活探测 |
| 4 | netdatacli reload-health |
热加载告警规则,无需重启 |
| 5 | ./edit-config netdata.conf |
编辑主配置 |
| 6 | ./edit-config health.d/<name>.conf |
新增/覆盖告警 |
| 7 | ./edit-config health_alarm_notify.conf |
配通知渠道 |
| 8 | ./edit-config stream.conf |
配 Parent/Child 流 |
| 9 | ./edit-config go.d/<app>.conf |
启用某应用采集器 |
| 10 | curl http://127.0.0.1:19999/netdata.conf |
查看生效配置与目录 |
| 11 | GET /api/v1/info |
版本/节点/能力(健康检查) |
| 12 | GET /api/v1/data?chart=&after=&points=&group=&format= |
取某图表时序点 |
| 13 | GET /api/v1/allmetrics?format=prometheus |
Prometheus 文本导出全量指标 |
| 14 | GET /api/v1/allmetrics?format=json |
JSON 全量指标 |
| 15 | GET /api/v1/alarms?all |
当前全部告警及状态 |
| 16 | GET /api/v1/alarm_log?after= |
告警变迁日志 |
| 17 | GET /api/v1/badge.svg?chart= |
生成状态徽章 |
| 18 | GET /api/v1/registry?action=hello |
节点注册/重定向探测 |
| 19 | alarm-notify.sh test |
发测试通知验证渠道 |
| 20 | go.d.plugin -m <module> |
调试单个 go.d 采集模块 |
| 21 | Web UI:时间选择器 / 节点下拉框 / Alerts Disable | 秒级回溯、切 Child、单条静默 |
5.2 /api/v1 查询示例
BASE=http://127.0.0.1:19999
curl -fsS "$BASE/api/v1/info" | jq '.version, .mirrored_hosts'
curl -fsS "$BASE/api/v1/data?chart=system.cpu&after=-300&points=60&group=average&format=json" | jq '.data[0:3]'
curl -fsS "$BASE/api/v1/alarms?all" | jq 'to_entries[] | {chart:.key, status:.value.status}'
curl -fsS "$BASE/api/v1/allmetrics?format=prometheus" | grep '^netdata_' | head
5.3 health.d 告警配置(自定义 / 覆盖内置)
# /etc/netdata/health.d/user_ram.conf —— 用 edit-config 创建;同名 template 覆盖全局阈值
template: 10min_ram_available
on: system.ram
class: Utilization
type: System
component: Memory
lookup: average -10m unaligned of available
units: MiB
every: 1m
warn: $this < (($status >= $WARNING) ? 300 : 200)
crit: $this < (($status >= $CRITICAL) ? 150 : 100)
delay: down 5m multiplier 1.5 max 1h
info: 可用内存持续低于阈值,注意 OOM 风险
to: sysadmin
sudo netdatacli reload-health # 热加载
curl -fsS http://127.0.0.1:19999/api/v1/alarms?all | jq '.["system.ram"]'
sudo -u netdata /usr/libexec/netdata/plugins.d/alarm-notify.sh test # 路径随安装方式变化,以本机为准
关闭吵闹告警:Web UI
Alerts面板对单条Disable,或把该规则to:设为silent;勿改内置 stock 目录。
6. 告警与通知
6.1 阈值与规则要点
alarm 作用于单 chart、template 作用于同 context 全部实例;lookup 取值(如 average -10m unaligned of available、sum、max);warn/crit 支持 $this、$status、$WARNING 滞回表达式抑制抖动;delay/repeat 控制延迟与重发;to: 指定接收角色(silent 关闭单条)。ML 异常带与静态阈值并行,可在 UI 查看。
6.2 通知渠道(health_alarm_notify.conf)
# 用 `cd /etc/netdata && sudo ./edit-config health_alarm_notify.conf` 编辑
SEND_EMAIL="YES"
DEFAULT_RECIPIENT_EMAIL="ops@<example.com>"
# 企业微信/钉钉/飞书机器人:官方未内置专用变量时统一走 Webhook/自定义脚本
SEND_WEBHOOK="YES"
WEBHOOK_URL="https://<企业微信或钉钉机器人 webhook>"
DEFAULT_RECIPIENT_WEBHOOK="alerts"
# Slack/Telegram/ntfy 等按文件内 SEND_<CHANNEL> 开关同理
sudo systemctl restart netdata
sudo -u netdata /usr/libexec/netdata/plugins.d/alarm-notify.sh test # warning/critical/clear 各一条
⚠️ Webhook / Token 属敏感信息:
chmod 640、属主netdata,勿入 Git。渠道变量名以本机health_alarm_notify.conf注释为准(不同版本渠道集合有增删)。
6.3 静默与升级
| 需求 | 做法 |
|---|---|
| 维护期静默 | Web UI Disable 单条 / to: silent;批量用 health.d 覆盖 |
| 只收严重告警 | 把 warn 的 to: 设 silent,仅 crit 指向值班角色 |
| 分级升级 | Agent 不自做升级链,由 Webhook 打到告警平台(夜莺/Alertmanager/PagerDuty)按级别升级 |
| 抑制重复 / 集中告警 | delay + repeat + $status 滞回;Parent 开 [health]、Child 关健康 |
| 通知兜底 | DEFAULT_RECIPIENT_* 保证未匹配角色时仍有收件人 |
7. 实战场景
场景一:单机秒级排障(定位瞬时 CPU 尖峰)
- 目标:抓住每日偶发 3~5 秒 CPU 毛刺并留证。
- 步骤:一键安装 → 确认 1s 粒度 →
/api/v1/data导出窗口 → UI 关联进程/日志。
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh \
&& sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry
curl -fsS "http://127.0.0.1:19999/api/v1/data?chart=system.cpu&after=-600&points=600&group=max&format=csv" > /tmp/cpu-spike.csv
# head /tmp/cpu-spike.csv 应有 600 行;Web UI 拖到尖峰点看 apps.plugin 按进程 CPU 与 journal 日志
- 验证:CSV 有 600 行;UI 悬停可见秒级峰值与对应进程。
- 回滚:
sudo systemctl stop netdata && sudo systemctl disable netdata;⚠️ 卸载前tar czf netdata-backup.tgz /etc/netdata /var/lib/netdata备份。
场景二:Parent 汇聚 20 台 Child,统一大盘且 Child 近无状态
- 目标:只开放 Parent 的 19999,历史集中、Child 极轻。
- 步骤:Parent 生成 UUID 授权 → Child 配
stream.conf推送 → Child 设ram。
# 两端先 `uuidgen` 得 <UUID> 并 `sudo ./edit-config stream.conf`;`allow from` 生产应收紧网段
# Parent:/etc/netdata/stream.conf
[<UUID>]
enabled = yes
default memory mode = dbengine
health enabled by default = auto
allow from = *
# 每个 Child:/etc/netdata/stream.conf
[stream]
enabled = yes
destination = tcp:<PARENT_IP>:19999
api key = <UUID>
default memory mode = ram
health enabled by default = no
sudo ufw allow from <CHILD_CIDR> to any port 19999 proto tcp # Parent 侧
sudo systemctl restart netdata # 两端都执行
curl -fsS http://<PARENT_IP>:19999/api/v1/info | jq '.mirrored_hosts'
- 验证:
http://<PARENT_IP>:19999节点下拉框出现全部 Child;mirrored_hosts列出节点。 - 回滚:注释 Child 的
[stream]并改回dbengine重启即恢复独立存储;⚠️ 先确认 Parent 已落盘再删 Child 本地数据。
场景三:磁盘将满告警推送到企业微信 / 钉钉机器人
- 目标:根分区使用率超阈值告警到 IM。
- 步骤:覆盖
health.d磁盘规则 → 配 Webhook(见 6.2)→ 发测试 → 触发验证。
# /etc/netdata/health.d/disk_space.conf —— 同名 template 覆盖内置阈值
template: disk_fill_rate
on: disk.space
lookup: max -1m unaligned of used
units: %
every: 1m
warn: $this > 80
crit: $this > 90
to: sysadmin
sudo netdatacli reload-health
sudo -u netdata /usr/libexec/netdata/plugins.d/alarm-notify.sh test
curl -fsS 'http://127.0.0.1:19999/api/v1/alarms?all' | jq '.[] | select(.status=="CRITICAL")'
- 验证:群里收到测试与真实告警,API 可见 CRITICAL 状态。
- 回滚:
to: silent或SEND_WEBHOOK="NO"→netdatacli reload-health;删除用户health.d文件即恢复内置阈值。
8. 日常运维与故障排查
| 操作 / 路径 | 命令 |
|---|---|
| 启停与自启 | systemctl start|stop|restart|enable|disable netdata |
| 实时日志 / 三类日志 | journalctl -u netdata -f;/var/log/netdata/{error,access,health}.log |
| 配置自检 / 健康检查 | curl …/netdata.conf、netdatacli ping、GET /api/v1/info |
| 配置 / 数据备份 | tar czf netdata-etc.tgz /etc/netdata;停服务后 tar czf netdata-lib.tgz /var/lib/netdata /var/cache/netdata ⚠️ |
故障「现象 → 原因 → 处置」表
| 现象 | 原因 | 处置 |
|---|---|---|
http://IP:19999 连不上 |
bind to 仅本机 / 防火墙未放行 |
改 [web] bind to 含内网、ufw allow;容器核对 -p |
| 大盘有节点但无实时数据 | 插件被禁 / 容器漏挂 /proc /sys |
开 go.d.conf 插件;补齐只读挂载与 SYS_PTRACE |
| Parent 看不到某 Child | api key 与 Parent [<UUID>] 不一致 / 网络不通 |
两端比对 UUID;nc -vz <PARENT_IP> 19999;查 Parent error.log |
| Child 重启后历史消失 | 设了 ram 且未成功推给 Parent |
确认 streaming;需本地历史改回 dbengine |
| 告警不触发 | [health] enabled = no、to: silent、未热加载 |
开 health;netdatacli reload-health;查 /api/v1/alarms?all |
| 配了 Webhook 收不到 | 变量名/URL 错、脚本无执行权限、出站被拦 | 跑 alarm-notify.sh test 看报错;核对文件内注释变量名 |
| CPU/磁盘持续偏高 | ML 训练 + 1s 采集 + 指标量大、tier 配额未设 | [ml] enabled = no、update every = 2、关无用插件、设 tier0 配额 ⚠️ 清数据前先备份 |
| 升级后自定义配置丢失 | 直接改了内置 stock 目录文件 | 一律用 edit-config 写用户目录;从备份恢复 /etc/netdata |
9. 性能、容量与高可用
| 维度 | 说明 |
|---|---|
| 采集频率 | 默认 update every = 1(秒级);调 2/5 近似线性降 CPU 与写入量 |
| 存储分层 | dbengine tier0 秒 → tier1 分 → tier2 时降采样;配额按 [db] dbengine tier N disk space MB 控制 |
| 容量估算 | 占用 ≈ 指标维度数 × 采样率 × 保留时长 × 压缩比;用 /api/v1/info 指标数 + tier 配额反推,以本机实测为准 |
| 数据保留 | 由各 tier 配额与降采样倍率共同决定,配额越大保留越久,无需传统"保留天数"配置 |
| Parent 分层 / 集群 | Child → Parent → 二级 Parent / Cloud;可按 Child 分组指向不同 Parent,自建可前置 Nginx 反代,以官方文档为准 |
| 高可用 | 每 Agent 自治是最大 HA 优势;Parent 为单点时需主备 + 数据盘快照 + 配置备份 |
| 自监控 | 内置「Netdata Monitoring」大盘显示自身 CPU/内存/磁盘/查询延迟;/api/v1/info、netdatacli ping 作探针 |
10. 安全加固、备份与升级
| 项 | 做法 |
|---|---|
| 监听收敛 | [web] bind to = 127.0.0.1 localhost 或仅内网;严禁 0.0.0.0 裸奔公网 ⚠️ |
| TLS / 认证 | 前置 Nginx 终止 HTTPS + Basic Auth / SSO,只把 127.0.0.1:19999 暴露给本机 |
| 流式鉴权 | Parent stream.conf 用 [<UUID>] 强 api key;Child↔Parent 走 WireGuard/Tailscale 或内网,allow from 收紧网段 |
| 遥测 / 权限 | 安装加 --disable-telemetry 或 touch /etc/netdata/.opt-out-from-anonymous-statistics;服务以 netdata 用户运行,不用 root 常驻;凭据文件 chmod 640、不进版本库 |
| 配置 / 数据备份 | tar czf netdata-etc-$(date +%F).tgz /etc/netdata;停服务后备份 /var/lib/netdata 与 /var/cache/netdata;⚠️ 运行中拷可能得不一致快照 |
| 升级 | 先 --stable-channel + 备份 /etc/netdata 与 /var/lib/netdata,再 sh /tmp/netdata-kickstart.sh --stable-channel |
| 回滚 | 停服务 → 恢复 /etc/netdata → 重装上一版本静态包 → 校验 /api/v1/info;⚠️ 跨大版本 dbengine 格式可能不兼容,先验证数据可读 |
| 信创适配 | 麒麟/统信 + 鲲鹏/飞腾(arm64)、海光/兆芯(amd64) 用官方源码或静态二进制编译;气隙集中化用内网 Parent / Cloud On-Prem |
11. 常见坑(现象 → 原因 → 解决)
| # | 现象 | 原因 | 解决 |
|---|---|---|---|
| 1 | 远程访问 19999 被拒 | 默认 bind to 仅本机 |
改 [web] bind to 并放行防火墙;⚠️ 别为省事直接 0.0.0.0 暴露公网 |
| 2 | Docker 里指标为空 / hostname 每次重启都变 | 漏挂 /proc /sys、缺 SYS_PTRACE;容器未固定 hostname: |
按 3.2 方式 B 补齐挂载;compose 里写死 hostname,否则历史被打散 |
| 3 | 自定义告警重启后失效 / 改了 health.d 不生效 | 改到了内置 stock 目录 / 未热加载 | 用 ./edit-config health.d/xxx.conf 写用户目录;sudo netdatacli reload-health |
| 4 | reload-health 报权限错 / 测试脚本无输出 |
非 root/netdata 执行;脚本路径随安装方式不同 | 加 sudo;find / -name alarm-notify.sh 定位,以本机为准 |
| 5 | Parent 收不到 Child | UUID 不一致 / 端口未放行 / 版本差异 | 两端比对 api key;nc -vz 测连通;各节点版本保持一致 |
| 6 | Child 设 ram 后查不到历史 |
设计如此,历史在 Parent | 需本地历史用 dbengine;⚠️ 未验证 streaming 前别删本地数据 |
| 7 | 告警风暴 | 静态阈值抖动、无滞回/延迟 | 用 $status 滞回表达式 + delay: down 5m + repeat |
| 8 | 内存/磁盘上涨、升级后数据读不出 | ML 未关、tier 配额未设、跨大版本格式变化 | [ml] enabled = no、设 tier0 配额;⚠️ 清数据前先停服务备份,先在测试机验证升级 |
| 9 | 时间轴对不齐 / 编辑配置不生效 | NTP 未同步;配置目录判断错(静态在 /opt/netdata/etc/netdata/) |
全节点 chrony 同步;访问 /netdata.conf 看 config directory 实际值 |
12. 速查表
| 类别 | 项 | 值 / 命令 |
|---|---|---|
| 端口 | Web/API/streaming 默认 | 19999/TCP(容器用 NETDATA_LISTENER_PORT 覆盖) |
| 配置 | 主配置 | /etc/netdata/netdata.conf(静态 /opt/netdata/etc/netdata/) |
| 配置 | 编辑脚本 | sudo ./edit-config <file> |
| 配置 | 告警 / 通知 / 流式 | health.d/*.conf / health_alarm_notify.conf / stream.conf |
| 数据 | dbengine 数据 / 缓存 | /var/lib/netdata/ / /var/cache/netdata/ |
| 服务 / CLI | systemd / 实时日志 | systemctl restart netdata / journalctl -u netdata -f |
| CLI | 存活 / 热加载 / 测试通知 | netdatacli ping / netdatacli reload-health / alarm-notify.sh test |
| API | 节点信息 | GET /api/v1/info |
| API | 时序数据 | GET /api/v1/data?chart=&after=&points=&group=&format= |
| API | 全量导出 | GET /api/v1/allmetrics?format=prometheus|json |
| API | 告警状态 / 日志 | GET /api/v1/alarms?all / /api/v1/alarm_log?after= |
| 参数 | 采集间隔 / 存储模式 | [global] update every = 1 / [db] mode = dbengine |
| 参数 | tier 配额 / ML / 监听 | dbengine tier 0 disk space MB / [ml] enabled = no / [web] bind to |
| 容器 | 镜像 / 健康检查 | netdata/netdata(tag 以官方最新稳定版为准)/ NETDATA_HEALTHCHECK_TARGET |
| 安装 | 官方一键脚本 | https://get.netdata.cloud/kickstart.sh |
13. 选型建议与同类对比
| 维度 | Netdata | Zabbix | Prometheus + Alertmanager | Grafana |
|---|---|---|---|---|
| 定位 | 单机秒级自治 + Parent 汇聚 | 企业级模板化全栈监控 | 拉取式指标 + 告警引擎 | 可视化(不采集/不存储) |
| 采集粒度 | 默认 1 秒 | 通常 30~60s | 通常 15~60s | 取决于数据源 |
| 上手成本 | 最低:装完即大盘、零配置、无查询语言 | 中:Host/Item/Template 建模 | 中高:exporter + PromQL + 规则 | 中:先接数据源 |
| 存储 | 每节点本地 dbengine,无外部 TSDB | 关系库 history/trends | 本地 TSDB,可接远端 | 不存储 |
| 告警 | 内置数百条 + ML,Parent 集中 | Trigger/Action/Escalation 强 | PromQL 规则 + Alertmanager 路由 | 需配底座 |
| 长期归档/多维分析 | 弱(本地滚动淘汰) | 中 | 强(配 Thanos/VM) | 取决于后端 |
| 网络/SNMP 设备 | 弱 | 强 | 靠 snmp_exporter | — |
| 离线/边缘自治 | 强(Agent 全功能离线) | 需连 Server/Proxy | 需连中心 | 需连数据源 |
| 适用规模 | 单机排障 → 数千节点(Parent) | 数十 → 数万台(Proxy) | 云原生大规模 | 任意展示层 |
何时选:需要秒级排障、单机/容器宿主机装完即看、边缘或气隙环境要求本地自治、不想维护独立 TSDB 集群、希望零配置大盘与开箱告警。
何时不选:需要年级合规归档与复杂 PromQL 多维聚合(选 Prometheus + VictoriaMetrics/Thanos)、以 SNMP 网络设备与模板化资产为核心(选 Zabbix)、需要日志/链路统一平台(配 Loki/Tempo 或选夜莺等一体化观测平台)、需要成熟多级值班升级与工单闭环(Zabbix/夜莺/Alertmanager)。
常见互补:Netdata 负责"单机秒级现场",把
/api/v1/allmetrics?format=prometheus或 Parent 数据远程写入 VictoriaMetrics,再用 Grafana 做长期看板。
14. 参考链接
- 官网与开源 Agent:https://www.netdata.cloud/
- GitHub 仓库:https://github.com/netdata/netdata
- 官方文档 Learn:https://learn.netdata.cloud/docs/
- Docker 安装文档:https://learn.netdata.cloud/docs/netdata-agent/installation/docker
- 官方安装脚本:https://get.netdata.cloud/kickstart.sh
- Releases(版本号以官方最新稳定版为准):https://github.com/netdata/netdata/releases