第 20/30 天
前言
在服务器运维中,监控系统是运维人员的”眼睛”。没有监控,服务器就像在黑夜里开车——你不知道什么时候会撞上瓶颈。当 CPU 飙到 100%、磁盘写满、内存耗尽时,先于用户发现问题并自动告警,是专业运维的必备能力。
今天我们将深入实践三款主流监控工具:
- Netdata:秒级安装、开箱即用的实时监控神器
- Prometheus:CNCF 毕业项目,时序数据库+拉取式监控标准
- Grafana:数据可视化之王,统一仪表盘
从安装到配置,从告警到仪表盘,全程实战操作。
一、Netdata——五分钟上手的实时监控
Netdata 以其极低的资源占用和零配置的实时监控体验著称。安装即用,无需数据库、无需配置。
1.1 一键安装 Netdata
# 使用官方安装脚本(推荐)
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
# 或者通过 APT 安装(Ubuntu 官方仓库版本较旧)
sudo apt update
sudo apt install netdata -y
安装完成后,Netdata 自动启动并监听 19999 端口:
# 检查服务状态
sudo systemctl status netdata
# 查看监听端口
sudo ss -tlnp | grep 19999
1.2 访问 Netdata 仪表盘
浏览器访问 http://你的服务器IP:19999,你将看到:
- 300+ 个实时图表,覆盖 CPU、内存、磁盘、网络、进程等
- 每秒自动刷新,数据延迟 < 1 秒
- 无需配置,安装即展示所有指标
1.3 配置 Netdata 访问认证
默认 Netdata 监听所有接口,生产环境建议配置防火墙或反向代理:
# 编辑配置文件
sudo nano /etc/netdata/netdata.conf
# 修改 bind to 为仅本地监听
[web]
bind to = 127.0.0.1
或者使用 Nginx 反向代理添加 Basic Auth:
# /etc/nginx/sites-available/netdata
server {
listen 8080;
server_name _;
location / {
proxy_pass http://127.0.0.1:19999;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
auth_basic "Netdata Monitoring";
auth_basic_user_file /etc/nginx/netdata-users;
}
}
创建认证用户:
sudo apt install apache2-utils -y
sudo htpasswd -c /etc/nginx/netdata-users admin
1.4 Netdata 的告警功能
Netdata 内置了 200+ 个告警规则,无需手动配置:
# 查看告警日志
sudo journalctl -u netdata -f | grep -i alarm
# 告警配置文件位置
ls /usr/lib/netdata/conf.d/health.d/
要启用邮件告警,编辑 /etc/netdata/health_alarm_notify.conf:
sudo nano /etc/netdata/health_alarm_notify.conf
设置:
SEND_EMAIL="YES"
DEFAULT_RECIPIENT_EMAIL="admin@example.com"
二、Prometheus——云原生监控标准
Prometheus 是 CNCF 的毕业项目,采用拉取式(Pull)模型采集指标,以时间序列方式存储数据。
2.1 安装 Prometheus
# 下载最新版本
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz
tar xzf prometheus-2.53.0.linux-amd64.tar.gz
sudo mv prometheus-2.53.0.linux-amd64 /opt/prometheus
2.2 创建 Prometheus 用户和 systemd 服务
# 创建运行用户
sudo useradd --no-create-home --shell /bin/false prometheus
# 设置目录权限
sudo chown -R prometheus:prometheus /opt/prometheus
# 创建数据目录
sudo mkdir -p /var/lib/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
创建 systemd 服务:
sudo tee /etc/systemd/system/prometheus.service > /dev/null << 'EOF'
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/opt/prometheus/prometheus
--config.file=/opt/prometheus/prometheus.yml
--storage.tsdb.path=/var/lib/prometheus/
--web.console.templates=/opt/prometheus/consoles
--web.console.libraries=/opt/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
EOF
2.3 配置 Prometheus
sudo tee /opt/prometheus/prometheus.yml > /dev/null << 'EOF'
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: []
rule_files:
- "rules/*.yml"
scrape_configs:
# Prometheus 自身监控
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# Node Exporter(系统指标)
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
EOF
2.4 启动 Prometheus
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
sudo systemctl status prometheus
浏览器访问 http://你的服务器IP:9090,进入 Prometheus 的查询界面。
2.5 安装 Node Exporter(采集系统指标)
Node Exporter 是 Prometheus 生态中最常用的采集器,负责收集系统指标:
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xzf node_exporter-1.8.2.linux-amd64.tar.gz
sudo mv node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
# 创建 systemd 服务
sudo tee /etc/systemd/system/node_exporter.service > /dev/null << 'EOF'
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=nobody
Group=nogroup
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
验证采集器是否正常:
curl http://localhost:9100/metrics | head -20
2.6 PromQL 基础查询
Prometheus 使用 PromQL 查询数据,几个常用示例:
# CPU 使用率(1分钟内平均)
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)
# 内存使用率
100 * (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)
# 磁盘使用率
100 * (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"}
# 网络流量
rate(node_network_receive_bytes_total[5m])
三、Grafana——数据可视化之王
Grafana 将 Prometheus、Netdata 等数据源的数据转化为美观的仪表盘。
3.1 安装 Grafana
# 添加 Grafana 官方 APT 仓库
sudo apt-get install -y software-properties-common wget
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
# 安装 Grafana
sudo apt update
sudo apt install grafana -y
3.2 启动 Grafana
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
sudo systemctl status grafana-server
Grafana 默认监听 3000 端口,初始登录凭据为 admin / admin。
3.3 添加 Prometheus 数据源
- 浏览器访问
http://你的服务器IP:3000 - 登录后点击左侧齿轮图标 → Data Sources
- 点击 Add data source → 选择 Prometheus
- 在 URL 字段填入
http://localhost:9090 - 点击 Save & Test,确认显示 “Data source is working”
3.4 导入监控仪表盘
Grafana 社区提供了大量预置仪表盘模板:
# 使用 Grafana API 导入 Node Exporter 全屏仪表盘(ID: 1860)
curl -X POST http://admin:admin@localhost:3000/api/dashboards/import
-H "Content-Type: application/json"
-d '{
"dashboard": {"id": null},
"overwrite": true,
"inputs": [{"name": "DS_PROMETHEUS", "type": "datasource", "pluginId": "prometheus", "value": "Prometheus"}]
}'
或者通过 UI 导入:
1. 点击左侧 + 号 → Import
2. 输入仪表盘 ID 1860(Node Exporter Full)
3. 选择 Prometheus 数据源
4. 点击 Import
3.5 创建自定义告警
Grafana 支持基于规则的告警,通过 Alertmanager 通知:
# 安装 Alertmanager
cd /tmp
wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz
tar xzf alertmanager-0.27.0.linux-amd64.tar.gz
sudo mv alertmanager-0.27.0.linux-amd64 /opt/alertmanager
在 Grafana UI 中创建告警规则:
- 进入仪表盘,编辑一个面板
- 切换到 Alert 标签页
- 设置告警条件,例如
CPU > 90%持续 5 分钟 - 配置通知渠道(邮件、钉钉、Slack 等)
四、三款工具对比与选型建议
| 特性 | Netdata | Prometheus | Grafana |
|---|---|---|---|
| 安装难度 | ⭐ 极简(5分钟) | ⭐⭐⭐ 中等 | ⭐⭐ 简单 |
| 数据存储 | 内存+磁盘轮转 | 时序数据库 | 不存储数据 |
| 数据采集 | 内置(无需配置) | 拉取式(需配置Exporter) | 外部数据源 |
| 告警 | 内置200+规则 | PromQL规则+Alertmanager | 可视化告警规则 |
| 可视化 | 300+实时图表 | 基础查询界面 | 专业仪表盘 |
| 历史数据 | 有限(小时级) | 永久(可配置留存) | 依赖数据源 |
| 资源占用 | ~1% CPU, ~100MB 内存 | ~5% CPU, ~500MB+ 内存 | ~2% CPU, ~200MB 内存 |
| 适用场景 | 快速定位、实时排障 | 长期监控、指标分析 | 统一展示、多数据源聚合 |
推荐组合方案:
- 个人/小团队:Netdata(开箱即用)+ Grafana(可视化增强)
- 生产环境:Prometheus(采集存储)+ Node Exporter(系统指标)+ Grafana(仪表盘)+ Alertmanager(告警通知)
- 大型集群:Prometheus Federation + Thanos + Grafana + 多级告警
五、常见问题与排障
Q1: Prometheus 启动报错 “permission denied”
# 检查数据目录权限
sudo chown -R prometheus:prometheus /var/lib/prometheus /opt/prometheus
Q2: Grafana 无法连接 Prometheus
# 检查 Prometheus 是否在监听
curl http://localhost:9090/-/ready
# 确认防火墙
sudo ufw allow 9090/tcp
sudo ufw allow 3000/tcp
Q3: Node Exporter 无数据
# 检查 metrics 端点
curl -s http://localhost:9100/metrics | grep -c "node_"
# 确认 Prometheus 配置中 target 正确
# 检查 Prometheus 日志
sudo journalctl -u prometheus -n 50
Q4: 磁盘空间被 Prometheus 数据占满
# 配置数据保留时间
# 在 prometheus.yml 中添加:
# storage.tsdb.retention.time: 30d
# 然后重启
sudo systemctl restart prometheus
总结与下期预告
今天我们部署了三款核心监控工具:
- ✅ Netdata:秒级安装,300+ 实时图表,适合快速排障
- ✅ Prometheus:CNCF 标准时序数据库,Node Exporter 采集系统指标
- ✅ Grafana:统一仪表盘,美观的可视化,灵活告警
监控系统搭建完成后,运维人员可以第一时间发现服务器异常,从被动救火转向主动防御。
明天第 21 天,我们将继续深入服务器运维专题,学习邮件服务器基础:Postfix + Dovecot 配置入门。从零搭建一个完整的邮件收发系统,涵盖 SMTP、IMAP、SPF/DKIM 等关键配置,敬请期待!
系列目录
第 1 周:Ubuntu 基础入门
1. Ubuntu 简介与版本选择
2. 手把手安装 Ubuntu
3. Ubuntu 桌面环境初探
4. Ubuntu 终端基础
5. 用户与权限管理
6. 软件包管理
7. 文件与文本操作
第 2 周:Ubuntu 系统管理与运维
8. 系统服务管理:systemd 与 systemctl 完全指南
9. 磁盘与文件系统管理
10. 网络配置与管理
11. 进程管理与监控
12. 计划任务与自动化
13. 备份与恢复策略
14. 系统更新与升级管理
第 3 周:Ubuntu 服务器实战
15. SSH 远程管理与安全加固
16. Web 服务器搭建
17. 数据库服务器部署
18. Docker 容器化管理
19. 文件共享服务
20. ✅ 监控与告警系统(今日发布)
21. 邮件服务器基础(明日预告)















暂无评论内容