Netdata是目前Linux服务器上最轻量级、最强大的实时性能监控工具之一,安装在Ubuntu系统上后,默认就能监控CPU、内存、磁盘、网络、进程等数百项指标,数据刷新频率达到每秒一次。但默认安装的Netdata只覆盖基础监控,如果你需要针对特定业务场景做插件扩展,比如监控MySQL、Redis、Nginx、Docker容器,或者配置自定义告警规则让系统在异常时主动通知你,就需要手动进行插件扩展和告警配置。下面我直接把完整操作流程、核心配置文件和实战技巧全部讲清楚。
一、Ubuntu上Netdata的安装与基础验证在Ubuntu 20.04或22.04上,最简单的安装方式是使用官方一键脚本:
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh sh /tmp/netdata-kickstart.sh
安装完成后,Netdata默认监听19999端口,浏览器访问 http://你的服务器IP:19999 就能看到实时监控面板。先确认服务正常运行:
systemctl status netdata
如果显示active (running),说明基础环境没问题。接下来进入核心的扩展和告警配置环节。
二、Netdata插件扩展机制详解Netdata的插件体系分为两大类:一类是内置的collector(数据采集器),另一类是外部集成插件。内置collector通过配置文件开启或关闭,外部插件则需要单独部署。
Netdata的所有collector配置文件都放在 /etc/netdata/ 目录下,主配置文件是 netdata.conf。每个采集模块对应一个 .conf 文件,比如 python.d.conf 控制Python应用监控,go.d.conf 控制Go应用监控,charts.d.conf 控制自定义图表。
以监控Nginx为例,Netdata自带了go.d/nginx模块,但默认可能没启用。编辑配置文件:
nano /etc/netdata/go.d/nginx.conf
把 enabled = no 改成 enabled = yes,然后重启Netdata:
systemctl restart netdata
这样Netdata就会自动采集Nginx的连接数、请求数、带宽等指标。同样的道理,要监控MySQL,编辑 go.d/mysql.conf,要监控Redis,编辑 go.d/redis.conf,全部改成enabled = yes即可。
三、Docker容器监控的插件扩展如果你的Ubuntu服务器跑了Docker,Netdata有专门的cgroups插件来监控每个容器的资源使用。这个插件默认是开启的,但需要确保Docker的cgroup驱动设置正确。检查方法:
docker info | grep -i cgroup
如果输出是cgroupfs,说明没问题。如果是systemd,需要在Docker的daemon.json里配置:
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
修改后重启Docker服务,Netdata就能正确识别每个容器的CPU、内存、网络IO和磁盘IO了。在监控面板上,你会看到每个容器作为独立的节点出现,数据实时刷新。
四、自定义Python插件扩展实战Netdata最强大的地方在于你可以用Python写自定义采集脚本,监控任何你想监控的东西。自定义插件放在 /etc/netdata/python.d/ 目录下,每个插件是一个.conf文件加一个.chart.py文件。
举个实际例子:监控一个自定义的业务队列深度。创建配置文件:
nano /etc/netdata/python.d/myqueue.conf
写入以下内容:
[myqueue] update_every = 5 command = "python3 /etc/netdata/python.d/myqueue.chart.py"
然后创建采集脚本:
nano /etc/netdata/python.d/myqueue.chart.py
#!/usr/bin/env python3
import os
def get_queue_depth():
# 这里替换成你实际获取队列深度的逻辑
# 比如从Redis读取、从文件读取、调用API等
try:
with open('/var/run/myqueue/depth', 'r') as f:
return int(f.read().strip())
except:
return 0
ORDER = ['queue_depth']
CHARTS = {
'queue_depth': {
'options': ['myqueue', 'Queue Depth', 'messages', 'queue', 'myqueue.queue_depth', 'line'],
'lines': [
['queue_depth', 'current', 'absolute', 1, 1000]
]
}
}
def get_data():
return {
'queue_depth': get_queue_depth()
}
给脚本执行权限并重启Netdata:
chmod +x /etc/netdata/python.d/myqueue.chart.py systemctl restart netdata
这样你就拥有了一个完全自定义的监控指标,面板上会实时显示队列深度曲线。
五、Netdata告警配置完整指南Netdata的告警系统非常灵活,配置文件在 /etc/netdata/health_alarm_notify.conf,告警规则在 /etc/netdata/health.d/ 目录下。每个告警规则是一个.conf文件。
先配置通知渠道,比如你想用企业微信、钉钉、Slack或者邮件接收告警。以企业微信机器人为例,编辑通知配置:
nano /etc/netdata/health_alarm_notify.conf
# 企业微信机器人通知 SEND_WECHAT="YES" WECHAT_WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key" DEFAULT_RECIPIENT_WECHAT="你的企业微信ID"
再以钉钉为例:
SEND_DINGTALK="YES" DINGTALK_WEBHOOK_URL="https://oapi.dingtalk.com/robot/send?access_token=你的token" DEFAULT_RECIPIENT_DINGTALK="你的钉钉ID"
配置好通知渠道后,创建具体的告警规则。比如CPU使用率超过80%持续5分钟告警:
nano /etc/netdata/health.d/cpu_high.conf
template: cpu_usage_80
on: system.cpu
class: Utilization
type: System
component: CPU
lookup: average -1m unaligned of used
units: %
every: 10s
warn: $this > 80
crit: $this > 95
delay: up 1m down 5m multiplier 1.5 max 1h
summary: CPU使用率过高
info: CPU使用率在过去5分钟超过80%,当前值为 $this%
to: webmaster
这里的关键参数解释:every是检查频率,warn是警告阈值,crit是严重阈值,delay是告警冷却时间(避免频繁通知),multiplier是每次告警间隔递增倍数。这些参数组合起来能有效防止告警风暴。
六、告警规则编写的高级技巧Netdata的告警表达式支持非常丰富的语法。你可以做同比、环比、多指标联合判断。比如监控内存使用率同时考虑缓存:
template: mem_usage_real
on: system.ram
class: Utilization
type: System
component: Memory
lookup: average -5m unaligned of used
units: %
every: 30s
warn: $this > (($ram_total - $ram_cached - $ram_buffers) * 0.8 / $ram_total * 100)
crit: $this > (($ram_total - $ram_cached - $ram_buffers) * 0.9 / $ram_total * 100)
summary: 实际可用内存不足
info: 排除缓存后的实际内存使用率超过阈值
还可以做磁盘IO告警、网络丢包告警、进程异常退出告警。Netdata内置了大量模板规则,直接放在 /etc/netdata/health.d/ 目录下就能用,你可以先看看现有规则再根据业务修改。
七、Netdata与其他监控系统的协同在实际生产环境中,Netdata通常不是唯一的监控工具,而是作为实时层补充Prometheus+Grafana这种历史趋势分析系统。Netdata的优势是零配置、秒级刷新、开箱即用,劣势是长期数据存储能力弱。所以最佳实践是:Netdata负责实时发现问题,Prometheus负责长期数据归档和趋势分析。
如果你需要把Netdata的数据导出到Prometheus,Netdata原生支持Prometheus remote write接口,在 netdata.conf 里配置:
[prometheus] enabled = yes destination = "http://你的Prometheus地址:9090/api/v1/write"
这样Prometheus就能抓取Netdata的所有实时指标,实现两套系统的数据互通。
八、性能优化与安全加固建议Netdata本身资源占用极低,通常只占几十MB内存和不到1%的CPU。但如果你开启了大量插件,或者服务器上有上千个Docker容器,建议做以下优化:
第一,限制Netdata的历史数据保留时间,编辑 netdata.conf:
[global] history = 3600
把默认的几万秒改成3600秒(1小时),节省磁盘空间。
第二,做安全加固。Netdata默认没有认证,任何人都能访问19999端口看到你的服务器指标。生产环境务必开启认证:
cd /etc/netdata ./netdata-claim.sh -token=你的token -rooms=你的room -url=https://app.netdata.cloud
或者本地配置Basic Auth,在 nginx反向代理层加认证也行。如果服务器有公网IP,强烈建议用防火墙限制19999端口的访问来源。
第三,定期更新Netdata本身,官方更新频率很高,每个月都有新功能和bug修复:
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh sh /tmp/netdata-kickstart.sh --dont-wait --dont-start-it
总结一下,Ubuntu上的Netdata从安装到插件扩展再到告警配置,整个流程并不复杂,核心就是三个目录:/etc/netdata/ 放配置、/etc/netdata/python.d/ 放自定义插件、/etc/netdata/health.d/ 放告警规则。掌握这三个目录的用法,你就能把Netdata从一个基础监控工具变成贴合你业务的完整运维监控平台。
