本文以 MySQL 数据库为例
处理自建数据库问题时,我们需要了解更多的系统信息,如果没有监控,则需要我们使用 Linux 命令得到这些数据,本文介绍如何获得这些信息,和 Python 监控脚本设计思路。
关于 CPU 详细信息,可以使用下方 Linux 命令获取:
lscpu
使用 df 命令能够列出不同分区的概要信息、挂载点、已用的和可用的空间。
df -Th
使用 free 命令可以了解到系统的内存使用情况,如果是专用的数据库服务器,没有其它应用在跑的话 MySQL 内存使用波动不会太大,根据 innodb_buffer_pool_size 来设定。
free -h
使用top命令可以查看正在运行的系统中的动态实时视图信息,显示系统摘要信息, 以及Linux内核当前正在管理的任务列表。其支持静态输出,也支持交互式输出,还可以 在启动之前读取响应的配置文件来决定如何显示进程的状态信息。
0.0 us
用户程序工作所占用的 CPU 时间片占比,可以理解为 CPU 工作占比;0.3 sy
内核占用的 CPU 时间片占比,可以理解为系统调度资源使用 CPU 占比;99.7 id
空闲 CPU 时间片占比,可以理解为空闲的 CPU 占比;0.0 wa
CPU 用来等待时间片占比,一般等待 IO 或者锁问题;进程列表输出解读:
我们此时在进程列表可以看到 mysqld 进程 CPU 使用率为 155% 因为这台测试机器是双核心所以 CPU 使用率最高为 200% (如果想看每个核心的使用率按 1 就可以在最上面显示)
glances 是一个基于 python 语言开发,可以为 linux 或者 UNIX 性能提供监视和分析性能数据的功能。glances 在用户的终端上显示重要的系统信息,并动态的进行更新,让管理员实时掌握系统资源的使用情况,而动态监控并不会消耗大量的系统资源,比如 CPU 资源,通常消耗小于2%,glances 默认每两秒更新一次数据。同时 glances 还可以将相同的数据捕获到一个文件,便于以后对报告进行分析和图形绘制,支持的文件格式有 .csv 电子表格格式和 html 格式。
glances 可以分析系统的:
下面是使用 glances 监控的效果:
安装方法:
yum install -y glances
功能介绍
个人认为 glances 比较特别的功能是 C/S 模式,被监控机运行服务端,监控端运行客户端既可以实现远程监控。
服务端:
shell>glances -s -B 172.16.104.55 &
Glances server is running on 172.16.104.55:61209
客户端:
glances -c 172.16.104.55
此时就可以在另外一台服务器监控到服务端的负载情况。
强烈建议数据库服务器,没有配置监控的话,可以安装一下 glances 系统负载情况尽收眼底。
下面介绍一下数据库监控脚本的设计思路,主要分成数据采集和可视化。
系统数据采集:
Python 语言中有一个开源模块 psutil
通过它可以获得系统的信息:
如上图所示,可以非常简单的获取到服务器内存使用情况。那么使用 psutil
就可以帮助我们采集到服务器资源使用情况,比如:CPU 使用率、内存使用率、IO 使用情况、磁盘使用率、网络使用情况。
数据库信息采集:
关于数据库这部分信息,主要有 QPS/TPS 这些数据是可以从 MySQL 状态变量中得到:
show global status
where
Variable_name in (
'Com_commit', 'Com_delete', 'Com_insert',
'Com_rollback', 'Com_select', 'Com_update',
'Threads_connected', 'Open_tables',
'Slow_queries', 'Innodb_buffer_pool_read_requests',
'Innodb_buffer_pool_read_ahead',
'Innodb_buffer_pool_reads', 'Aborted_clients',
'Aborted_connects'
);
数据可视化:
目前我的想法是使用 echarts 进行可视化,有一些模版也是非常的哇塞。
上图是我使用 echarts 简单实现的 CPU & 内存使用情况的监控图,可以自己调整显示日期。
未完待续…