Ubuntu 系统系列 | 第 20 天:监控与告警系统——Prometheus、Grafana、Netdata 部署

第 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 数据源

  1. 浏览器访问 http://你的服务器IP:3000
  2. 登录后点击左侧齿轮图标 → Data Sources
  3. 点击 Add data source → 选择 Prometheus
  4. 在 URL 字段填入 http://localhost:9090
  5. 点击 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 中创建告警规则:

  1. 进入仪表盘,编辑一个面板
  2. 切换到 Alert 标签页
  3. 设置告警条件,例如 CPU > 90% 持续 5 分钟
  4. 配置通知渠道(邮件、钉钉、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. 邮件服务器基础(明日预告)

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容