跳至正文
-
Subscribe to our newsletter & never miss our best posts. Subscribe Now!
子han
子han
  • 首页
  • 示例页面
  • 首页
  • 示例页面
关

搜索

  • https://www.facebook.com/
  • https://twitter.com/
  • https://t.me/
  • https://www.instagram.com/
  • https://youtube.com/
Subscribe
未分类

基于Prometheus和Grafana的服务器监控系统搭建

作者 bud
2026年4月24日 2 分钟阅读
0

基于Prometheus和Grafana的服务器监控系统搭建

从零搭建企业级监控告警平台,实时掌握服务器性能与业务健康状态

引言

服务器一旦上线,如何及时发现CPU爆满、磁盘将满、服务宕机?传统方式是人肉top、df -h,效率低且无法回溯。本项目建设了一套开源监控解决方案:使用Prometheus采集服务器指标,Grafana展示可视化仪表盘,并配置Alertmanager实现邮件/钉钉告警。通过这个项目,我掌握了监控系统的设计思路、指标采集原理以及告警规则配置,具备初级运维开发(SRE)的实操能力。

建议配图:整体架构图(Node Exporter → Prometheus → Grafana + Alertmanager → 告警通知)


一、项目环境准备

1.1 组件说明

组件 作用 端口
Node Exporter 采集服务器硬件指标(CPU、内存、磁盘、网络) 9100
Prometheus 存储时序数据,执行告警规则 9090
Grafana 可视化仪表盘,查询展示指标 3000
Alertmanager 管理告警,发送通知(邮件、钉钉等) 9093

1.2 环境要求

· 一台Linux服务器(Ubuntu 22.04,也可以是你的VPS)
· 开放端口:9100、9090、3000、9093(或通过防火墙仅允许内网/特定IP访问)

建议配图:服务器基础信息截图(uname -a、lsb_release -a)


二、安装与配置Node Exporter

Node Exporter负责暴露服务器指标给Prometheus抓取。

2.1 下载并运行

# 下载最新版(以1.7.0为例)
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar -xzf node_exporter-1.7.0.linux-amd64.tar.gz
cd node_exporter-1.7.0.linux-amd64

# 后台运行(生产环境建议用systemd)
nohup ./node_exporter &

2.2 验证采集

访问 http://服务器IP:9100/metrics,应看到大量以node_开头的指标文本。

建议配图:浏览器访问metrics页面的截图,展示部分指标

2.3 使用systemd管理(推荐)

创建服务文件 /etc/systemd/system/node_exporter.service:

[Unit]
Description=Node Exporter
After=network.target

[Service]
User=nobody
ExecStart=/usr/local/bin/node_exporter
Restart=always

[Install]
WantedBy=multi-user.target

启动并设置开机自启:

sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter

三、安装与配置Prometheus

3.1 下载并解压

wget https://github.com/prometheus/prometheus/releases/download/v2.51.0/prometheus-2.51.0.linux-amd64.tar.gz
tar -xzf prometheus-2.51.0.linux-amd64.tar.gz
mv prometheus-2.51.0.linux-amd64 /opt/prometheus

3.2 配置抓取任务

编辑 /opt/prometheus/prometheus.yml:

global:
  scrape_interval: 15s   # 每15秒采集一次

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']   # 如果是多台服务器,用逗号分隔

3.3 运行Prometheus

/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --web.listen-address=:9090 &

访问 http://服务器IP:9090,在Status → Targets中看到node状态为UP即成功。

建议配图:Prometheus Targets界面截图,显示UP状态


四、安装与配置Grafana

4.1 安装Grafana

使用官方APT源(Ubuntu):

sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt-get update
sudo apt-get install grafana -y
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

4.2 添加Prometheus数据源

  1. 访问 http://服务器IP:3000,默认用户名/密码:admin/admin,强制修改密码。
  2. 左侧菜单:Configuration → Data Sources → Add data source → Prometheus。
  3. URL填写 http://localhost:9090,保存并测试。

4.3 导入仪表盘模板

Grafana官网有大量现成模板。推荐Node Exporter专用模板ID:1860。

· 左侧菜单:Dashboards → Import → 输入1860 → Load
· 选择Prometheus数据源 → Import

几秒后即可看到CPU、内存、磁盘、网络流量的精美图表。

建议配图:Grafana仪表盘截图,展示多个图表(CPU、内存、磁盘)


五、配置Alertmanager告警

5.1 安装Alertmanager

wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
tar -xzf alertmanager-0.26.0.linux-amd64.tar.gz
mv alertmanager-0.26.0.linux-amd64 /opt/alertmanager

5.2 配置邮件告警(示例:使用QQ邮箱SMTP)

编辑 /opt/alertmanager/alertmanager.yml:

global:
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_from: '你的QQ号@qq.com'
  smtp_auth_username: '你的QQ号@qq.com'
  smtp_auth_password: '授权码'
  smtp_require_tls: false

route:
  group_by: ['alertname']
  receiver: 'email'

receivers:
  - name: 'email'
    email_configs:
      - to: '接收邮箱@example.com'

5.3 在Prometheus中添加告警规则

创建告警规则文件 /opt/prometheus/alerts.yml:

groups:
  - name: node_alerts
    rules:
      - alert: HighCPUUsage
        expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "CPU使用率过高"
          description: "服务器 {{ $labels.instance }} CPU使用率超过80%"
      - alert: DiskSpaceLow
        expr: (node_filesystem_free_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 10
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "磁盘空间不足"
          description: "根分区剩余空间不足10%"

修改 prometheus.yml,加入:

rule_files:
  - "alerts.yml"

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['localhost:9093']

重启Prometheus,访问Alerts页面可看到规则。

建议配图:Prometheus Alerts页面截图,展示规则状态(Inactive/Pending/Firing)


六、进阶:接入钉钉告警(Webhook)

Alertmanager支持Webhook,可以对接钉钉机器人。

  1. 在钉钉群添加自定义机器人,获取Webhook URL。
  2. 编写一个简单的Python脚本将Alertmanager告警转发到钉钉,或使用开源工具prometheus-webhook-dingtalk。
# 下载并运行 prometheus-webhook-dingtalk
wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz
tar -xzf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz
./prometheus-webhook-dingtalk --ding.profile="webhook1=钉钉机器人URL"

修改Alertmanager配置,增加webhook receiver。

当前图片没有替代文字。文件名为:屏幕截图-2024-12-31-011416.png

建议配图:


七、排错记录(Troubleshooting)

问题1:Prometheus无法抓取Node Exporter指标

现象:Targets页面显示DOWN。

原因:防火墙未开放9100端口,或Node Exporter未启动。

解决:

# 检查Node Exporter是否运行
ps aux | grep node_exporter
# 检查端口监听
netstat -tlnp | grep 9100
# 开放防火墙(如果有ufw)
ufw allow 9100/tcp

问题2:Grafana导入仪表盘后无数据

现象:图表显示“No data”。

原因:数据源选择错误,或Prometheus中指标名称与仪表盘不匹配(不同版本的Node Exporter指标名可能略有差异)。

解决:在Grafana的Explore中查询node_cpu_seconds_total,确认有数据。若没有,检查Node Exporter版本,或改用更新的仪表盘模板(如16098)。

问题3:告警一直处于Pending状态

现象:CPU已超过80%,但状态仍为Pending。

原因:告警规则中设置了for: 5m,需要持续5分钟才触发。这是为了防止瞬时波动误报。

解决:可以调低for时间测试,但生产环境保持合理阈值。

建议配图:Prometheus Alerts页面中Pending状态的截图


八、成果与总结

最终交付物

· 一套完整的监控告警系统,实时采集服务器CPU、内存、磁盘、网络等指标
· Grafana可视化仪表盘,直观展示历史趋势和实时负载
· 配置了CPU高负载和磁盘空间告警,并通过邮件/钉钉自动通知
· 编写了部署文档和故障排查记录

掌握的技能

· Prometheus时序数据库的基本使用和PromQL查询
· Node Exporter指标采集原理
· Grafana仪表盘创建与数据源配置
· Alertmanager告警规则编写与通知集成
· 服务器运维:systemd服务管理、防火墙配置、进程守护

项目扩展(简历溢价点)

· 监控多台服务器:在prometheus.yml的targets中加入多个IP:9100
· 使用mysqld_exporter、redis_exporter监控中间件
· 对接Grafana的Alerting(新版内置告警)替代Alertmanager
· 将全部组件容器化(Docker Compose一键部署)

项目地址

(可放GitHub仓库,包含docker-compose.yml、告警规则文件等)


写在最后

监控是运维的眼睛。通过这个项目,我从“被动处理故障”转变为“主动发现隐患”,真正理解了可观测性的价值。Prometheus + Grafana已经是云原生时代的标配,掌握它们无论对求职还是实际工作都很有帮助。如果你也想搭建一套属于自己的监控系统,按照本文操作即可。


作者

bud

关注我
暂无评论!成为第一个。

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

近期文章

  • 基于Prometheus和Grafana的服务器监控系统搭建

近期评论

您尚未收到任何评论。

归档

  • 2026 年 4 月

分类

  • 未分类
Copyright 2026 — 子han. All rights reserved. Blogsy WordPress Theme