基于Prometheus和Grafana的MySQL监控,服务器监控
目录
一、环境介绍
二、注意事项
三、安装Prometheus
3.1 下载
3.2 安装
3.3 配置systemd启动方式
3.4 设置开机自启动
3.5 验证是否成功
四、安装Grafana
4.1 下载
4.2 安装
4.3 验证服务的使用
五、安装服务器监控node_exporter
5.1 下载
5.2 安装
5.3 配置systemd服务
5.4 设置开机自启
5.5 验证服务是否成功
5.6 配置Prometheus
5.6.1 添加node_exporter的绑定
5.6.2 重启prometheus
5.7 在Grafana中添加数据源
5.7.1 添加数据源
5.7.2 填写prometheus地址
5.7.3 选择适合的仪表盘
5.7.4 查看仪表盘
5.7.5 查看Prometheus
六、安装MySQL监控mysqld_exporter
6.1 下载
6.2 安装
6.3 配置系统服务
6.4 启动服务
6.5 配置Prometheus
6.6 配置grafana
6.6.1 创建Dashboard
6.6.2 查看展示效果
6.7 查看Prometheus
七、一些小知识
7.1 整体架构图
7.2 各个组件的作用
7.2.1 node exporter(端口9100)
7.2.2 mysqld_exporter(端口9104)
7.2.3 Prometheus(端口9090)
7.2.4 Grafana(端口3000)
7.2.5 Alertmanager(通常端口9093)
7.3 数据流向详解
7.3.1 正常监控数据流
7.3.2 告警数据流
7.4 dashboard模板
7.3.1 MySQL Overview(ID:7362)
7.3.2 MySQL Prometheus(ID:11323)
7.3.3 Node Exporter Server Metrics(ID:11074)
7.3.4 MySQL Replication(ID:12587)
7.3.5 MySQL InnoDB Metrics(ID:4215)
7.3.6 MySQL Database Performance(ID:13083)
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: 15sscrape_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' # 匹配主库IPtarget_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:3306targets:- 192.168.157.80:9104 # 主库MySQL Exporter地址- labels:instance: slave1:3306targets:- 192.168.157.81:9104 # 从库81 MySQL Exporter地址- labels:instance: slave2:3306targets:- 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的用户
