《Centos系统——zabbix对mysql相关性能监控》

it2026-03-19  2

目录

1. 自定义用户key与参数Userparameters1. 用户自定义key实例2. 参数描述 Mysql性能查询一. 获取mysql用户下的进程总数二. 主机性能状态三. CPU使用率(top/vmstat)四. 磁盘IO量(vmstat/iostat)五. swap进出量[内存]六. 数据库性能状态(1)QPS(每秒Query量)(2)TPS(每秒事务量)(3)key Buffer 命中率(4)InnoDB Buffer命中率(5)Query Cache命中率(6)Table Cache状态量(7)Thread Cache 命中率(8)锁定状态(9)复制延时量(10) Tmp Table 状况(临时表状况)(11) Binlog Cache 使用状况(12) Innodb_log_waits 量 七. 监控mysql相关数据1. zabbix监控MySQL主从状态2. zabbix监控MySQL的qps和tps3. zabbix监控mysql的吞吐量4. zabbix监控mysql的数据库和指定表的大小

1. 自定义用户key与参数Userparameters

为什么要自定义KEY

有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法。我们可以在客户端配置文件zabbix_angentd.conf里面配置UserParameter. 语法如下:

UserParameter=key,command 用户自定义参数包含一个key和一个命令,key必须整个系统唯一,配置好之后,重启客户端。然后配置item,在key的位置填上我们自定义的key即可。用户自定义参数里指定的脚本由zabbix agent来执行,最大可以返回512KB的数据.

1. 用户自定义key实例

简单点的命令示例: UserParameter=ping,echo 1 如果调用ping这个key,将会收到返回值1. 更复杂的命令示例: UserParameter=mysql.ping,mysqladmin -uroot ping|grep -c alive 如果返回1表示MySQL运行中,如果返回0表示MySQL挂了 灵活的自定义key: 如下为灵活的用户自定义参数 UserParameter=key[*],command

2. 参数描述

Key 唯一. [*]表示里面可以传递多个参数Command 需要执行的脚本,key的[]里面的参数一一对应$1到$9,一共9个参数。$0表示脚本命令.

注意事项:

如果需要使用命令行里面出现 2 这 种 变 量 , 那 么 你 要 使 用 两 个 2这种变量,那么你要使用两个 2使$2,例如awk ’{ print $$2 }’,之前就遇到过这个问题,不停的测试自己脚本输出正常,但是zabbix却拿不到数据,原来是出在这里。为了防止和参数冲突,所以zabbix做了这个规定。zabbix禁止使用一些不安全的参数,如下: \ ’ ” ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @从zabbix 2.0开始,zabbix返回文本数据可以是空格。

示例1:

UserParameter=ping[*],echo $1 ping[0] - 将一直返回0 ping[aaa] - 将一直返回 'aaa'

示例2:

UserParameter=mysql.ping[*],mysqladmin -u$1 -p$2 ping | grep -c alive 如下参数用于监控MYSQL,并且可以传递用户名和密码。 mysql.ping[zabbix,our_password]

示例3:

统计一个文件中有多少行被匹配? UserParameter=wc[*],grep -c "$2" $1 如下方法将会返回文件中出现指定字符的行数 wc[/etc/passwd,root] wc[/etc/services,zabbix]

Mysql性能查询

SHOW [GLOBAL | SESSION] STATUS [LIKE ‘pattern’]

SHOW STATUS(局部)提供服务器状态信息。此信息也可以使用mysqladmin extended-status(全局)命令获得。mysqladmin extended-status等同于SHOW GLOBAL STATUS

使用GLOBAL选项,您可以得到所有MySQL连接的状态值。使用SESSION,您可以得到所有当前连接的状态值。如果您两个选项都不使用,则默认值为SESSION。LOCAL是SESSION的同义词。

注意,有些状态变量只有一个全局值。对于这些变量,使用GLOBAL和SESSION会得到同样的值。 用FLUSH STATUS语句可以将许多状态变量重设为0。

一. 获取mysql用户下的进程总数

[root@localhost ~]# ps -ef | awk '{print $1}'|grep "mysql"|grep -v "grep"|wc -l 2

二. 主机性能状态

[root@localhost ~]# uptime 19:22:52 up 21 min, 3 users, load average: 0.00, 0.03, 0.08

三. CPU使用率(top/vmstat)

0.3% us — 用户空间占用CPU的百分比。 0.0% sy — 内核空间占用CPU的百分比。 0.0% ni — 改变过优先级的进程占用CPU的百分比 99.7% id — 空闲CPU百分比 0.0% wa — IO等待占用CPU的百分比 0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比 0.0% si — 软中断(Software Interrupts)占用CPU的百分比

[root@localhost ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 187884 2108 567256 0 0 127 248 167 235 2 2 96 0 0

四. 磁盘IO量(vmstat/iostat)

bi: 每秒读取的块数 bo: 每秒写入的块数 [root@localhost ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 187884 2108 567256 0 0 127 248 167 235 2 2 96 0 0 tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。"一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求""一次传输"请求的大小是未知的。 kB_read/s:每秒从设备(drive expressed)读取的数据量; kB_wrtn/s:每秒向设备(drive expressed)写入的数据量; kB_read:读取的总数据量; kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。 [root@localhost ~]# yum -y install sysstat [root@localhost ~]# iostat Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 2020年10月22日 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 1.88 0.00 1.80 0.02 0.00 96.30 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 8.31 100.46 199.17 203323 403096 dm-0 8.32 95.40 198.14 193079 401008 dm-1

五. swap进出量[内存]

[root@localhost ~]# free total used free shared buff/cache available Mem: 997956 241020 185568 7840 571368 556788 Swap: 2097148 0 2097148

六. 数据库性能状态

(1)QPS(每秒Query量)

每秒查询访问的量

QPS = Questions(or Queries) / seconds mysql > show global status like 'Question%'; MariaDB [(none)]> show global status like "Question%"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Questions | 13 | +---------------+-------+ 1 row in set (0.01 sec)

(2)TPS(每秒事务量)

(每秒事务量)事情从开始到结束

TPS = (Com_commit + Com_rollback) / seconds mysql > show global status like 'Com_commit'; mysql > show global status like 'Com_rollback';

(3)key Buffer 命中率

mysql>show global status like 'key%'; key_buffer_read_hits = (1-key_reads / key_read_requests) * 100% key_buffer_write_hits = (1-key_writes / key_write_requests) * 100%

(4)InnoDB Buffer命中率

mysql> show status like 'innodb_buffer_pool_read%'; innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100%

(5)Query Cache命中率

mysql> show status like 'Qcache%'; Query_cache_hits = (Qcahce_hits / (Qcache_hits + Qcache_inserts )) * 100%;

(6)Table Cache状态量

mysql> show global status like 'open%'; 比较 open_tables 与 opend_tables 值

(7)Thread Cache 命中率

mysql> show global status like 'Thread%'; mysql> show global status like 'Connections'; Thread_cache_hits = (1 - Threads_created / connections ) * 100%

(8)锁定状态

mysql> show global status like '%lock%'; Table_locks_waited/Table_locks_immediate=0.3% 如果这个比值比较大的话,说明表锁造成的阻塞比较严重 Innodb_row_lock_waits innodb行锁,太大可能是间隙锁造成的

(9)复制延时量

mysql > show slave status 查看延时时间

(10) Tmp Table 状况(临时表状况)

mysql > show status like 'Create_tmp%'; Created_tmp_disk_tables/Created_tmp_tables比值最好不要超过10%,如果Created_tmp_tables值比较大, 可能是排序句子过多或者是连接句子不够优化

(11) Binlog Cache 使用状况

mysql > show status like 'Binlog_cache%'; 如果Binlog_cache_disk_use值不为0 ,可能需要调大 binlog_cache_size大小

(12) Innodb_log_waits 量

mysql > show status like 'innodb_log_waits'; Innodb_log_waits值不等于0的话,表明 innodb log buffer 因为空间不足而等待 qps 查询 mysqladmin -uuser -ppasswd extended-status -r -i1|grep Com_select

七. 监控mysql相关数据

1. zabbix监控MySQL主从状态

mysql -u root -e "show slave status\G;" 2>/dev/null |egrep "Running|Yes" |head -n2|awk -F ':' '{print $2}'|wc -l

2. zabbix监控MySQL的qps和tps

QPS:

TPS:

3. zabbix监控mysql的吞吐量

4. zabbix监控mysql的数据库和指定表的大小

最新回复(0)