OneSQL :: 利用OneAgent插件,直接用MySQL客户端查看服务器端负载数据!

MySQL中没有直接反映主机负载的性能视图,给DBA运维工作带来了一点点不方便的地方。从监控系统中查数据,可能需要启动浏览器、然后进行登录等一系列步骤,还不考虑监控系统中的数据可能会有延迟,当需要根据主机的负载做一些自动化处理(比如实时调整负载均衡设备上的流量分配比例)时,最好的方式是用MySQL客户端程序能直接查到服务器端的负载信息,而不需要登录到MySQL所在的主机上,执行诸如“top”、“vmstat”这样的命令。

利用MySQL灵活的插件机制,可以轻松做到这一点。在OneSQL 5.6.30版本中,平民软件开发了一款名为“OneAgent”的插件(下载插件),来实现不登录主机来查看CPU利用率、进程数、内存、Swap、网络流量和磁盘IO等信息,后续还将增加文件系统空间利用率等信息,以方便大家在公有云上自动地管理好数据库服务。

mysql> show plugins;
+-----------------------+--------+--------------------+---------+---------+
| Name                  | Status | Type               | Library | License |
+-----------------------+--------+--------------------+---------+---------+
| binlog                | ACTIVE | STORAGE ENGINE     | NULL    | GPL     |
......
| OneAgent              | ACTIVE | DAEMON             | NULL    | GPL     |
+-----------------------+--------+--------------------+---------+---------+
39 rows in set (0.00 sec)

这时就可以使用“show status like ‘xxx’”命令来直接查看主机的性能信息了,比如查看CPU的利用率:

mysql> show status like 'oneagent_cpu%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| oneagent_cpu_idl | 100   |
| oneagent_cpu_irq | 0     |
| oneagent_cpu_sys | 0     |
| oneagent_cpu_usr | 0     |
| oneagent_cpu_wio | 0     |
+------------------+-------+
5 rows in set (0.00 sec)

或者查看OS的负载、进程数、上下文切换等信息:

mysql  show status like 'oneagent_os%';
+---------------------+----------+
| Variable_name       | Value    |
+---------------------+----------+
| oneagent_os_blkque  | 0        |
| oneagent_os_context | 193      |
| oneagent_os_filenr  | 0        |
| oneagent_os_fork    | 0        |
| oneagent_os_load    | 0.000000 |
| oneagent_os_proc    | 306      |
| oneagent_os_runque  | 1        |
| oneagent_os_uptime  | 1296     |
+---------------------+----------+
8 rows in set (0.00 sec)

也可以查看内存的使用情况,看看还有多少可用内存,Swap被用了多少等。

mysql  show status like 'oneagent_mem%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| oneagent_mem_memcache  | 1035  |
| oneagent_mem_memfree   | 29663 |
| oneagent_mem_memptable | 9     |
| oneagent_mem_memswap   | 0     |
| oneagent_mem_pagein    | 0     |
| oneagent_mem_pageout   | 0     |
| oneagent_mem_swapin    | 0     |
| oneagent_mem_swapout   | 0     |
+------------------------+-------+
8 rows in set (0.00 sec)

也可以查看某块盘(需要配置)的IO情况。

mysql> show status like 'oneagent_disk1%';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| oneagent_disk1_busy | 0     |
| oneagent_disk1_rblk | 0     |
| oneagent_disk1_read | 0     |
| oneagent_disk1_rtim | 0     |
| oneagent_disk1_wblk | 0     |
| oneagent_disk1_writ | 0     |
| oneagent_disk1_wtim | 0     |
+---------------------+-------+
7 rows in set (0.00 sec)

所有的状态变量以“oneagent”开头,可以使用“show status like ‘oneagent%’”命令来查看所有的主机负载指标。也有几个配置选项和OneAgent插件相关的,可以来列一下:

mysql> show variables like 'oneagent_%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| oneagent_disk1    | sd    |
| oneagent_disk2    |       |
| oneagent_disk3    |       |
| oneagent_interval | 1     |
+-------------------+-------+
4 rows in set (0.00 sec)

其中“interval”指定性能数据收集的频率,而“disk1”、“disk2”和“disk3”则可以用来指定三块磁盘的名字,以便OneAgent能向你提供磁盘IO的数据(通常MySQL要监控三块盘的IO,在最理想的情况下,分别是数据文件盘、Binlog所在的盘、以及InnoDB日志所在的盘)。