前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Prometheus MySQL 性能监控

Prometheus MySQL 性能监控

作者头像
逝兮诚
发布2023-03-10 11:23:07
2.1K0
发布2023-03-10 11:23:07
举报
文章被收录于专栏:代码人生代码人生

一、 介绍

Prometheus 是一种开源的监控系统和时序数据库,旨在收集和处理大量数据并提供可视化、监控警报等功能。它支持多种语言、多种部署方式,并且非常灵活,而且社区支持非常活跃,为用户提供了很多优秀的解决方案。 MySQL 是一种流行的关系型数据库管理系统,用于存储和管理结构化数据。MySQL 数据库对于 web 应用程序、企业级应用程序和数据仓库等应用场景都非常适用。

Prometheus 提供了许多适用于 MySQL 监控的插件和可视化界面,让用户可以方便地监控 MySQL 数据库的健康状态、性能指标以及异常情况。下面是使用 Prometheus 进行 MySQL 性能监控的步骤:

二、mysql 指标采集器安装与使用

步骤1:安装和配置 Prometheus

首先需要安装和配置 Prometheus,可以参考官方文档进行操作。

步骤2:安装 mysqld_exporter

mysqld_exporter 是一个用于采集 MySQL 数据库的指标信息的工具。可以通过以下命令进行下载和安装:

代码语言:javascript
复制
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz
cd mysqld_exporter-0.12.1.linux-amd64/

步骤3:配置 mysqld_exporter

打开 mysqld_exporter 的主配置文件 my.cnf,根据实际需求修改其中的配置项。例如,如果要指定 MySQL 数据库的用户名和密码,则需要在 my.cnf 文件中添加以下内容:

代码语言:javascript
复制
[client]
user=USERNAME
password=PASSWORD

步骤4:启动 mysqld_exporter

启动 mysqld_exporter 之前,最好先执行一遍检查:

代码语言:javascript
复制
./mysqld_exporter --config.my-cnf=my.cnf

然后再执行启动命令:

代码语言:javascript
复制
./mysqld_exporter --config.my-cnf=my.cnf &

步骤5:配置 Prometheus 抓取配置

编辑 prometheus.yml 文件,添加以下内容:

代码语言:javascript
复制
scrape_configs:
  - job_name: 'mysql'
    scrape_interval: 1m
    static_configs:
      - targets: ['<YOUR_MYSQL_SERVER_IP>:9104']

步骤6:重启 Prometheus 和 mysqld_exporter

重新加载 prometheus.yml 文件:

代码语言:javascript
复制
kill -HUP <prometheus_PID>

重新启动 mysqld_exporter:

代码语言:javascript
复制
ps aux | grep mysqld_exporter
kill -9 <mysqld_exporter_PID>
./mysqld_exporter --config.my-cnf=my.cnf &

步骤7:可视化监控数据

使用 Grafana 等数据可视化工具,将 MySQL 的监控指标展示分析出来。例如,可以展示 CPU 使用率、磁盘 I/O 速度、网络连接数、线程数等各种监控数据。

三、prometheus 中 Mysql 采用监控指标

指标名

prometheus 指标

mysql 获取指标方式

当前连接数

mysql_global_status_threads_connected

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘threads_connected’;

最大连接数

mysql_global_variables_max_connections

登录 mysql,执行 SQL \n SHOW VARIABLES LIKE ‘max_connections’;

MYSQL 缓存命中率

mysql_global_status_qcache_hits 和 mysql_global_status_commands_total{command=~“select”}

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS \n LIKE ‘Qcache_hits’; \n SHOW GLOBAL STATUS LIKE ‘Com_select’;

InnoDB 缓存命中率

mysql_global_status_innodb_buffer_pool_reads \n mysql_global_status_innodb_buffer_pool_read_requests

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Innodb_buffer_pool_reads%’; \n SHOW GLOBAL STATUS LIKE ‘Innodb_buffer_pool_read_request%’;

MYISAM 缓存命中率

mysql_global_status_key_reads 和 mysql_global_status_key_read_requests

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Key_reads%’; \n SHOW GLOBAL STATUS LIKE ‘Key_read_requests%’;

CPU 使用率

container_cpu_usage_seconds_total 和 kube_pod_container_resource_limits

k8s 集群 master 机器执行 \n kubectl top pod -n coding | grep mariadb-primary,核对 use 是否一致 \n kubectl get pod mariadb-primary-0 -n coding -o=jsonpath=‘{.spec.containers[*].resources.limits.memory}’ 核对 limit 是否一致

内存占用

container_memory_usage_bytes

k8s 集群 master 机器执行 \n kubectl top pod -n coding | grep mariadb-primary,核对 use 是否一致

内存利用率

container_memory_usage_bytes 和 kube_pod_container_resource_limits{resource=“memory”,unit=“byte”}

k8s 集群 master 机器执行 \n kubectl top pod -n coding | grep mariadb-primary,核对 use 是否一致 \n kubectl get pod mariadb-primary-0 -n coding -o=jsonpath=‘{.spec.containers[*].resources.limits.cpu}’ 核对 limit 是否一致

发送数据量

mysql_global_status_bytes_sent

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Bytes_received’;

接受数据量

mysql_global_status_bytes_received

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Bytes_sent’;

所有SQL语句,无论其是否执行成功

mysql_global_status_queries

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Queries’;

慢查询数

mysql_global_status_slow_queries

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Slow_queries’;

全表查询数

mysql_global_status_select_scan

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Select_scan’;

执行 DELETE 查询的次数

mysql_global_status_commands_total{command=~“delete”}

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Com_delete’;

执行 INSERT 查询的次数

mysql_global_status_commands_total{command=~“insert”}

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Com_insert’;

执行 UPDATE 查询的次数

mysql_global_status_commands_total{command=~“update”}

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Com_update’;

执行 REPLACE 查询的次数

mysql_global_status_commands_total{command=~“replace”}

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Com_replace’;

执行 SELECT 查询的次数

mysql_global_status_commands_total{command=~“select”}

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Com_select’;

现场运行数

mysql_global_status_threads_running

登录 mysql,执行 SQL \n SHOW STATUS LIKE ‘Threads_running’;

线程创建数

mysql_global_status_threads_created

登录 mysql,执行 SQL \n SHOW STATUS LIKE ‘Threads_created’;

InnoDB 磁盘写次数 \n 单位: 次/s

mysql_global_status_innodb_data_writes

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘innodb_data_writes’; \n 或者 \n SHOW ENGINE INNODB STATUS; 查看 OS file writes 一行

InnoDB 磁盘读次数 \n 单位: 次/s

mysql_global_status_innodb_data_reads

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘innodb_data_reads’; \n 或者 \n SHOW ENGINE INNODB STATUS; 查看 OS file reads 一行

InnoDB 磁盘 fsync 次数 \n 单位: 次/s

mysql_global_status_innodb_data_fsyncs

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘innodb_data_fsyncs’; \n 或者 \n SHOW ENGINE INNODB STATUS; 查看 OS fsyncs 一行

InnoDB 读取的数据量 \n 单位: 字节/s

mysql_global_status_innodb_data_reads

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Innodb_data_reads’;

InnoDB 写入的数据量 \n 单位: 字节/s

mysql_global_status_innodb_data_writes

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Innodb_data_written’;

InnoDB行删除量

mysql_global_status_innodb_row_ops_total{operation=“deleted”}

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Innodb_rows_deleted’;

InnoDB行插入量

mysql_global_status_innodb_row_ops_total{operation=“inserted”}

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Innodb_rows_inserted’;

InnoDB行读取量

mysql_global_status_innodb_row_ops_total{operation=“read”}

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Innodb_rows_read’;

InnoDB行更新量

mysql_global_status_innodb_row_ops_total{operation=“updated”}

登录 mysql,执行 SQL \n SHOW GLOBAL STATUS LIKE ‘Innodb_rows_updated’;

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 介绍
  • 二、mysql 指标采集器安装与使用
    • 步骤1:安装和配置 Prometheus
      • 步骤2:安装 mysqld_exporter
        • 步骤3:配置 mysqld_exporter
          • 步骤4:启动 mysqld_exporter
            • 步骤5:配置 Prometheus 抓取配置
              • 步骤6:重启 Prometheus 和 mysqld_exporter
                • 步骤7:可视化监控数据
                • 三、prometheus 中 Mysql 采用监控指标
                相关产品与服务
                云数据库 SQL Server
                腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档