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+ 集成。

Netdata 架构

Netdata 仪表板概览

核心组件:

  • 数据采集层:内置 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:

Netdata 系统监控界面

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 系统中最节能的监控工具。独立基准测试确认:

场景NetdataPrometheus + Node ExporterZabbix Agent
CPU 开销 (%)1–5%5–15%10–20%
每节点内存100–150 MB200–500 MB150–300 MB
采集间隔1 秒15–60 秒30–60 秒
启动时间< 60 秒30–60 分钟2–4 小时
每节点指标数2,000+500–1,0001,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

与替代方案对比 #

特性NetdataPrometheusDatadogZabbix
采集间隔1 秒15–60 秒15 秒30–60 秒
Agent 内存100–150 MB200–500 MB200–400 MB150–300 MB
Agent CPU1–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 (免费)
告警路由内置 + CloudAlertmanager内置内置
K8s 原生支持是 (Helm chart)是 (operator)是 (operator)有限

选择建议:

  • Netdata:单节点可见性、实时故障排查、资源受限环境、需要零配置监控的团队。
  • Prometheus:云原生指标聚合、复杂 PromQL 查询、配合 Thanos/VictoriaMetrics 做长期存储。
  • Datadog:企业级可观测性 (指标 + 日志 + 追踪 + APM)、托管 SaaS、SOC 2 合规。
  • Zabbix:混合基础设施 (网络设备 + 服务器 + SNMP)、需要 Agent + 无 Agent 监控的组织。

局限性 / 客观评估 #

Netdata 并非适用于所有监控场景:

  1. 无 Netdata Cloud 时缺少集中多主机视图:开源 Agent 的仪表板是按节点的。要查看 100+ 节点的统一视图,需要使用 Netdata Cloud (SaaS) 或 Parent 流式架构配合外部可视化工具。
  2. 默认配置长期存储有限:dbengine 默认每层约 256 MB 磁盘。要按规模保留多年数据,需要显式配置分层存储或使用 VictoriaMetrics 等外部时序数据库。
  3. 告警流水线不如 Alertmanager 灵活:虽然 Netdata 有内置健康检查和通知,但复杂的路由树、静默设置和值班轮换需要 Netdata Cloud 或与 PagerDuty/OpsGenie 集成。
  4. 不是完整的可观测性平台:Netdata 专注于指标。对于分布式追踪、结构化日志和 APM,需要与 Jaeger、Loki 或 OpenTelemetry 配合使用。
  5. 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 协议意味着零许可成本。

行动清单:

  1. 今天就在你最关键的服务器上运行一行命令安装
  2. 在你的 Kubernetes 集群上部署 Helm chart
  3. 为生产加固配置父子流式传输
  4. 使用上述配置根据你的资源限制调优 netdata.conf

加入 Netdata Telegram 社区,与 5,000+ 工程师获取实时支持和交流。

** affiliate 披露 **: 本文包含 DigitalOcean 和 HTStack 的 affiliate 链接。如果你通过这些链接购买主机服务,dibi8.com 可能会获得佣金,不会向你收取额外费用。

推荐部署与基础设施 #

上述工具想要落地生产,靠谱的基础设施是前提。dibi8 自己也在用的两个选择:

  • DigitalOcean — 新用户 60 天 $200 免费额度,14+ 全球节点。运行开源 AI 工具的首选。
  • HTStack — 香港 VPS,国内访问低延迟,dibi8.com 自己也跑在它上面,生产环境验证过。

Aff 链接 — 不增加你的成本,但能帮 dibi8 持续运营。

来源与延伸阅读 #

💬 留言讨论