基于python语言的MySQL监控***及实现方法
技术领域
本发明属于数据库自动化运维的一部分,涉及自动收集数据库基本状态、性能指标和阀值告警的监控***。提供一种基于python语言的MySQL监控***及实现方法。
背景技术
数据库***是应用平台中最繁忙的子***,存储的内容也至关重要,随着应用***的日渐扩展,数据库服务器越来越多,数据库架构也越来月复杂。用户日渐提高的对***可靠性的需求,越来越多的转换为对数据库可靠性的要求。
传统的数据库巡讲方式一般是通过手动或者定时任务来执行命令或者脚本来获取数据库的运行状态和性能指标,这种做法的主要缺陷如下:
首先,这种巡检是被动的和不及时的。通常需要登录到数据库服务器,手动或者通过定时任务执行脚本,每天执行几次。作为数据库的监控者无法及时获取数据库信息和状态。
其实,这种巡检效率低。对于一个在线运营的***而言,数据库服务器的台数通常是几百、几千甚至更多,巡检需要收集的信息类似。这种情况下,巡检是重复性劳动,用计算机替代人工做重复性劳动是很好的选择。
再者,信息不直观。巡检收集的信息一般是一串数值和字符的文本文件,看起来不直观和不能很好的看到起伏变化。
最后,信息不持久。传统巡检收集到的文本信息,文本文件一多,管理和存放难度就很大,容易遗漏,也无法进行纵向和横向的比对。
发明内容
本发明的目的是针对现有技术的不足,结合数据库运维实践,提供一种基于python语言的MySQL监控***及实现方法,一种分布式汇总MySQL数据库性能指标的实时收集的方法。通过编写python代码从所有数据库服务器收集数据库运行信息和性能指标信息,汇总到一个专门数据库中,前台通过js页面直观展示。这些信息永久存放的专门数据库中,便于横向纵向分析。
基于python语言的MySQL监控***,包括远端、桥接端、监控端三个部分,其中远端用于收集指定数据库服务器的性能信息;桥接端用于转发众多数据库服务器的性能信息到指定的监控端;监控端用户展示汇总的众多数据库服务器的监控信息。
基于python语言的MySQL监控***的实现方法,包括如下步骤:
步骤(1).远端信息收集
远端指的是被监控的MySQL数据库服务器,由pyenv,virtualenv 的python虚拟环境调用python脚本,每秒(收集频率可以通过参数控制)收集一次MySQL数据库服务器的性能指标。收集到的信息拼接成json串,发送到桥接端接口。
主要class(类)和method(方法)如下:
1-1 class:SERVER_MONITOR
硬盘、内存、网络三方面信息是反映服务器负荷的最基本指标,指标高需要十分关注,该class主要是收集操作***层面这三方面信息,收集到信息拼接成json串,发送到桥接端接口,method主要有:
init_config:定义远端数据库服务器的连接信息(包括ip、数据库的用户、数据库用户的密码、数据库端口、备份目录)和桥接端的连接信息(桥接端的ip、端口)。
get_diskname:获取硬盘的分布情况
get_mem:获取内存的大小和使用情况
get_disk:获取硬盘的使用情况
get_net_io:获取网卡io
get_disk_io:获取磁盘io
1-2 class:MYSQL_MONITOR
该class主要通过登录MySQL数据库,获取MySQL环境变量的状态值,实时反映数据库的运行状态,通常来说,这些指标高的话,就代表MySQL数据库繁忙,如果不高就说明数据库负荷不高,可以暂不关注其他指标。收集到信息拼接成json串,发送到桥接端接口
主要method:
get_dir:获取错误日志、慢日志、数据文件所在目录
get_tps:获取实时的tps
get_qps(cls):获取实时qps
get_innodb_read:获取innodb实时读的量(单位kb)
get_innodb_write:获取innodb实时写的量(单位kb)
get_innodb_read_times:获取innodb实时读的次数
get_innodb_write_times:获取innodb实时写的次数
get_tmp_tables:获取产生临时表的数量
get_innodb_log_writes:获取实时redo log写的量(单位kb)
get_innodb_os_log_fsyncs:获取实时redo log binlog同步次数 get_innodb_buffer_read_hits:获取实时innodb buffer命中率
get_innodb_buffer_usage:获取实时innodb buffer使用率
get_connect_count:获取实时数据库连接数
1-3 class:slowlog_monitor
绝大多数的MySQL性能问题都和慢SQL有关系。该功能通过分析数据库的慢日志(慢SQL的查询时间由数据库参数long_query_time 决定),解析一段时间内的每条慢SQL语句,提供详细语句,查询时间、扫描行数、锁定时间、返回行数、执行终端、所在数据库明细信息。根据这些信息,数据库管理人员可以判断出最需要优先处理的 SQL语句,使优化更有针对性。
收集到的信息拼接成json串,发送到桥接端接口
主要methon:
format_slowlog:将MySQL慢日志加载到pthon dist中,通过split函数拆分关键字对应的内容,再将拆分内容组成json串,拆分后内容包括:本机ip、执行时间、执行用户、执行消耗时间、加锁时间、返回行数、扫描行数。
1-4 class:log_monitor
解析MySQL错误日志,显示紧急错误,是数据库管理员应该高度关注的信息。
收集到的信息拼接成json串,发送到桥接端接口。
主要methon:
format_slowlog:将MySQL错误日志加载到pthon dist中,通过split函数拆分关键字对应的内容,再将拆分内容组成json串,拆分后内容包括:本机ip、错误详情。
1-5 class:innobackupex
数据库备份是数据库发生灾难恢复的可靠保证,该class主要功能是调用innobackupex方法备份数据库,并删除过期备份,备份的结果生成json串,发送到桥接端接口。
主要method:
mysql_backup:调用innobackupex方法备份数据库,备份完成后,记录信息如下:判断备份是否成功,备份集物理文件名,备份盘使用比例、备份耗时。同时根据配置文件保留有效备份天数参数,删除过期备份。
步骤(2).桥接端
数据库服务器一般放在idc机房,出于容灾的考虑,还会存放在不同的idc机房;出于安全性考虑,数据库服务器都不会开外网,这就要求能将存放在不同idc机房的数据库服务器的性能信息汇总到一台机器用户展示,这种情况下桥接端就应运而生了。
桥接端在网络上与远端、监控端的指定端口是连通的,这样就可以接收来自远端监控信息,向监控端指定借口发送信息。
2-1:class:ProxyFactory
直接调用python twisted.web模块,将远端收集到的MySQL数据库服务器的性能指标转发到监控端对应html页面。
步骤(3).监控端
3-1.监控端接口
监控端接口的作用是将桥接端传过来的众多数据库服务器的性能信息按照既定规则写入专门数据库。
3-2监控端页面展示
监控端页面展示的作用是将专用数据库用已经存放的数据库监控信息,通过图形化的方式多维度展示,展示模块主要有:
对应展示1-1class:SERVER_MONITOR收集信息。
innodb引擎:对应展示1-2class:MYSQL_MONITOR收集信息
慢SQL明细:对应展示1-3class:slowlog_monitor收集信息
慢SQL汇总对应展示1-3class:slowlog_monitor收集信息的汇总
错误日志:对应1-4class:log_monitor收集信息
备份信息:对应1-5class:innobackupex
本发明有益效果如下:
1.通过本发明能够快速了解概况,因为监控端集中展示远端数据库运行数据库,不需要运维人员挨个登录到远端服务器,明显减少时间消耗;如果收集不到信息,大概率是MySQL数据库出现停机故障;在可以收集到监控信息的情况下,从监控端操作***和存储引擎层面展示的信息就可以判断数据库是否正常运行,处理更为针对性。
2.通过本发明能够快速定位异常,监控端详细收集了远端操作***和存储引擎层面信息,并用图形化方式展示,异常部分一目了然。
3.通过本发明能够减少误操作,因为监控端集中展示远端信息,大多数时候不需要运维人员再登录到众多的远端服务器,有效降低误操作概率。
具体实施方式
下面结合实施例对本发明作进一步说明。
本发明结合数据库运维实践,提供一种基于python语言的MySQL 监控***及实现方法,一种分布式汇总MySQL数据库性能指标的实时收集的方法。通过编写python代码从所有数据库服务器收集数据库运行信息和性能指标信息,汇总到一个专门数据库中,前台通过js 页面直观展示。这些信息永久存放的专门数据库中,便于横向纵向分析。
基于python语言的MySQL监控***,包括远端、桥接端、监控端三个部分,其中远端用于收集指定数据库服务器的性能信息;桥接端用于转发众多数据库服务器的性能信息到指定的监控端;监控端用户展示汇总的众多数据库服务器的监控信息。
基于python语言的MySQL监控***的实现方法,包括如下步骤:
步骤(1).远端信息收集
远端指的是被监控的MySQL数据库服务器,由pyenv,virtualenv 的python虚拟环境调用python脚本,每秒(收集频率可以通过参数控制)收集一次MySQL数据库服务器的性能指标。收集到的信息拼接成json串,发送到桥接端接口。
主要class(类)和method(方法)如下:
1-1 class:SERVER_MONITOR
硬盘、内存、网络三方面信息是反映服务器负荷的最基本指标,指标高需要十分关注,该class主要是收集操作***层面这三方面信息,收集到信息拼接成json串,发送到桥接端接口,method主要有:
init_config:定义远端数据库服务器的连接信息(包括ip、数据库的用户、数据库用户的密码、数据库端口、备份目录)和桥接端的连接信息(桥接端的ip、端口)。
get_diskname:获取硬盘的分布情况
get_mem:获取内存的大小和使用情况
get_disk:获取硬盘的使用情况
get_net_io:获取网卡io
get_disk_io:获取磁盘io
1-2 class:MYSQL_MONITOR
该class主要通过登录MySQL数据库,获取MySQL环境变量的状态值,实时反映数据库的运行状态,通常来说,这些指标高的话,就代表MySQL数据库繁忙,如果不高就说明数据库负荷不高,可以暂不关注其他指标。收集到信息拼接成json串,发送到桥接端接口
主要method:
get_dir:获取错误日志、慢日志、数据文件所在目录
get_tps:获取实时的tps
get_qps(cls):获取实时qps
get_innodb_read:获取innodb实时读的量(单位kb)
get_innodb_write:获取innodb实时写的量(单位kb)
get_innodb_read_times:获取innodb实时读的次数
get_innodb_write_times:获取innodb实时写的次数
get_tmp_tables:获取产生临时表的数量
get_innodb_log_writes:获取实时redo log写的量(单位kb)
get_innodb_os_log_fsyncs:获取实时redo log binlog同步次数 get_innodb_buffer_read_hits:获取实时innodb buffer命中率
get_innodb_buffer_usage:获取实时innodb buffer使用率
get_connect_count:获取实时数据库连接数
1-3 class:slowlog_monitor
绝大多数的MySQL性能问题都和慢SQL有关系。该功能通过分析数据库的慢日志(慢SQL的查询时间由数据库参数long_query_time 决定),解析一段时间内的每条慢SQL语句,提供详细语句,查询时间、扫描行数、锁定时间、返回行数、执行终端、所在数据库明细信息。根据这些信息,数据库管理人员可以判断出最需要优先处理的 SQL语句,使优化更有针对性。
收集到的信息拼接成json串,发送到桥接端接口
主要methon:
format_slowlog:将MySQL慢日志加载到pthon dist中,通过 split函数拆分关键字对应的内容,再将拆分内容组成json串,拆分后内容包括:本机ip、执行时间、执行用户、执行消耗时间、加锁时间、返回行数、扫描行数。
1-4 class:log_monitor
解析MySQL错误日志,显示紧急错误,是数据库管理员应该高度关注的信息。
收集到的信息拼接成json串,发送到桥接端接口。
主要methon:
format_slowlog:将MySQL错误日志加载到pthon dist中,通过split函数拆分关键字对应的内容,再将拆分内容组成json串,拆分后内容包括:本机ip、错误详情。
1-5 class:innobackupex
数据库备份是数据库发生灾难恢复的可靠保证,该class主要功能是调用innobackupex方法备份数据库,并删除过期备份,备份的结果生成json串,发送到桥接端接口。
主要method:
mysql_backup:调用innobackupex方法备份数据库,备份完成后,记录信息如下:判断备份是否成功,备份集物理文件名,备份盘使用比例、备份耗时。同时根据配置文件保留有效备份天数参数,删除过期备份。
步骤(2).桥接端
数据库服务器一般放在idc机房,出于容灾的考虑,还会存放在不同的idc机房;出于安全性考虑,数据库服务器都不会开外网,这就要求能将存放在不同idc机房的数据库服务器的性能信息汇总到一台机器用户展示,这种情况下桥接端就应运而生了。
桥接端在网络上与远端、监控端的指定端口是连通的,这样就可以接收来自远端监控信息,向监控端指定借口发送信息。
2-1:class:ProxyFactory
直接调用python twisted.web模块,将远端收集到的MySQL数据库服务器的性能指标转发到监控端对应html页面。
步骤(3).监控端
3-1.监控端接口
监控端接口的作用是将桥接端传过来的众多数据库服务器的性能信息按照既定规则写入专门数据库。
3-2监控端页面展示
监控端页面展示的作用是将专用数据库用已经存放的数据库监控信息,通过图形化的方式多维度展示,展示模块主要有:
对应展示1-1class:SERVER_MONITOR收集信息。
innodb引擎:对应展示1-2class:MYSQL_MONITOR收集信息
慢SQL明细:对应展示1-3class:slowlog_monitor收集信息
慢SQL汇总对应展示1-3class:slowlog_monitor收集信息的汇总
错误日志:对应1-4class:log_monitor收集信息
备份信息:对应1-5class:innobackupex
本***在本公司自运营项目超过50个mysql实例部署,实际运行效果来看,达到快速了解MySQL运行概况,快速定位故障的目的。