Prometheus监控栈 监控数据库mysql

监控数据库mysql,Prometheus监控栈:Prometheus+Grafana+Alertmanager

一、软件环境介绍

1.1 mysql介绍

。是什么

MYSQL是一个关系型数据库管理系统,目前属于Oracle 旗下产品

它是最流行的关系型数据库管理系统之一,存放表的数据

。与其他关系型数据库管理系统相比,市占率

。优势

MysqI Oracle sqlserver
开源 否-闭源
社区活跃度 最活跃 活跃 活跃
使用门槛
学习门槛
性能 较快 最快 较快

1.2 主机清单

职责 ip地址 备注
Prometheus服务器 192.168.92.11 docker-compose模式的prometheus
待监控Linux 192.168.92.12 待准备组件:mysql8版本

二、prometheus监控mysql

docker安装(略)

docker-compose安装(略)

2.1待监控Linux安装MysqI8

test中,创建(修改)docker-compose目录

复制代码
mkdir /data/docker-compose -p
cd /data/docker-compose

创建(修改)docker-compose.yaml

复制代码
version: '3.3'

services:
  db:  #服务名:db。在Docker Compose网络中,其他容器(如应用)可通过此名称(db)连接到此MySQL数据库。
    image: mysql:8.0   #使用官方 mysql:8.0 镜像
    restart: always   #确保容器异常退出时自动重启,保障服务高可用。
    container_name: mysql   #将容器命名为 mysql
    environment:
      TZ: Asia/Shanghai   #设置容器时区,确保时间戳和字符处理符合预期。
      LANG: en_US.UTF-8   #设置容器语言环境,确保时间戳和字符处理符合预期。
      MYSQL_ROOT_PASSWORD: "123456"  #设置MySQL超级用户(root)的密码为 123456
    command:
      - --default-authentication-plugin=mysql_native_password  #设置默认身份验证插件
      - --character-set-server=utf8mb4  #设置服务端默认字符集为 utf8mb4
      - --collation-server=utf8mb4_general_ci  #设置与字符集对应的默认排序规则(collation)。utf8mb4_general_ci是一个通用的、不区分大小写的排序规则。
      - --lower-case-table-names=1  #强制将所有表名存储为小写。
      - --performance-schema=1  #启用性能模式(Performance Schema),用于收集数据库性能指标,对监控至关重要。
      - --skip-log-bin  #禁用二进制日志。如果计划用于主从复制,则应移除此项并配置日志相关参数。
    volumes:    #将宿主机的 /data/mysql/data 目录挂载到容器内的 /var/lib/mysql(MySQL默认数据目录)
      - /data/mysql/data:/var/lib/mysql  
    ports:  #格式为 宿主机端口:容器端口。
      - "3306:3306"

运行docker-compose

复制代码
docker-compose up -d

查看docker 的信息

复制代码
docker images
docker ps -a

2.2 待监控Linux安装mysqld_exporter

创建exporter账户

test机器

复制代码
#进入mysql容器
docker exec -it mysql mysql -uroot -p123456

#创建exporter用户
CREATE USER 'exporter'@'%' IDENTIFIED BY '123456' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
#刷新权限
flush privileges;
#退出mysql容器
exit
#测试登录
docker exec -it mysql mysql -uexporter -p123456;

安装mysqld_exporter(基于mysql服务器的监控器)

二进制安装或者docker安装(或者docker-compose安装),此处选用docker-compose安装

test机器上,修改docker-compose.yaml文件

复制代码
cd /data/docker-compose
vi docker-compose.yaml

yaml文件增加mysqld_exporter组件

复制代码
version: '3.3'  #Docker Compose 文件格式版本

services:
  mysqld-exporter:
    image: prom/mysqld-exporter:v0.12.1  #官方 Prometheus MySQL Exporter 镜像
    container_name: mysqld_exporter  #容器名称(便于管理)
    restart: always  #容器异常退出时自动重启
    command:
      - '--collect.info_schema.processlist'  # 收集活动连接和查询
      - '--collect.info_schema.innodb_metrics'  # InnoDB 引擎性能指标
      - '--collect.info_schema.tablestats'  # 表访问统计
      - '--collect.info_schema.tables'  #表大小/行数等元数据
      - '--collect.info_schema.userstats'  # 用户连接统计
      - '--collect.engine_innodb_status' # InnoDB 详细状态信息
    environment:
      DATA_SOURCE_NAME: 'exporter:123456@(192.168.92.12:3306)/'
    ports:
      - "9104:9104"

启动docker-compose.yaml

复制代码
docker-compose up -d

访问mysqld_exporter

http://192.168.92.12:9104/metrics

2.3 prometheus服务器添加mysqld_exporter的地址

192.168.92.11的prometheus上,修改prometheus的配置文件

复制代码
#进入docker-prametheus目录
cd /data/docker-prometheus

#修改prometheus.yml
vi prometheus/prometheus.yml

添加待监控的mysqld_exporter

复制代码
- job_name: 'mysqld-exporter'
  static_configs:
    - targets: ['192.168.92.12:9104']
      labels:
        instance: 'mysqld服务器'

保存配置后,让配置生效

复制代码
curl -X POST http://localhost:9090/-/reload

刷新访问http://192.168.92.11:9090/targets?search=,确认新监控的mysqld服务器是否生效

2.4 mysql服务器指标查询

复制代码
基础状态与连接
mysql_up: 服务是否在线(1为在线,0为离线)
mysql_global_status_uptime: 运行时长,单位秒(s)
mysql_global_status_threads_connected: 当前客户端建立连接数
mysql_global_variables_max_connections: 允许的最大连接数
mysql_global_status_threads_running: 正在运行命令的客户端数
网络流量
delta(mysql_global_status_bytes_received[1m]): 每分钟网络接收的字节数(bytes)
delta(mysql_global_status_bytes_sent[1m]): 每分钟网络发送的字节数(bytes)
客户端连接异常
delta(mysql_global_status_aborted_connects[1m]): 每分钟客户端建立连接失败的数量
delta(mysql_global_status_aborted_clients[1m]): 每分钟客户端未正常断开连接的数量
查询和命令处理
delta(mysql_global_status_commands_total{command="xx"}[1m]) > 0: 每分钟执行特定命令(将"xx"替换为具体命令)的次数
delta(mysql_global_status_handlers_total{handler="xx"}[1m]) > 0: 每分钟执行特定处理器操作(将"xx"替换为具体处理器)的次数
delta(mysql_global_status_table_locks_waited[1m]): 每分钟请求获取锁、但需要等待的次数
delta(mysql_global_status_handlers_total{handler="commit"}[1m]) > 0: 每分钟执行提交操作的次数
delta(mysql_global_status_table_locks_immediate[1m]): 每分钟请求获取锁并立即获得的次数
delta(mysql_global_status_queries[1m]): 每分钟查询数
delta(mysql_global_status_slow_queries[1m]): 每分钟慢查询数
InnoDB存储引擎相关
mysql_global_status_innodb_page_size: InnoDB数据页的大小
mysql_global_variables_innodb_buffer_pool_size: InnoDB缓冲池大小
mysql_global_status_buffer_pool_pages{state="data"}: 缓冲池中包含数据的页数
mysql_global_status_buffer_pool_dirty_pages: 缓冲池中的脏页数
InnoDB行锁指标
mysql_global_status_innodb_row_lock_current_waits: 当前正在等待的InnoDB行锁数量
mysql_global_status_innodb_row_lock_time: 从服务器启动以来的总InnoDB行锁等待时间(毫秒)
mysql_global_status_innodb_row_lock_time_avg: 每次等待InnoDB行锁的平均时间(毫秒)
mysql_global_status_innodb_row_lock_time_max: 单次等待InnoDB行锁的最长时间(毫秒)
mysql_global_status_innodb_row_lock_waits: 从服务器启动以来的总InnoDB行锁等待次数

2.5 grafana中对mysql进行监控

copy id to clipboard->grafana的dashboards中Import dashboard

https://grafana.com/grafana/dashboards/20016-mysql-8-0/


相关推荐
萌萌哒草头将军3 小时前
AudioDock:服务器和 NAS 音频播放最棒的软件!🚀🚀🚀
服务器·docker·node.js
menggb074 小时前
在Linux系统上安装和使用Prometheus+Grafana
linux·运维·prometheus
IsPrisoner4 小时前
从 Docker 到 Kubernetes:一次“工程视角”的 K8s 核心概念深度梳理
docker·容器·kubernetes
看-清5 小时前
Docker离线安装部署xxl-job流程
运维·docker·容器
孤岛悬城6 小时前
47 Docker镜像编排
docker·容器·云计算
隔壁阿布都7 小时前
Docker 安装 MySQL 8.0
mysql·docker·容器
RustFS8 小时前
RustFS 如何实现对象存储的前端直传?
vue.js·docker·rust
摇滚侠8 小时前
40分钟的Docker实战攻略,一期视频精通Docker
运维·docker·容器
G_H_S_3_9 小时前
【网络运维】Docker网络:基础与实战
linux·运维·网络·docker