ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
&nbsp;&nbsp;&nbsp; 监控数据库mysql 一、软件环境介绍 &nbsp;&nbsp;&nbsp;1.1 mysql介绍 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySQL是一个关系型数据库管理系统,目前属于 Oracle 旗下产品它是最流行的关系型数据库管理系统之一,存放表的数据。与其他关系型数据库管理系统相比,市占率 ![](https://img.kancloud.cn/56/9c/569c40423500567ce33105197c161bb5_784x284.png) <hr> &nbsp;&nbsp;&nbsp;1.2主机清单 职责 | ip地址 | 备注 Prometheus服务器 | 192.168.100.85 | docker机式的prometheus 待监控Linux | 192.168.100.141 | 待准备组件:mysql 8版本 <hr> 二、prometheus监控mysql &nbsp;&nbsp;&nbsp;docker安装(略) &nbsp;&nbsp;&nbsp;docker-compose安装(略) &nbsp;&nbsp;&nbsp;2.1待监控Linux安装mysql &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建docker-compose目录 mkdir /data/mysql -p cd /data/mysql &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建docker-compose.yaml vim docker-compose.yaml &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;配置如下: services: mysql: image: registry.cn-hangzhou.aliyuncs.com/ldw520/mysql:8.0 container_name: mysql restart: always volumes: - /data/mysql/data:/var/lib/mysql environment: TZ: Asia/Shanghai LANG: en_US.UTF-8 MYSQL_ROOT_PASSWORD: 123456 command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --lower_case_table_names=1 --performance_schema=1 --sql-mode="" --skip-log-bin ports: - 3306:3306 &nbsp;&nbsp;&nbsp;启动 docker-compose.yaml docker-compose up -d &nbsp;&nbsp;&nbsp;查看docker的信息 docker images docker ps -a <hr> &nbsp;&nbsp;&nbsp;2.2 创建监控用户 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centos2机器上,登录MongODB创建监控用户,权限为"readAnyDatabase”,如果是cluster环境,涨要有"clusterMonitor &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;登录MongoDB #进入mysql容器 docker exec -it mysql mysql -uroot -p123456 #创建exporter用户 CREATE USER 'exporter'@'%' IDENTIFIED BY '123456'; GRANT GRANT OPTION ON *.* TO 'exporter'@'%'; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%'; #刷新权限 flush privileges; #退出mysql容器 exit; #测试登录 docker exec -it mysql mysql -uexporter -p123456 <hr> &nbsp;&nbsp;&nbsp;2.3 安装mysqld_exporter &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centos2机器上,编辑docker-compose.yaml文件 vi docker-compose.yaml &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如图所示:加入一个mysqld_exporter配置 ![](https://img.kancloud.cn/99/2c/992c9c2aec66a00760e4f45b3705e960_577x551.png) mysqld-exporter: image: registry.cn-hangzhou.aliyuncs.com/ldw520/mysqld-exporter:v0.12.1 container_name: mysqld_exporter restart: always command: - '--collect.info_schema.processlist' - '--collect.info_schema.innodb_metrics' - '--collect.info_schema.tablestats' - '--collect.info_schema.tables' - '--collect.info_schema.userstats' - '--collect.engine_innodb_status' environment: - DATA_SOURCE_NAME=exporter:123456@(192.168.100.141:3306)/ ports: - 9104:9104 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;运行docker-compose up-d的命令,观察mysql的程序是否成功运行 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;宿主机上访问mysqld_exporter的metrics http://192.168.100.141:9104/metrics <hr> &nbsp;&nbsp;&nbsp;2.4 prometheus服务器添加mysqld_exporter的地址 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;192.168.100.85的centos上,修改prometheus的配置文件 #进入docker-prometheus目录 cd /data/docker-prometheus #修改prometheus.yml vi prometheus/prometheus.yml &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;添加monogodb_exporter配置如下图: ![](https://img.kancloud.cn/5b/77/5b77d1960a170d6cdab4726871a3cd47_685x380.png) - job_name: "mysqld-exporter" static_configs: - targets: ["192.168.100.141:9104"] labels: istance: "centos2服务器mysql监听" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保存后输入命令更新: curl -XPOST http://localhost:9090/-/reload &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;成功监听 ![](https://img.kancloud.cn/14/11/141167bd22498eed1c30645a92a16a51_1674x536.png) <hr/> &nbsp;&nbsp;&nbsp;2.5 mysql服务器指标查询 mysql_up # 服务孙是否在线 mysql_global _status_uptime #通行时长,单位5 delta(mysql_global_status_bytes_received[1m]) #网络接收的 byte delta(mysql_global_status_bytes_sent[1m]) #网路发送的bytes mysql_global_status_threads_connected # 当前的客卢端连接数 mysql_global_variables_max_connections #允许的最士连续数 mysql_global_status_threads_running #正在执行命今的客户端数 delta(mysql_global_status_aborted_connects[1m]) 计算在过去1分钟内,尝试连接到MySQL服务器但失败的连接数的增加量# delta(mysql_global_status_aborted_clients[1m]) #计算在过去1分钟内,由于客户端没有正确关闭连接而被MySQL服务器中断的连接数的增加量 delta(mysql_global_status_commands_total{command="xx"}[1m])> 0 #检查在过去1分钟内,是否执行了至少一次指定的MySQL命令类型(`xx`)。这个表达式通常用于监控和告警系统中,以检测特定命令的执行频率或作为触发告警的条件 delta(mysql_global_status_handlers_total{handler="xx"}[1m])> 0 #检查在过去1分钟内,是否执行了至少一次指定的操作。如如读取、写入、更新。这个表达式通常用于监控和告警系统中,以检测特定命令的执行频率或作为触发告警的条件 delta(mysql_global_status_handlers_total{handler="commit"}[1m])> 0 #检查在过去1分钟内,是否执行了至少一次与指定的处理器操作(假设为“commit”)相关的操作。 delta(mysql_global_status_table_locks_immediate[1m]) #检查在过去1分钟内,能够立即获取的表锁的数量增加了多少 delta(mysql_global_status_table_locks_waited[1m]) #检查在过去1分钟内,需要等待才能获取的表锁的数量增加了多少 delta(mysql_global_status_queries[1m]) #检查在过去1分钟内,MySQL服务器执行了多少个新的查询。 delta(mysql_global_status_slow_queries[1m]) #检查在过去1分钟内,MySQL服务器执行了多少个新的慢查询。 mysql_global_status_innodb_page_size #innodb #数据页的大小 mysql_global_variables_innodb_buffer_pool_size #InnoDB存储引擎用于缓存数据页和索引页的内存缓冲区的大小 mysql_global_status_buffer_pool_pages{state= "data"} # 当前InnoDB缓冲池中包含数据的数据页数 包括洁页,脏页 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 #MySQL服务器启动以来,所有InnoDB行锁等待时间的平均值。 mysql_global_status_innodb_row_lock_time_max # Innodb 行锁单次等待的最长时同 mysql_global_status_innodb_row_lock_waits #表示从MySQL服务器启动到当前时间点,InnoDB存储引擎中发生的行锁等待事件的总数 <hr> &nbsp;&nbsp;&nbsp;2.6 grafana中对mysql进行监控 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copy id to clipboard->grafana的dashboards中lmport dashboard https://grafana.com/grafana/dashboards/17320-1-mysqld-exporter-dashboard/ ![](https://img.kancloud.cn/e3/61/e3615f81d7e5f67a1c31e073e0bcd10a_1604x842.png) ![](https://img.kancloud.cn/a3/5d/a35d372d09c8ae1cc0e65322e93be9c9_1858x903.png)