当前位置: 首页 > news >正文

MySQL 跑得稳不稳,Prometheus 得能抓到这个数据才能说清楚

前言

数据库出问题的时候,最怕的不是故障本身,而是故障发生了却没人知道,等用户反馈过来才去翻日志,慢了不止一拍。

MySQL 本身有一些状态变量能反映运行状况——连接数、QPS、缓冲池命中率、慢查询数量——但这些数据要么存着没人看,要么得手动查才能看到。Prometheus 解决的是把这类指标持续采集、存储、查询的问题,mysql_exporter 在这里面扮演的是"翻译"角色:它去拉 MySQL 的状态数据,以 Prometheus 能识别的格式暴露出来,Prometheus 定时抓取,之后配上 Grafana 就能看到可视化面板,设置告警规则还能在指标异常的时候主动通知。

整个链路跑通之后,数据库的运行状态就不再是一个黑盒子,出现问题之前通常能从指标变化里看到端倪。

1.Centos7安装mysql_exporter实时监控mysql数据

在CentOS 7环境中,仅靠MySQL自身难以实现对运行状态的全面可观测性。通过部署mysql_exporter,可将关键性能指标实时暴露给Prometheus,轻松构建高效的数据库监控体系。

本文将手把手指导你在CentOS 7环境中安装并配置mysql_exporter,快速打通MySQL与Prometheus的监控链路,实现数据库指标的实时采集与可视化。

若还没有安装mysql的小伙伴可以参考cpolar官网这篇教程:《手把手教你:Centos7下MySQL的安装与初始配置》

在prometheus的官网下载对应的mysql_exporter的linux版本:

下载完成后上传到/app目录下:

也可以使用这个命令一键安装(可自定义版本):

wgethttps://github.com/prometheus/mysqld_exporter/releases/download/v0.18.0/mysqld_exporter-0.18.0.linux-amd64.tar.gz

解压mysql_exporter压缩文件:

tar-zxvfmysqld_exporter-0.18.0.linux-amd64.tar.gz

修改mysql_exporter文件名:

mvmysqld_exporter-0.18.0.linux-amd64/ mysqld_exporter

2.启动mysql_exporter

创建mysql用户与权限,在MySQL数据库中创建一个专门用于监控的用户,并赋予其足够的权限来查询所需的信息:

GRANT REPLICATION CLIENT, PROCESS ON *.* TO'mysqld_exporter'@'localhost'identified by'12345678';GRANT SELECT ON performance_schema.* TO'mysqld_exporter'@'localhost';flush privileges;

创建一个文件,输入我们刚创建好的用户名及密码:

[client]user=exporterpassword=12345678

创建mysql_exporter服务:

[Unit]Description=exporterAfter=network.target[Service]Type=simpleUser=prometheusExecStart=/app/mysqld_exporter/mysqld_exporter --config.my-cnf="/app/mysqld_exporter/localhost_db.cnf"--web.listen-address=":9105"Restart=on-failure[Install]WantedBy=multi-user.target

也可以直接手动启动:

sudo-uprometheus /app/mysql_exporter/mysqld_exporter --config.my-cnf="/app/mysql_exporter/localhost_db.cnf"--web.listen-address=":9105"

接下来我们通过使用浏览器,用IP+端口就可以访问我们安装好的mysql_exporter页面啦!

3.配置prometheus监控mysql_exporter

没有prometheus的小伙伴可以参考cpolar官网这篇教程:《监控不再局域网!Cpolar 让 Prometheus 走出内网限制!》

找到prometheus的配置文件,编辑添加如下内容:

viprometheus.yml
- targets:["localhost:9105"]labels: app:"mysql_exporter"

重启prometheus服务:

systemctl restart prometheus

使用浏览器Ip+9090打开promethues的页面:

我们可以看到成功的检测到了mysql_exporter服务啦!

4.使用alertmanager配置mysql_expoter告警

没有alertmanager的小伙伴可以参考这篇文章:告别宕机!零基础搭建服务器监控告警系统!小白也能学会!

配置mysql告警。我这里举两个例子:

groups: - name: mysql-alerts rules:# 1. MySQL 实例宕机或 exporter 无法采集- alert: MySQLDown expr: mysql_up==0for: 1m labels: severity: critical annotations: summary:"MySQL instance down"description:"MySQL instance {{$labels.instance }} has been down for more than 1 minute."# 2. 主从复制中断(仅适用于有从库的场景)- alert: MySQLReplicationBroken expr: mysql_slave_status_seconds_behind_master>300for: 2m labels: severity: warning annotations: summary:"MySQL replication lag"description:"MySQL replication on {{$labels.instance }} is lagging by {{$value}} seconds."# 3. 主从 IO/SQL 线程停止- alert: MySQLReplicationIOThreadDown expr: mysql_slave_status_master_server_id>0and mysql_slave_status_slave_io_running==0for: 1m labels: severity: critical annotations: summary:"MySQL replication IO thread stopped"description:"Slave IO thread is not running on {{$labels.instance }}."- alert: MySQLReplicationSQLThreadDown expr: mysql_slave_status_master_server_id>0and mysql_slave_status_slave_sql_running==0for: 1m labels: severity: critical annotations: summary:"MySQL replication SQL thread stopped"description:"Slave SQL thread is not running on {{$labels.instance }}."# 4. 连接数使用率过高(超过 80%)- alert: MySQLTooManyConnections expr:(mysql_global_status_threads_connected / mysql_global_variables_max_connections)*100>80for: 2m labels: severity: warning annotations: summary:"High MySQL connection usage"description:"{{$labels.instance }}: MySQL connection usage is {{$value| printf\"%.2f\"}}% of max_connections."# 5. 慢查询数量突增(过去5分钟慢查询 > 10 条)- alert: MySQLHighSlowQueries expr: rate(mysql_global_status_slow_queries[5m])>0.1# ≈ 每分钟 > 6 条for: 5m labels: severity: warning annotations: summary:"High rate of slow queries on MySQL"description:"{{$labels.instance }}: Slow query rate is {{$value| printf\"%.2f\"}} per second."

编辑为4.yml,接下来配置prometheus告警:

进入prometheus配置文件:

找到prometheus的配置文件,编辑添加如下内容:

viprometheus.yml
rule_files: -"/app/prometheus/1.yml"-"/app/prometheus/2.yml"-"/app/prometheus/3.yml"-"/app/prometheus/4.yml"

重启prometheus服务:

systemctl restart prometheus

使用浏览器Ip+9090打开promethues的页面:

可以看到,我们设置好的告警就出来啦!

这时我们mysql是没有启动的,所以告警了。

重启后恢复正常。

那么问题来了,倘若我想监控朋友的mysql,但是我们不在一个局域网,怎么办?别急cpolar来帮助你!

5.安装cpolar内网穿透工具

cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

❤️以下是安装cpolar步骤:

使用一键脚本安装命令:

sudocurlhttps://get.cpolar.sh|sh

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

sudosystemctl status cpolar

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

6.配置公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:

  • 隧道名称:可自定义,本例使用了:mysql_exporter,注意不要与已有的隧道名称重复

  • 协议:http

  • 本地地址:9105

  • 域名类型:随机域名

  • 地区:选择China Top

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。

访问成功。

7.将本mysql_exporter暴露给Prometheus进行远程抓取

Prometheus可以通过这个公网地址38c53143.r2.cpolar.top访问到运行在本地9105端口的mysql_exporter服务,从而抓取系统指标。

- targets:["38c53143.r2.cpolar.top"]labels: app:"mysql_exporter"

抓取成功!

8.保留固定公网地址

使用cpolar为其配置二级子域名,该地址为固定地址,不会随机变化。

点击左侧的预留,选择保留二级子域名,地区选择china Top,然后设置一个二级子域名名称,我这里演示使用的是mysqll,大家可以自定义。填写备注信息,点击保留。

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道mysql_exporter,点击右侧的编辑

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区: China Top

点击更新

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

最后,我们使用固定的公网地址在任意设备的浏览器中访问,可以看到成功访问本地部署的页面,这样一个永久不会变化的二级子域名公网网址即设置好了。

至此,我们完成了无需公网 IP 的远程服务器监控搭建。

结尾

数据库出问题的时候,最怕的不是故障本身,而是故障发生了却没人知道,等用户反馈过来才去翻日志,慢了不止一拍。

MySQL 本身有一些状态变量能反映运行状况——连接数、QPS、缓冲池命中率、慢查询数量——但这些数据要么存着没人看,要么得手动查才能看到。Prometheus 解决的是把这类指标持续采集、存储、查询的问题,mysql_exporter 在这里面扮演的是"翻译"角色:它去拉 MySQL 的状态数据,以 Prometheus 能识别的格式暴露出来,Prometheus 定时抓取,之后配上 Grafana 就能看到可视化面板,设置告警规则还能在指标异常的时候主动通知。

整个链路跑通之后,数据库的运行状态就不再是一个黑盒子,出现问题之前通常能从指标变化里看到端倪。

http://www.cnnetsun.cn/news/2443675.html

相关文章:

  • CircuitPython HID实战:用Python轻松打造自定义键盘鼠标与数据记录仪
  • 国产多模态大模型崛起:技术、场景与未来挑战全解析
  • 国产多模态大模型:技术自主之路与未来蓝图
  • 如何彻底卸载干净Python(已安装的Python版本)
  • 嵌入式开发实战:从防御性编程到安全启动,构建高可靠系统的核心方法论
  • CoreSight SoC-400交叉触发接口配置详解
  • 支付系统架构设计:从交易核心到资金核算的稳定性实践
  • 项目实训个人博客(五)
  • 自定义Spring Boot Actuator端点
  • 2026年主流会议记录软件大横评,全场景实测对比,差距竟然这么大,黑马意外胜出
  • 【深度解析】Hermes Agent 0.14.0:本地代理、会话交接与自主工作流架构实践
  • 跨平台图形API实战选型:从Vulkan、DirectX到Metal与WebGPU的架构抉择
  • Cadence SPB17.4自动布线实战:从布局评估到DRC修复的完整避坑指南
  • 终极vscode-R插件完全指南:在Visual Studio Code中高效开发R语言
  • Seraphine英雄联盟战绩查询工具终极指南:智能排位助手完全教程
  • AI安全隐患排查系统:以智能技术筑牢安全生产防护网
  • 星思半导体:深耕芯片研发,助力卫星互联网产业高质量发展
  • 智能体状态管理:会话、上下文与检查点
  • 一种三维建筑物模型外轮廓的提取方法
  • AutoJs6:Android平台终极JavaScript自动化解决方案
  • *Python/Java/Go** 准备的详细指南,涵盖环境搭建、基础语法、实战项目(含代码)及避坑指南
  • RAG知识库生命周期①【第七篇】:文档新增修改删除,生产级向量同步更新方案
  • 云祺x鼎捷,为制造企业ERP打造双保险
  • 基于RAG架构的LLM知识库构建:从原理到实践
  • 告别人工抄表乱象!智能预付费系统实现用电管控全自动
  • 多智能体协同控制未来的前景和方向如何?
  • Spring AOP深度解析
  • NotebookLM实时协同黑科技:3个隐藏API+2个Chrome插件,让跨角色协作响应提速83%
  • 重新定义视频学习:Bili2Text如何将B站内容转化为结构化知识库
  • 魔兽争霸III终极兼容性增强插件:WarcraftHelper完整指南