实现高效MySQL数据库监控:mysqld_exporter+Grafana快速部署

文摘   2024-10-25 08:13   辽宁  
关注下方公众号,获取更多热点资讯

实现高效MySQL数据库监控:mysqld_exporter+Grafana快速部署

本文将介绍如何使用 GrafanaPrometheus 和 mysqld_exporter 来构建一个高效的监控解决方案。通过这一集成,我们可以实时监控 MySQL 数据库的性能指标,并通过 Grafana 进行可视化展示。

技术栈概述

Grafana

Grafana 是一个开源的可视化工具,支持多种数据源,能够创建动态仪表板,帮助用户更好地理解和分析数据。Grafana 提供了丰富的图表类型和自定义选项,用户可以根据需要灵活配置仪表板。

  • • 特点

    • • 支持多种数据源(如 Prometheus、InfluxDB、MySQL 等)

    • • 丰富的可视化组件(折线图、柱状图、饼图等)

    • • 强大的告警功能

    • • 用户友好的界面和丰富的插件生态

Prometheus

Prometheus 是一个开源的监控系统,具有强大的时间序列数据存储和查询功能。它使用拉取模型从配置的目标中收集指标数据,适合于动态环境(如微服务架构)。

  • • 特点

    • • 多维数据模型,支持灵活的查询语言(PromQL)

    • • 内置的时间序列数据库

    • • 易于扩展,支持自定义指标

    • • 提供多种可视化工具(如 Grafana)

mysqld_exporter

mysqld_exporter 是 Prometheus 的一个导出器,专门用于从 MySQL 数据库中收集性能指标。它可以提供关于查询性能、连接数、缓存命中率等多种重要指标。

  • • 特点

    • • 支持多种 MySQL 版本

    • • 提供丰富的指标(如连接数、查询数、慢查询等)

    • • 易于配置和集成

安装和配置 mysqld_exporter

Github:https://github.com/prometheus/mysqld_exporter/releases

下载和安装

我们将使用 Docker 安装 mysqld_exporter。首先,需要创建一个 MySQL 配置文件,以便 mysqld_exporter 能够连接到数据库。可以使用以下命令创建或编辑配置文件:

vi /root/my.cnf

文件内容如下:

[client]
host=${MySQLIP}
port=3306
user=root
password=root

接下来,使用以下命令启动 mysqld_exporter:

docker run -d \
  --name mysqld_exporter \
  -v /root/my.cnf:/.my.cnf \
  -p 9104:9104 \
  prom/mysqld-exporter:latest

配置 MySQL 用户权限

如果你已经使用了有权限的用户,跳过此步骤。

为了让 mysqld_exporter 能够访问 MySQL 数据库,你需要为它创建一个专用用户并授予必要的权限:

CREATE USER 'exporter'@'%' IDENTIFIED BY 'password';
GRANT SELECT ON *.* TO 'exporter'@'%';
FLUSH PRIVILEGES;

确保在 DATA_SOURCE_NAME 中使用这个新用户的凭据。这样可以提高安全性,避免使用 root 用户。

安装和配置 Prometheus

Prometheus 安装

创建一个 prometheus.yml 配置文件,内容如下:

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'mysqld_exporter'
    static_configs:
      - targets: ['${ip}:9104']

在这个配置中,${ip}mysqld_exporter所在的服务器 IP 地址

然后运行 Prometheus

docker run -d \
  --network monitoring \
  --name prometheus \
  -p 9090:9090 \
  -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus

配置 Prometheus 监控 mysqld_exporter

在 prometheus.yml 中添加 mysqld_exporter 的配置后,Prometheus 将定期从 mysqld_exporter 拉取数据。你可以在浏览器中访问 http://localhost:9090 来查看 Prometheus 的界面。在这里,你可以使用 PromQL 进行查询,查看当前的监控数据。

安装和配置 Grafana

Grafana 安装

运行 Grafana:

docker run -d \
  --network monitoring \
  --name grafana \
  -p 3000:3000 \
  grafana/grafana

Grafana 默认在端口 3000 上运行。

配置数据源

  1. 1. 打开浏览器,访问 http://localhost:3000

  2. 2. 默认用户名和密码均为 admin

  3. 3. 登录后,导航到 “Configuration” -> “Data Sources”。

  4. 4. 添加一个新的数据源,选择 Prometheus,并设置 URL 为 http://prometheus:9090

创建仪表板

Import dashboard

导入模板 7362,地址:https://grafana.com/grafana/dashboards/7362-mysql-overview/

导入

监控效果

监控指标详解

在 Grafana 中监控 MySQL 时,可以跟踪多个重要指标,以下是一些关键指标及其说明:

指标名称中文说明
mysql_global_status_aborted_clients中止的客户端连接数
mysql_global_status_aborted_connects中止的连接数
mysql_global_status_connections总连接数
mysql_global_status_created_tmp_disk_tables创建的临时磁盘表数量
mysql_global_status_created_tmp_tables创建的临时表数量
mysql_global_status_handler_delete执行删除操作的次数
mysql_global_status_handler_read_first执行读取第一个记录的次数
mysql_global_status_handler_read_key按键读取的次数
mysql_global_status_handler_read_next执行读取下一个记录的次数
mysql_global_status_handler_read_prev执行读取上一个记录的次数
mysql_global_status_handler_read_rnd随机读取的次数
mysql_global_status_handler_read_rnd_next随机读取下一个记录的次数
mysql_global_status_handler_update执行更新操作的次数
mysql_global_status_key_reads从键缓存中读取的次数
mysql_global_status_key_writes写入键缓存的次数
mysql_global_status_max_connections最大连接数
mysql_global_status_open_tables当前打开的表数量
mysql_global_status_opened_tables打开的表总数
mysql_global_status_queries执行的查询总数
mysql_global_status_select_full_join完全连接的查询次数
mysql_global_status_select_full_range_join完全范围连接的查询次数
mysql_global_status_select_range范围查询的次数
mysql_global_status_select_range_check范围检查查询的次数
mysql_global_status_select_scan扫描查询的次数
mysql_global_status_slow_queries慢查询的总数
mysql_global_status_table_locks_waited表锁等待次数
mysql_global_status_threads_connected当前连接的线程数
mysql_global_status_threads_running当前运行的线程数
mysql_global_status_uptime数据库运行时间(秒)
mysql_global_status_innodb_buffer_pool_sizeInnoDB 缓冲池大小
mysql_global_status_innodb_buffer_pool_pages_totalInnoDB 缓冲池总页数
mysql_global_status_innodb_buffer_pool_pages_freeInnoDB 缓冲池空闲页数
mysql_global_status_innodb_buffer_pool_pages_dirtyInnoDB 缓冲池脏页数
mysql_global_status_innodb_buffer_pool_readsInnoDB 缓冲池读取次数
mysql_global_status_innodb_buffer_pool_read_aheadInnoDB 缓冲池预读取次数
mysql_global_status_innodb_buffer_pool_read_ahead_evicted被驱逐的预读取页数
mysql_global_status_innodb_buffer_pool_wait_free等待空闲页的次数
mysql_global_status_innodb_rows_read读取的 InnoDB 行数
mysql_global_status_innodb_rows_inserted插入的 InnoDB 行数
mysql_global_status_innodb_rows_updated更新的 InnoDB 行数
mysql_global_status_innodb_rows_deleted删除的 InnoDB 行数
mysql_global_status_innodb_transactionsInnoDB 事务总数
mysql_global_status_innodb_lock_waitsInnoDB 锁等待次数
mysql_global_status_innodb_deadlocksInnoDB 死锁次数
mysql_global_status_innodb_log_waitsInnoDB 日志等待次数
mysql_global_status_innodb_log_write_requestsInnoDB 日志写入请求次数
mysql_global_status_innodb_log_writesInnoDB 日志写入次数
mysql_global_status_innodb_log_flushesInnoDB 日志刷新次数
mysql_global_status_innodb_log_flushes_avg_timeInnoDB 日志刷新平均时间
mysql_global_status_innodb_log_flushes_max_timeInnoDB 日志刷新最大时间

欢迎关注我的公众号“编程与架构”,原创技术文章第一时间推送。



编程与架构
专注于Java、大数据、AI以及开发运维技术的深入探索与分享。作为一名开源爱好者,致力于分享实战经验和前沿技术动态,帮助更多技术人提升技能。
 最新文章