目录
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 ~]
2
二. 主机性能状态
[root@localhost ~]
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 ~]
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 ~]
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 ~]
[root@localhost ~]
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 ~]
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的数据库和指定表的大小