基于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的用户

相关推荐
www.027 小时前
linux服务器升级显卡驱动(笔记)
linux·运维·服务器·笔记·ubuntu·服务器环境
BD_Marathon8 小时前
【Linux】awk命令
linux·运维·服务器
前端世界8 小时前
Linux 防火墙实战:用 firewalld 配置 External/Internal 区域,实现 NAT 内网共享上网
linux·服务器·网络
在坚持一下我可没意见10 小时前
Java 网络编程:TCP 与 UDP 的「通信江湖」(基于UDP回显服务器)
java·服务器·开发语言·tcp/ip·udp·java-ee
球求了11 小时前
Linux 系统入门:环境变量&&虚拟地址空间
linux·运维·服务器·1024程序员节
java_logo11 小时前
Docker 部署 Rocky Linux 全流程教程
linux·运维·服务器·docker·容器·1024程序员节
二进制coder12 小时前
BMC RTC:服务器硬件管理的“时间心脏”与系统协同核心
服务器·单片机·实时音视频
2501_9387918312 小时前
服务器镜像安全:Docker 镜像漏洞扫描(Trivy)与基础镜像优化
服务器·安全·docker