基于Prometheus和Grafana的MySQL监控,服务器监控

目录

一、环境介绍

二、注意事项

三、安装Prometheus

[3.1 下载](#3.1 下载)

[3.2 安装](#3.2 安装)

[3.3 配置systemd启动方式](#3.3 配置systemd启动方式)

[3.4 设置开机自启动](#3.4 设置开机自启动)

[3.5 验证是否成功](#3.5 验证是否成功)

四、安装Grafana

[4.1 下载](#4.1 下载)

[4.2 安装](#4.2 安装)

[4.3 验证服务的使用](#4.3 验证服务的使用)

五、安装服务器监控node_exporter

[5.1 下载](#5.1 下载)

[5.2 安装](#5.2 安装)

[5.3 配置systemd服务](#5.3 配置systemd服务)

[5.4 设置开机自启](#5.4 设置开机自启)

[5.5 验证服务是否成功](#5.5 验证服务是否成功)

[5.6 配置Prometheus](#5.6 配置Prometheus)

[5.6.1 添加node_exporter的绑定](#5.6.1 添加node_exporter的绑定)

[5.6.2 重启prometheus](#5.6.2 重启prometheus)

[5.7 在Grafana中添加数据源](#5.7 在Grafana中添加数据源)

[5.7.1 添加数据源](#5.7.1 添加数据源)

[5.7.2 填写prometheus地址](#5.7.2 填写prometheus地址)

[5.7.3 选择适合的仪表盘](#5.7.3 选择适合的仪表盘)

[5.7.4 查看仪表盘](#5.7.4 查看仪表盘)

[5.7.5 查看Prometheus](#5.7.5 查看Prometheus)

六、安装MySQL监控mysqld_exporter

[6.1 下载](#6.1 下载)

[6.2 安装](#6.2 安装)

[6.3 配置系统服务](#6.3 配置系统服务)

[6.4 启动服务](#6.4 启动服务)

[6.5 配置Prometheus](#6.5 配置Prometheus)

[6.6 配置grafana](#6.6 配置grafana)

[6.6.1 创建Dashboard](#6.6.1 创建Dashboard)

[6.6.2 查看展示效果](#6.6.2 查看展示效果)

[6.7 查看Prometheus](#6.7 查看Prometheus)

七、一些小知识

[7.1 整体架构图](#7.1 整体架构图)

[7.2 各个组件的作用](#7.2 各个组件的作用)

[7.2.1 node exporter(端口9100)](#7.2.1 node exporter(端口9100))

[7.2.2 mysqld_exporter(端口9104)](#7.2.2 mysqld_exporter(端口9104))

[7.2.3 Prometheus(端口9090)](#7.2.3 Prometheus(端口9090))

[7.2.4 Grafana(端口3000)](#7.2.4 Grafana(端口3000))

[7.2.5 Alertmanager(通常端口9093)](#7.2.5 Alertmanager(通常端口9093))

[7.3 数据流向详解](#7.3 数据流向详解)

[7.3.1 正常监控数据流](#7.3.1 正常监控数据流)

[7.3.2 告警数据流](#7.3.2 告警数据流)

[7.4 dashboard模板](#7.4 dashboard模板)

[7.3.1 MySQL Overview(ID:7362)](#7.3.1 MySQL Overview(ID:7362))

[7.3.2 MySQL Prometheus(ID:11323)](#7.3.2 MySQL Prometheus(ID:11323))

[7.3.3 Node Exporter Server Metrics(ID:11074)](#7.3.3 Node Exporter Server Metrics(ID:11074))

[7.3.4 MySQL Replication(ID:12587)](#7.3.4 MySQL Replication(ID:12587))

[7.3.5 MySQL InnoDB Metrics(ID:4215)](#7.3.5 MySQL InnoDB Metrics(ID:4215))

[7.3.6 MySQL Database Performance(ID:13083)](#7.3.6 MySQL Database Performance(ID:13083))

[7.3.7 MySQL by Zabbix(ID:10993)](#7.3.7 MySQL by Zabbix(ID:10993))


一、环境介绍

|--------|----------------|--------------------------------------------------|
| 主机 | IP地址 | 组件 |
| master | 192.168.157.80 | node_exporter/mysqld_exporter |
| slave | 192.168.157.81 | node_exporter/mysqld_exporter |
| slave | 192.168.157.82 | node_exporter/mysqld_exporter/prometheus/grafana |

主从复制的搭建,就不在此多叙述了,可移步:基于mysql8.0.27部署1主2从的MHA集群_mysql8 搭建mha-CSDN博客

二、注意事项

时间同步是必做:

复制代码
#master

# 安装ntp服务(用于提供时间同步源)
yum install -y ntp

# 编辑ntp配置文件,设置本地为时钟源
vim /etc/ntp.conf
# 在文件末尾添加以下两行(按i进入编辑模式,添加后按esc,输入:wq保存退出)
# server 127.127.157.0  # 本地时钟源,157对应网段192.168.157.x
# fudge 127.127.157.0 stratum 8  # 时间层级设为8(范围1-15,层级越低越优先)

# 启动ntp服务并设置开机自启
systemctl start ntpd
systemctl enable ntpd  # 确保重启后服务自动运行

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#slave

# 安装ntp和ntpdate(ntpdate用于主动同步时间)
yum install -y ntp ntpdate

# 启动ntp服务并设置开机自启
systemctl start ntpd
systemctl enable ntpd

# 手动同步主库时间(立即执行一次,确保当前时间对齐)
/usr/sbin/ntpdate 192.168.157.80  # 同步主库80的时间

# 设置定时任务,每30分钟自动同步一次主库时间
crontab -e  # 编辑定时任务(按i进入编辑模式,添加后按esc,输入:wq保存退出)
# 添加以下内容:
# */30 * * * * /usr/sbin/ntpdate 192.168.157.80  # 每30分钟执行一次时间同步

三、安装Prometheus

3.1 下载

https://prometheus.io/download/

3.2 安装

复制代码
tar -zxvf prometheus-3.7.2.linux-amd64.tar.gz	
cp -R prometheus-3.7.2.linux-amd64 /usr/local/prometheus
vim /usr/lib/systemd/system/prometheus.service

3.3 配置systemd启动方式

复制代码
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/usr/local/prometheus
ExecStart=/usr/local/prometheus/prometheus 
Restart=on-failure

[Install]
WantedBy=multi-user.target

3.4 设置开机自启动

复制代码
systemctl daemon-reload
systemctl enable prometheus.service
systemctl start prometheus.service

3.5 验证是否成功

在浏览器中输入192.168.157.82:9090

四、安装Grafana

4.1 下载

https://grafana.com/grafana/download

下载地址:https://dl.grafana.com/enterprise/release/grafana-enterprise-11.0.0-1.x86_64.rpm

4.2 安装

复制代码
yum install -y grafana-enterprise-11.0.0-1.x86_64.rpm


# 开机启动
systemctl enable grafana-server
# 启动
systemctl start grafana-server

4.3 验证服务的使用

地址:http://192.168.157.82:3000/

默认密码:admin/admin

登录后要求修改原始密码

五、安装服务器监控node_exporter

5.1 下载

Download | Prometheus

5.2 安装

复制代码
tar -zxvf node_exporter-1.10.2.linux-amd64.tar.gz
cp -R node_exporter-1.10.2.linux-amd64 /usr/local/node_exporter

5.3 配置systemd服务

复制代码
vim /usr/lib/systemd/system/node_exporter.service


[Unit]
Description=node_exporter
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target

5.4 设置开机自启

复制代码
systemctl daemon-reload
systemctl enable node_exporter.service
systemctl start node_exporter.service

# 查看服务状态
systemctl status node_exporter.service

5.5 验证服务是否成功

在浏览器输入IP:9100

注:node_exporter在三台服务器上均安装了,所以均需验证

5.6 配置Prometheus

5.6.1 添加node_exporter的绑定

复制代码
global:
  scrape_interval: 15s  # 全局默认拉取间隔,job级配置会覆盖此值
  evaluation_interval: 15s

scrape_configs:
  # MySQL主从节点的MySQL指标(MySQL Exporter,端口9104)
  - job_name: 'mysql-master-slave'
    scrape_interval: 5s  # 5秒一次高频采集MySQL指标
    static_configs:
      - targets: ['192.168.157.80:9104', '192.168.157.81:9104', '192.168.157.82:9104']  # 主+2从
    # 自动标记主从角色(方便Grafana筛选)
    relabel_configs:
      - source_labels: [__address__]
        regex: '192.168.157.80:9104'  # 匹配主库IP
        target_label: 'mysql_role'
        replacement: 'master'  # 标记为主库
      - source_labels: [__address__]
        regex: '192.168.157.81:9104|192.168.157.82:9104'  # 匹配两个从库
        target_label: 'mysql_role'
        replacement: 'slave'   # 标记为从库

  # 服务器基础指标(Node Exporter,端口9100)
  - job_name: 'nodes'
    scrape_interval: 5s  # 5秒一次采集服务器指标
    static_configs:
      - targets: ['192.168.157.80:9100', '192.168.157.81:9100', '192.168.157.82:9100']  # 主+2从
    # 自动标记服务器对应的MySQL角色
    relabel_configs:
      - source_labels: [__address__]
        regex: '192.168.157.80:9100'
        target_label: 'mysql_role'
        replacement: 'master'
      - source_labels: [__address__]
        regex: '192.168.157.81:9100|192.168.157.82:9100'
        target_label: 'mysql_role'
        replacement: 'slave'

5.6.2 重启prometheus

复制代码
systemctl restart prometheus

5.7 在Grafana中添加数据源

5.7.1 添加数据源

5.7.2 填写prometheus地址

这里填写http://localhost:9090

√ 可以填写localhost的情况:

场景 说明 架构图
1. Grafana和Prometheus在同一台服务器 最常用的场景,所有组件部署在一台机器 [Grafana] ←→ [Prometheus] (同一台服务器)
2. 使用Docker Compose部署 在docker网络内使用服务名访问 [Grafana容器] ←→ [prometheus:9090]
3. 开发测试环境 本地开发时简化配置 本地环境

× 不可以填写localhost的情况:

场景 问题 正确写法
Grafana和Prometheus在不同服务器 localhost指向Grafana自身,找不到Prometheus http://192.168.157.XXX:9090
使用容器且未配置网络 容器内的localhost是容器自己 http://宿主机IP:9090 或服务名
生产环境多实例部署 需要明确的网络可达性 使用内部域名或IP

5.7.3 选择适合的仪表盘

5.7.4 查看仪表盘

当然我们可以选择合适的仪表盘展示数据

5.7.5 查看Prometheus

可以看见nodes全是up,但在此之前,应该都是down

六、安装MySQL监控mysqld_exporter

6.1 下载

Download | Prometheus

6.2 安装

复制代码
tar -zxvf mysqld_exporter-0.18.0.linux-amd64.tar.gz
mv mysqld_exporter-0.18.0.linux-amd64 /usr/local/mysql_exporter
cd /usr/local/mysql_exporter

#配置数据库的信息
vim /usr/local/mysql_exporter/my-exporter.cnf


[client]
user=root
password=xxxx   #填写自己的密码
host=localhost
port=3306

6.3 配置系统服务

复制代码
vim /etc/systemd/system/mysqld_exporter.service


[Unit]
Description=mysqld_exporter
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/mysql_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysql_exporter/my-exporter.cnf
Restart=on-failure
[Install]
WantedBy=multi-user.target

6.4 启动服务

复制代码
# 重新加载系统配置
systemctl daemon-reload
# 开机启动
systemctl enable mysqld_exporter.service
# 启动服务
systemctl start mysqld_exporter
# 查看状态
systemctl status mysqld_exporter

6.5 配置Prometheus

复制代码
vim /usr/local/prometheus/prometheus.yml


- job_name: 'mysql_exporter'
    static_configs:
      - labels:
          instance: master:3306
        targets:
          - 192.168.157.80:9104  # 主库MySQL Exporter地址
      - labels:
          instance: slave1:3306
        targets:
          - 192.168.157.81:9104  # 从库81 MySQL Exporter地址
      - labels:
          instance: slave2:3306
        targets:
          - 192.168.157.82:9104  # 从库82 MySQL Exporter地址

6.6 配置grafana

6.6.1 创建Dashboard

6.6.2 查看展示效果

6.7 查看Prometheus

此时可以看见,mysql-master-slave已经是up

七、一些小知识

7.1 整体架构图

7.2 各个组件的作用

7.2.1 node exporter(端口9100)

作用:操作系统指标采集器

  • 监控服务器硬件和OS层面
  • 采集CPU,内存,磁盘,网络等基础资源使用情况
  • 每台服务器都需要部署应该实例

关键监控指标:

  • node_cpu_seconds_total:CPU使用率
  • node_memory_MemFree_bytes:内存使用量
  • node_disk_io_time_seconds:磁盘IO
  • node_filesystem_size_bytes:磁盘空间

7.2.2 mysqld_exporter(端口9104)

作用:MySQL数据库指标采集器

  • 专门采集MySQL内部性能指标和状态信息
  • 通过执行show status,show variables等命令获取数据
  • 监控连接数,查询性能,复制状态等

关键监控指标:

  • mysql_global_status_connections - 数据库连接数
  • mysql_slave_status_slave_io_running - 主从复制IO线程状态
  • mysql_global_status_questions - 查询统计
  • mysql_global_status_innodb_buffer_pool_reads - InnoDB缓冲池命中率

7.2.3 Prometheus(端口9090)

作用:监控数据中枢-收集,存储,查询

  • 数据采集:定期从exporters拉取(pull)指标数据
  • 数据存储:时间序列数据库(TSDB),高效存储历史数据
  • 数据查询:提供PromQL查询语言,支持复杂数据分析
  • 服务发现:自动发现监控目标
  • 告警规则:定义监控阈值和告警条件

7.2.4 Grafana(端口3000)

作用:数据可视化平台-监控仪表盘

  • 数据展示:将Prometheus中的指标数据转化为直观的图表
  • 仪表板:预置或自定义监控面板,展示关键指标
  • 多数据源:支持Prometheus,Zabbix等多种数据源
  • 告警展示:在界面上显示触发的告警
  • 权限管理,多用户访问控制

典型仪表板:

  • 系统资源监控(CPU,内存,磁盘)
  • MySQL性能监控(QPS,TPS,连接数)
  • 主从复制状态监控
  • MHA集群状态监控

7.2.5 Alertmanager(通常端口9093)

作用:告警管理中枢-去重,分组,路由通知

  • 告警处理:接收Prometheus发送的告警
  • 告警去重:避免重复告警骚扰
  • 告警分组:将相关告警合并通知
  • 静默管理:维护期间屏蔽告警
  • 多路通知:支持邮件,钉钉,微信等

7.3 数据流向详解

7.3.1 正常监控数据流

7.3.2 告警数据流

7.4 dashboard模板

7.3.1 MySQL Overview(ID:7362)

最适合初学者的MySQL监控模板

  • 特点:全面的MySQL基础监控,开箱即用

  • 监控内容:

    • 连接数、查询性能、流量统计

    • InnoDB缓冲池、锁状态、临时表

    • 主从复制状态、慢查询

  • 适用场景:通用MySQL监控,适合大多数环境

7.3.2 MySQL Prometheus(ID:11323)

现代化监控模板

  • 特点:专为Prometheus + MySQLD Exporter设计

  • 监控内容:

    • 实时QPS/TPS监控

    • 连接池使用情况

    • 二进制日志统计

  • 适用场景:使用Prometheus的现代监控体系

7.3.3 Node Exporter Server Metrics(ID:11074)

简洁版系统监控

  • 特点:界面更简洁,重点突出关键指标

  • 监控内容:

    • 核心系统指标(CPU、内存、磁盘、网络)

    • 关键性能指标汇总

  • 适用场景:快速查看系统健康状态

7.3.4 MySQL Replication(ID:12587)

专注主从复制监控

  • 特点:深度监控复制链路的每个环节

  • 监控内容:

    • 复制延迟趋势图

    • IO/SQL线程状态监控

    • 二进制日志位置跟踪

    • 复制错误统计

  • 适用场景:主从复制环境、MHA集群

7.3.5 MySQL InnoDB Metrics(ID:4215)

存储引擎深度监控

  • 特点:专注InnoDB性能指标

  • 监控内容:

    • 缓冲池命中率、读写效率

    • 行锁、死锁统计

    • 日志写入性能

  • 适用场景:InnoDB性能优化

7.3.6 MySQL Database Performance(ID:13083)

数据库性能分析专家

  • 特点:面向DBA的深度性能分析

  • 监控内容:

    • 查询模式分析

    • 索引效率统计

    • 资源等待事件

  • 适用场景:性能瓶颈诊断

7.3.7 MySQL by Zabbix(ID:10993)

从Zabbix迁移用户的友好选择

  • 特点:模仿Zabbix风格的监控界面

  • 监控内容:

    • 类似Zabbix的监控项组织方式

    • 传统监控指标布局

  • 适用场景:从Zabbix切换到Prometheus的用户

相关推荐
lolo大魔王6 小时前
Linux 文件系统超全面详解(原理、结构、挂载、分区、inode、日志、管理命令)
linux·运维·服务器
古月方枘Fry9 小时前
MGRE实验
运维·服务器
博客-小覃9 小时前
Zabbix之华为交换机的日志记录信息操作详细教程
服务器·网络·华为·zabbix
stolentime9 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
向量引擎9 小时前
从零起步,如何打造专属向量引擎 API 中转工作流?
java·服务器·前端
z2005093010 小时前
【Linux学习】Linux中的进程程序替换
linux·服务器·学习
lihao lihao12 小时前
软硬链接
linux·运维·服务器
TOWE technology12 小时前
智能安防监控系统如何做好防雷?——视频信号SPD综合应用方案解析
运维·服务器·防雷产品·信号保护·信号防雷·spd
雪度娃娃12 小时前
存储器层次结构——磁盘硬盘存储
服务器·网络·数据库·计算机组成原理
大明者省12 小时前
IIS 端口绑定正常访问的原理说明与常见误区澄清
运维·服务器·笔记