Netdata: 78K+ Star 的实时监控 — 2026 性能调优指南
Netdata (ND) 是一款高性能实时监控 Agent,支持每秒指标采集与可视化。兼容 Docker、Kubernetes、Prometheus 和 Grafana。涵盖 netdata 教程、netdata 安装配置、实时监控、netdata vs prometheus、netdata 性能调优。
- ⭐ 78874
- GPL-3.0
- 更新于 2026-05-19
{{< resource-info >}}
简介 #
大多数监控工具展示的是 30 秒前发生的情况。等你看完数据,那个拖垮数据库连接池的微突发流量早已消失 —— 只留下一条含义模糊的日志条目和一个愤怒的 Pager。Netdata 通过每秒指标、亚 2 秒可视化延迟和 60 秒内完成的单二进制安装,彻底解决了这个痛点。作为 GitHub 上拥有 78,874 个 Star、采用 GPL-3.0 协议的开源项目,Netdata 是当今生产环境中最受欢迎的监控 Agent 之一。本指南将带你完成完整的 Netdata 搭建 —— 从单节点 Docker 部署到流式传输的 Kubernetes 集群 —— 附带可立即应用的性能调优配置。
Netdata 是什么? #
Netdata 是一个分布式实时监控 Agent,以每秒粒度采集、存储和可视化系统及应用程序指标。与传统每 15–60 秒采样一次的轮询式系统不同,Netdata 直接在每个节点上运行,本地捕获数千项指标,并在需要时流式传输到中心 Parent 节点。它使用 C (54.2%)、Go (29%) 和 Rust (8.5%) 编写,资源开销极低:默认配置下每节点 CPU 占用低于 5%,内存约 150 MB。
Netdata 的工作原理 #
Netdata 的架构采用边缘优先、分布式模型。每个节点运行独立的 Agent,无需配置文件即可自动发现 800+ 集成。

核心组件:
- 数据采集层:内置 CPU、内存、磁盘、网络、容器、数据库和应用程序采集器。无需 Telegraf 或 Exporter 等外部依赖。
- 数据库引擎 (dbengine):自定义高性能时序存储,每个采样约 0.5 字节,支持分层存储以实现长期保留。
- ML 异常检测:每个指标在边缘运行 18 个无监督 ML 模型,基于共识的异常检测可将误报率降低 99%。
- 流式传输与父子架构:任何 Agent 均可作为其他子节点的 “Parent”,聚合来自子节点的指标,实现无需中心瓶颈的水平扩展。
- Web 仪表板:嵌入式静态线程 Web 服务器直接从 Agent 的 19999 端口提供实时图表。
安装与配置 #
一行命令安装 (Linux) #
最快的安装方式:
# 使用默认配置安装 Netdatacurl -Ss https://get.netdata.cloud/kickstart.sh | sudo bash
验证安装:
sudo systemctl status netdata
# Active: active (running) since ...
在 http://localhost:19999 访问本地仪表板。
Docker 部署 #
容器化环境部署:
docker run -d --name=netdata \
-p 19999:19999 \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--cap-add SYS_PTRACE \
--security-opt apparmor=unconfined \
netdata/netdata:latest
Docker Compose (生产级) #
version: '3.8'
services:
netdata:
image: netdata/netdata:v2.5.0
container_name: netdata
hostname: "netdata-${HOSTNAME}"
ports:
- "19999:19999"
restart: unless-stopped
cap_add:
- SYS_PTRACE
- SYS_ADMIN
security_opt:
- apparmor:unconfined
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /etc/os-release:/host/etc/os-release:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- netdata-config:/etc/netdata
- netdata-lib:/var/lib/netdata
- netdata-cache:/var/cache/netdata
environment:
- NETDATA_CLAIM_TOKEN=${NETDATA_CLAIM_TOKEN}
- NETDATA_CLAIM_URL=https://app.netdata.cloud
- NETDATA_CLAIM_ROOMS=${NETDATA_CLAIM_ROOMS}
volumes:
netdata-config:
netdata-lib:
netdata-cache:

Kubernetes Helm 安装 #
# 添加 Netdata Helm 仓库
helm repo add netdata https://netdata.github.io/helmchart/
helm repo update
# 使用默认值安装
helm install netdata netdata/netdata \
--namespace monitoring \
--create-namespace
验证 Pod:
kubectl get pods -n monitoring
# NAME READY STATUS
# netdata-parent-0 1/1 Running
# netdata-child-xxx 1/1 Running
生成当前配置 #
下载运行中的配置以进行自定义:
# 下载当前生效配置
curl -o /etc/netdata/netdata.conf http://localhost:19999/netdata.conf
# 或使用 edit-config 脚本
sudo /etc/netdata/edit-config netdata.conf
与主流工具集成 #
Prometheus Remote Write #
将 Netdata 指标导出到 Prometheus 以实现长期存储和 PromQL 查询:
sudo /etc/netdata/edit-config exporting.conf
[prometheus:remote_write]
enabled = yes
destination = prometheus:9090
remote write URL path = /api/v1/write
data source = average
prefix = netdata
send charts matching = *
send hosts matching = *
重启 Netdata:
sudo systemctl restart netdata
Grafana 仪表板 #
虽然 Netdata 内置仪表板,许多团队更喜欢使用 Grafana 进行集中可视化。在 Grafana 中将 Netdata 添加为 Prometheus 数据源:
# Grafana 中的 datasource.yaml
apiVersion: 1
datasources:
- name: Netdata-Prometheus
type: prometheus
url: http://netdata:19999/api/v1/allmetrics?format=prometheus
access: proxy
isDefault: false
jsonData:
timeInterval: "1s"
Kubernetes DaemonSet (高级) #
在每个 K8s 节点上获得完整的宿主机级可见性:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: netdata
namespace: monitoring
spec:
selector:
matchLabels:
app: netdata
template:
metadata:
labels:
app: netdata
spec:
hostNetwork: true
hostPID: true
containers:
- name: netdata
image: netdata/netdata:v2.5.0
ports:
- containerPort: 19999
hostPort: 19999
securityContext:
capabilities:
add: [SYS_PTRACE, SYS_ADMIN]
volumeMounts:
- name: proc
mountPath: /host/proc
readOnly: true
- name: sys
mountPath: /host/sys
readOnly: true
- name: docker-sock
mountPath: /var/run/docker.sock
readOnly: true
volumes:
- name: proc
hostPath:
path: /proc
- name: sys
hostPath:
path: /sys
- name: docker-sock
hostPath:
path: /var/run/docker.sock
PostgreSQL 监控 #
在 go.d/postgres.conf 中启用 PostgreSQL 采集器:
jobs:
- name: local
dsn: 'postgres://netdata_monitor:password@localhost:5432/postgres'
collect:
- database_statistics
- table_statistics
- index_statistics
- replication_statistics
timeout: 2
测试采集器:
sudo /etc/netdata/edit-config go.d/postgres.conf
# 重启以生效
sudo systemctl restart netdata
Nginx 监控 #
监控 Nginx stub_status 和访问日志:
# /etc/netdata/go.d/nginx.conf
jobs:
- name: local
url: http://localhost/stub_status
- name: access_log
path: /var/log/nginx/access.log
parser:
type: ltsv
基准测试 / 实际应用场景 #
资源占用对比 #
阿姆斯特丹大学发表了同行评审研究 (ICSOC 2023),将 Netdata 评为 Docker 系统中最节能的监控工具。独立基准测试确认:
| 场景 | Netdata | Prometheus + Node Exporter | Zabbix Agent |
|---|---|---|---|
| CPU 开销 (%) | 1–5% | 5–15% | 10–20% |
| 每节点内存 | 100–150 MB | 200–500 MB | 150–300 MB |
| 采集间隔 | 1 秒 | 15–60 秒 | 30–60 秒 |
| 启动时间 | < 60 秒 | 30–60 分钟 | 2–4 小时 |
| 每节点指标数 | 2,000+ | 500–1,000 | 1,000–2,000 |
| 配置工作量 | 零 | 中等 | 大量 |
流式传输扩展基准 #
Netdata 的父子流式架构可水平扩展:
- 单 Parent:每秒接收 100 万+ 采样,内存约 3.5 GB
- 10 个子节点:每节点 20k 指标,1 秒保留 7 天,磁盘 12 GB
- Active-Active 集群:通过完整数据复制实现无限水平扩展
- 临时节点:将指标流式传输到 Parent,节点终止后数据仍然保留
实际部署案例:500 节点 K8s 集群 #
一家中型 SaaS 公司运行 500 个 Kubernetes 节点,采用以下架构:
- 3 个可用区部署 5 个 Netdata Parent (active-active)
- 通过 DaemonSet 运行 500 个子 Agent,每节点 RAM 模式 (~50 MB)
- 分层存储:1 秒精度 7 天,1 分钟精度 1 个月,1 小时精度 1 年
- 每 Parent 总存储:25 GB (集群共 125 GB)
- 通过 Netdata Cloud 路由告警到 PagerDuty 和 Slack
高级用法 / 生产环境加固 #
性能调优:netdata.conf #
默认配置针对单机使用优化。对于生产系统,需要调优数据库引擎并禁用不必要的采集器。
最小资源占用 (生产子节点):
[global]
# 以最低优先级运行,避免影响应用程序
process scheduling policy = batch
process nice level = 19
# 在受限节点上减少线程数
libuv worker threads = 4
[db]
# 子节点流式传输到 Parent 时使用纯内存模式
mode = ram
retention = 3600
# 本地缓冲只需单层存储
storage tiers = 1
[ml]
# 子节点禁用 ML —— 在 Parent 上运行
enabled = no
[health]
# 子节点禁用本地告警
enabled = no
[web]
# 仅绑定 localhost 以确保安全
bind to = 127.0.0.1
allow connections from = localhost
[plugins]
# 禁用未使用的采集器以降低 CPU/内存
ebpf = no
perf = no
nfacct = no
fping = no
ioping = no
tc = no
idlejitter = no
debugfs = no
systemd-journal = no
带分层存储的 Parent 节点 (中心监控):
[db]
mode = dbengine
storage tiers = 3
dbengine page cache size = 1.4GiB
# 第 0 层:1 秒精度,保留 7 天
update every = 1
dbengine tier 0 retention size = 12GiB
dbengine tier 0 retention time = 7d
# 第 1 层:1 分钟精度,保留 1 个月
dbengine tier 1 update every iterations = 60
dbengine tier 1 retention size = 4GiB
dbengine tier 1 retention time = 1mo
# 第 2 层:1 小时精度,保留 1 年
dbengine tier 2 update every iterations = 60
dbengine tier 2 retention size = 2GiB
dbengine tier 2 retention time = 1y
[ml]
enabled = yes
# 每个指标 18 个 ML 模型,每 3 小时训练
train every = 10800
number of models per dimension = 18
[health]
enabled = yes
# 每 10 秒运行健康检查
run at least every seconds = 10
[web]
# 暴露到网络以供仪表板访问
bind to = *
# 限制内部网络访问
allow connections from = 10.* 192.168.* 172.16.* 172.17.*
流式传输配置:stream.conf #
子节点配置 (/etc/netdata/stream.conf):
[stream]
enabled = yes
destination = tcp:netdata-parent.monitoring.svc.cluster.local:19999
api key = YOUR_API_KEY_HERE
timeout seconds = 60
default port = 19999
send charts matching = *
buffer size bytes = 1048576
reconnect delay seconds = 5
initial clock resync iterations = 60
Parent 节点配置 (/etc/netdata/stream.conf):
[API_KEY]
enabled = yes
default memory mode = dbengine
health enabled by default = yes
安全加固 #
为 Web 界面启用 TLS:
[web]
tls version = 1.3
ssl key = /etc/netdata/ssl/key.pem
ssl certificate = /etc/netdata/ssl/cert.pem
# 要求所有连接使用 TLS
bind to = *=dashboard|registry|badges|management|streaming|netdata.conf|readable|writable
监控 Netdata 自身 #
跟踪 Agent 自身的资源使用情况:
# 查看内部指标
curl -s http://localhost:19999/api/v1/info | jq '.version, .hog'
# 检查 dbengine 统计
curl -s http://localhost:19999/api/v1/data?chart=netdata.dbengine_main_page_stats
与替代方案对比 #
| 特性 | Netdata | Prometheus | Datadog | Zabbix |
|---|---|---|---|---|
| 采集间隔 | 1 秒 | 15–60 秒 | 15 秒 | 30–60 秒 |
| Agent 内存 | 100–150 MB | 200–500 MB | 200–400 MB | 150–300 MB |
| Agent CPU | 1–5% | 5–15% | 3–8% | 10–20% |
| 搭建时间 | < 60 秒 | 30–60 分钟 | 10–20 分钟 | 2–4 小时 |
| 自动发现 | 800+ 集成 | 有限 | 600+ 集成 | 基于模板 |
| 内置仪表板 | 是 (实时) | 否 (仅 PromQL) | 是 | 是 (较旧) |
| ML 异常检测 | 每个指标 18 个模型 | 否 (需额外组件) | 是 | 有限 |
| 长期存储 | 分层 dbengine | 默认 15 天 | 云端 | 外部数据库 |
| 许可证 | GPL-3.0 (免费) | Apache-2.0 (免费) | $15/主机/月 | GPL-2.0 (免费) |
| 告警路由 | 内置 + Cloud | Alertmanager | 内置 | 内置 |
| K8s 原生支持 | 是 (Helm chart) | 是 (operator) | 是 (operator) | 有限 |
选择建议:
- Netdata:单节点可见性、实时故障排查、资源受限环境、需要零配置监控的团队。
- Prometheus:云原生指标聚合、复杂 PromQL 查询、配合 Thanos/VictoriaMetrics 做长期存储。
- Datadog:企业级可观测性 (指标 + 日志 + 追踪 + APM)、托管 SaaS、SOC 2 合规。
- Zabbix:混合基础设施 (网络设备 + 服务器 + SNMP)、需要 Agent + 无 Agent 监控的组织。
局限性 / 客观评估 #
Netdata 并非适用于所有监控场景:
- 无 Netdata Cloud 时缺少集中多主机视图:开源 Agent 的仪表板是按节点的。要查看 100+ 节点的统一视图,需要使用 Netdata Cloud (SaaS) 或 Parent 流式架构配合外部可视化工具。
- 默认配置长期存储有限:dbengine 默认每层约 256 MB 磁盘。要按规模保留多年数据,需要显式配置分层存储或使用 VictoriaMetrics 等外部时序数据库。
- 告警流水线不如 Alertmanager 灵活:虽然 Netdata 有内置健康检查和通知,但复杂的路由树、静默设置和值班轮换需要 Netdata Cloud 或与 PagerDuty/OpsGenie 集成。
- 不是完整的可观测性平台:Netdata 专注于指标。对于分布式追踪、结构化日志和 APM,需要与 Jaeger、Loki 或 OpenTelemetry 配合使用。
- Windows 支持相对较新:Windows Agent 可用,但采集器比 Linux 少。在以 Windows 为主的环境中,部署前请确认采集器覆盖范围。
常见问题解答 #
Q: Netdata 在生产环境中实际占用多少内存?
流式传输到 Parent 的子节点约 50 MB (使用上面所示的 RAM 模式配置)。存储 10 节点 7 天 1 秒数据的 Parent 节点,使用 1.4 GB 页缓存时期望 2.5–3.5 GB 内存。Agent 会根据可用系统内存自动调整缓存大小。
Q: 我能否不使用 Netdata Cloud 运行 Netdata?
可以。开源 Agent 无需任何云端连接即可完整运行。使用父子流式传输进行集中聚合,直接在任何 Agent 的 19999 端口访问仪表板。Netdata Cloud 增加了统一仪表板、移动应用和高级告警路由,但不是必需的。
Q: Netdata 与 Prometheus + Grafana 相比如何?
Netdata 在实时、按节点可见性和零配置方面表现出色。Prometheus 在动态、临时集群的指标聚合和 PromQL 方面表现出色。许多团队两者都运行:每个节点运行 Netdata 做实时排障,Prometheus 做集群级聚合和长期趋势分析。Netdata 可以通过 OpenMetrics 格式导出指标到 Prometheus。
Q: Netdata 能处理多大规模?
单个 Parent 节点每秒可接收 100 万+ 采样。水平扩展时部署 active-active Parent 集群。理论上没有限制 —— 架构本身就是分布式的。Netdata Cloud SaaS 处理数百万个节点。
Q: 如何备份 Netdata 的数据库和配置?
配置位于 /etc/netdata/,可用 Git、Ansible、Puppet 等进行版本控制。/var/cache/netdata/ 中的 dbengine 数据库具有自修复能力,无需手动备份 —— 流式传输到多个 Parent 节点可提供自然冗余。对于关键环境,运行 active-active Parent 对。
Q: Netdata 是否支持自定义应用指标?
支持。使用内置 StatsD 服务器 (8125 端口)、OpenMetrics 端点,或用 Python 或 Go 编写自定义采集器。go.d.plugin 框架支持以最少的模板代码构建新采集器。
结论 #
Netdata 兑现了大多数监控工具未能实现的承诺:即时、每秒粒度的可见性,且资源开销可忽略不计。对于运行 Docker、Kubernetes 或裸机基础设施的团队来说,这是从"一无所有"到"监控一切"的最快路径。流式架构可以从单个树莓派扩展到多区域 Kubernetes 集群,GPL-3.0 协议意味着零许可成本。
行动清单:
- 今天就在你最关键的服务器上运行一行命令安装
- 在你的 Kubernetes 集群上部署 Helm chart
- 为生产加固配置父子流式传输
- 使用上述配置根据你的资源限制调优
netdata.conf
加入 Netdata Telegram 社区,与 5,000+ 工程师获取实时支持和交流。
** affiliate 披露 **: 本文包含 DigitalOcean 和 HTStack 的 affiliate 链接。如果你通过这些链接购买主机服务,dibi8.com 可能会获得佣金,不会向你收取额外费用。
推荐部署与基础设施 #
上述工具想要落地生产,靠谱的基础设施是前提。dibi8 自己也在用的两个选择:
- DigitalOcean — 新用户 60 天 $200 免费额度,14+ 全球节点。运行开源 AI 工具的首选。
- HTStack — 香港 VPS,国内访问低延迟,dibi8.com 自己也跑在它上面,生产环境验证过。
Aff 链接 — 不增加你的成本,但能帮 dibi8 持续运营。
💬 留言讨论