Administrator
发布于 2026-03-31 / 18 阅读
0
0

全栈指标监控体系(Prometheus+Grafana)

前言

在复杂的服务器与应用架构中,为实现对系统运行状态的全面掌控,需要一套覆盖基础设施、中间件、应用服务的完整监控方案,基于 Prometheus 与 Grafana 构建的全栈指标监控体系,通过统一采集、存储、查询与可视化各类运行指标,能够实时监控 CPU、内存、服务性能等关键数据,并支持异常告警与直观图表展示,从而实现全方位、可视化、可预警的系统监控,保障服务稳定可靠运行。

一、拆分所需要用到的工具作用

1.什么叫Prometheus?

a.它就是专门收集各种数据的工具,并且它把这些数据存起来,出问题还能报警

  • 服务器 CPU 多少

  • 内存用了多少

  • 硬盘满没满

  • 网络卡不卡

  • MySQL 查询慢不慢

  • 接口访问量 QPS

  • 容器崩没崩

  • 应用有没有报错

2.什么叫Grafana

a. 把Prometheus 存数据的 数字 转换为折线图、柱状图、仪表盘

  • CPU 曲线

  • 内存趋势

  • 接口访问量

  • 系统负载

  • 各种清晰明了的面板

3.全栈指标监控体系

a.一种全方位的监控器,只要你所能用的数据、服务器、应用都可以检测

  • 机器监控

  • 容器监控

  • 数据库监控

  • 应用接口监控

  • 业务指标监控

4.什么叫 Node Exporter

主机数据采集插件

安装在服务器上,帮Prometheus收集主机的CPU、内存、登录等指标

5.什么叫Alertmanager

类似告警通知员

当触发“异常登录”“CPU突增”时,发送告警(此次使用邮件告警)


二、实验前准备

  • 此时实验我准备的是Ubuntu24.04操作系统,并且我们需要root权限,端口是默认的22

  • IP:172.16.11.52,我使用的是NAT,根据自身情况设置

三、实验目的

  • 掌握 Prometheus + Grafana 全栈监控体系的架构与工作原理

  • 学会部署指标采集组件、监控服务与可视化平台,实现服务器、应用等运行指标的统一采集与存储

  • 能够通过 Grafana 搭建监控看板,实现指标可视化展示,并配置异常告警规则

四、实验步骤

1.环境准备

# 进入root模式
sudo -i

# 替换为清华源
# 备份原有源,防止出错
cp /etc/apt/sources.list /etc/apt/sources.list.bak  

tee /etc/apt/sources.list <<EOF
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-backports main restricted universe multiverse
EOF

# 更新软件缓存,让清华源生效
apt update

# 关闭防火墙
 # 临时关闭防火墙
systemctl stop ufw

# 永久关闭防火墙(重启服务器也不会生效)
systemctl disable ufw

2. 安装+验证 Node Exporter

a.操作步骤

# 基础依赖
apt install -y apt-transport-https software-properties-common wget gpg

# 安装 Node Exporter
apt install -y prometheus-node-exporter

# 设置 Node Exporter 开机自启
systemctl enable --now prometheus-node-exporter

# 验证 Node Exporter 是否安装成功
systemctl status prometheus-node-exporter

b.结果图

  • Node Exporter:看到running代表成功

3.安装+配置 Prometheus

a.操作命令

# 安装 Prometheus
apt install -y prometheus

# 设置开机自启
systemctl enable --now prometheus

# 配置 Prometheus
nano /etc/prometheus/prometheus.yml 

# 根据以下内容更改
global:
  scrape_interval: 15s  # 每15秒采集一次数据

scrape_configs:
  # 采集虚拟机(主机)数据(Node Exporter)
  - job_name: 'node'
    static_configs:
      - targets: ['172.16.11.52:9100']  # 固定你的虚拟机IP

  # 采集Prometheus自身数据(监控自身是否正常运行)
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']  # 固定值,无需修改

# 重启Prometheus
systemctl restart prometheus

# 验证 Prometheus
systemctl status prometheus

b. 结果图

  • 更改的内容

  • 登录浏览器的web页面输入 http://172.16.11.52:9090,能看到Prometheus的web界面,点击顶部 Status -> Targets ,UP就代表成功了

4.安装 Grafana

a.操作命令

# 导入Grafana密钥
wget -q -O - https://packages.grafana.com/gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/grafana.gpg

# 添加清华源的Grafana仓库
echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://mirrors.tuna.tsinghua.edu.cn/grafana/apt/ stable main" | sudo tee /etc/apt/sources.list.d/grafana.list

# 安装 Grafana
apt update && sudo apt install -y grafana

# 启动 Grafana 并设置开机自启
systemctl enable --now grafana-server

# 验证 Grafana 是否安装成功
systemctl status grafana-server

b.结果图

  • 浏览器访问你的ip+端口初次登陆的用户和密码都为admin,输入以后会让你改密码

5.配置 Grafana 连接 Prometheus

  1. 先保证有Prometheus这个插件,没有去插件商场下载

  2. 点击左侧菜单栏 Connection -> 点击 Data Sources -> 点击 Prometheus图标

  1. 写上URL,然后保存,其他默认不变

  1. 点击页面最下方Save & Test,出现 Successfully queried the Prometheus API,说明连接成功

6.导入主机监控面板

a. 点击左侧菜单栏 Dashboards -> Import

b.输入面板ID:1860(可自行选择),点击 Load

c.点击以后会跳转到,再次倒入就行

d. 结果图

7.配置告警规则

a.操作命令

  • 邮件警告

# 安装 Alertmanager
apt install -y prometheus-alertmanager

# 设置开机自启
systemctl enable --now prometheus-alertmanager

# 配置 Alertmanager
# 1.获取邮箱授权码(以QQ邮箱为例)
登录QQ邮箱→设置→账户→开启“IMAP/SMTP服务”→获取授权码(保存好,后面要用)

# 2.编辑Alertmanager配置文件
nano /etc/prometheus/alertmanager.yml

# 3.删除原有内容,复制以下内容
global:
  resolve_timeout: 5m  # 告警恢复后,5分钟内停止通知

route:
  group_by: ['alertname']  # 按告警名称分组
  group_wait: 10s  # 同一组告警,等待10秒再发送(避免频繁告警)
  group_interval: 10s  # 同一组告警,间隔10秒发送一次
  repeat_interval: 1h  # 同一告警,每1小时重复发送一次(避免刷屏)
  receiver: 'email_notify'  # 默认告警接收者

receivers:
- name: 'email_notify'
  email_configs:
  - to: '你的接收邮箱@qq.com'  # 替换成你要收告警的邮箱
    from: '你的发送邮箱@qq.com'  # 替换成你的QQ邮箱(和授权码对应)
    smarthost: 'smtp.qq.com:587'  # QQ邮箱SMTP服务器(固定)
    auth_username: '你的发送邮箱@qq.com'  # 替换成你的QQ邮箱
    auth_password: '你的邮箱授权码'  # 替换成刚才获取的授权码
    require_tls: true  # 开启加密(固定)

# 4. 重启Alertmanager
systemctl restart prometheus-alertmanager
  • 配置 Prometheus 关联 Alertmanager

nano /etc/prometheus/prometheus.yml

# global 下面,添加以下内容
alerting:
  alertmanagers:
  - static_configs:
    - targets: ['172.16.11.52:9093']  # 固定虚拟机IP,Alertmanager默认端口9093

rule_files:
  - "alert.rules"  # 告警规则文件(后面创建,固定名称)

# 创建告警规则文件
nano /etc/prometheus/alert.rules

# 配置核心告警规则,复制以下内容,粘贴到alert.rules文件中
groups:
- name: "虚拟机监控告警"
  rules:
  # CPU使用率告警
  - alert: CPU使用率过高
    expr: 100 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) > 80
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "CPU使用率过高"
      description: "CPU使用率持续1分钟超过80%,当前值为 {{ $value }}%"

  # 内存使用率告警
  - alert: 内存使用率过高
    expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "内存使用率过高"
      description: "内存使用率持续1分钟超过85%,当前值为 {{ $value }}%"

#给文件授权
chown prometheus:prometheus /etc/prometheus/alert.rules

#重启Prometheus
systemctl restart prometheus

b.结果图

  • 邮件结果:

  • Prometheus上

总结:

  1. 查看文件哪里有问题,可以使用 promtool check config 文件路径+文件名

  2. 踩的坑

    • 配置文件格式特别严,空格、缩进错一点就启动失败

    • 告警规则里不能随便用 round 这类函数,容易报错

    • 文件权限不对,Prometheus 读不了配置也会崩

    • 邮箱要开 SMTP,用授权码,不能直接填登录密码

  3. 搭建好这个服务器以后,不用24小时人工检测了,只要出现异常就会通过邮件提醒,解放时间和精力


评论