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/


相关推荐
hopsky3 小时前
Docker Desktop 报 500
运维·docker·容器
曦云沐3 小时前
一键部署ROS2开发环境!Docker run命令详解与实战
docker·容器·ros2
H Journey3 小时前
Docker swarm 集群搭建实战
运维·docker·容器
江湖有缘4 小时前
Docker环境下使用RustScan端口扫描工具教程
运维·docker·容器
70asunflower4 小时前
镜像仓库(Image Registries)详解
linux·docker·容器
青树寒鸦4 小时前
wsl的docker备份redis和迁移
redis·docker·容器
岩屿4 小时前
Ubuntu下安装Docker并部署.NET API(二)
运维·docker·容器·.net
hopsky5 小时前
限制 Docker Desktop 的资源使用
运维·docker·容器
春日见5 小时前
docker崩溃,闪退,与vscode断开连接
vscode·docker·容器
Suchadar5 小时前
Docker搭建Web测试靶场
运维·docker·容器