MySQL MTOP的搭建

MySQLMTOP是一个由Python+PHP开发的MySQL企业级监控系统。系统由Python实现多进程数据采集和告警,PHP实现WEB展示和管理。最重要是MySQL服务器无需安装任何Agent,只需在监控WEB界面配置相关数据库信息,功能非常强大:

可对上百台MySQL数据库的状态、连接数、QTS、TPS、数据库流量、复制、性能等进行时时监控

能在数据库偏离设定的正常运行阀值(如连接异常,复制异常,复制延迟) 时发送告警邮件通知到DBA进行处理

对历史数据归档,通过图表展示出数据库近期状态,以便DBA和开发人员能对遇到的问题进行分析和诊断

系统主要由仪表盘、状态监控、进程监控、复制监控、慢查询分析、性能图表、工具组件、告警事件、系统资源等子系统组成,每个子系统负责完成特定信息的采集和展示

 

一、系统安装需求

MySQL MTOP由PHP和Python开发,所以监控机需要安装PHP运行环境和Python环境。需要的核心包如下:

1.MySQL 5.0及以上(用来存储监控系统采集的数据)

2.Apache 2.2及以上 (WEB服务器运行服务器)

3.PHP 5.3以上 (WEB界面)

4.Python2 (推荐2.7版本,其他版本未做测试,执行数据采集和报警任务)

5.MySQLdb for python (Python连接MySQl的接口)

二、 安装必备的开发包

yum -y install ntp gcc gcc-c++ flex bison autoconf automake bzip2-devel ncurses-devel zlib-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel libXpm-devel gettext-devel  pam-devel libtool libtool-ltdl openssl openssl-devel fontconfig-devel libxml2-devel curl-devel  libicu libicu-devel libmcrypt libmcrypt-devel libmhash libmhash-devel

 

三、同步系统时间:

vim /etc/ntp.conf  //添加下面三行内容

wKiom1WaJcvgDyDBAAEa6Alv6vs002.jpg

同步时间,重启ntp服务

[root data]$ service ntpd stop
[root data]$ ntpdate  cn.pool.ntp.org                               
[root data]$ chkconfig ntpd on

四、进制apache安装,版本要2.2及以上

[root src]$ wget http://archive.apache.org/dist/httpd/httpd-2.2.19.tar.gz
[root src]$ tar xvf httpd-2.2.19.tar.gz
[root src]$ cd httpd-2.2.19 
[root src]$ ./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --enable-mods-shared=most --sysconfdir=/etc/httpd
[root httpd-2.2.19]$ make && make install
[root httpd-2.2.19]$ cp /usr/local/apache/bin/apachectl /etc/init.d/httpd                
[root httpd-2.2.19]$ service httpd start
[root httpd-2.2.19]$chkconfig --add httpd
[root httpd-2.2.19]$chkconfig httpd on
[root httpd-2.2.19]$  netstat -tnl |grep httpd
tcp        0      0 :::80              :::*                LISTEN      24810/httpd

五、进行MySQL安装

#!/bin/bash
#-------------------------------
#this install mysql for test ues


#定义变量
soft_path=/usr/local/src
mysql_pack=mysql-5.5.40-linux2.6-x86_64.tar.gz
mysql_version=`echo "mysql-5.5.40-linux2.6-x86_64.tar.gz"|cut -d - -f1,2`
mysql_user=mysql
mysql_port=3306
mysql_passwd=123456
install_path=/usr/local
mysql_path=/usr/local/${mysql_version}
mysql_data_path=/data/${mysql_version}/data


#创建用户、赋权、安装
groupadd ${mysql_user}
if [ $? -ne 0 ]
then
  echo "this user ${mysql_user} is exist!!"
  exit 1
fi
useradd -r -g ${mysql_user} ${mysql_user}

cd ${soft_path}
if [ ! -e ${mysql_pack} ]
then
  echo "install pack is not exist!!"
  exit 1
fi
tar zxvf ${mysql_pack} -C ${install_path}
cd ${install_path} && mv ${mysql_version}-* ${mysql_version}
chown -R root:${mysql_user} ${mysql_path}
cd ${mysql_path} && cp support-files/my-large.cnf ${mysql_path}/my.cnf
mkdir -p /data/${mysql_version}
chown -R ${mysql_user}:${mysql_user} /data/${mysql_version}

#修改my.cnf
  sed -i "/3306/{x;s/^/./;/^.\{2\}$/{x;s/3306/${mysql_port}/;b};x}" ${mysql_path}/my.cnf
  sed -i "/socket/{x;s/^/./;/^.\{2\}$/{x;s#/tmp/mysql.sock#/data/${mysql_version}/mysql.sock#;b};x}" ${mysql_path}/my.cnf
  sed -i "/\/data\/${mysql_version}\/mysql.sock/a\datadir         = ${mysql_data_path}" ${mysql_path}/my.cnf
  sed -i "/datadir/a\basedir         = ${mysql_path}" ${mysql_path}/my.cnf
  sed -i "/basedir/a\user            = ${mysql_user}" ${mysql_path}/my.cnf
  sed -i "/innodb_buffer_pool_size/s/^#//" ${mysql_path}/my.cnf


#初始化
cd ${mysql_path} 
yum install libaio -y
scripts/mysql_install_db --user=${mysql_user} --defaults-file=${mysql_path}/my.cnf

if [ $? -ne 0 ]
then
  echo -e "\e[1;31m[MySQL install init failure...]\e[0m"
  exit 1
fi

#添加启动关闭脚本
cat >>shutdown_mysql.sh<<EOF
#!/bin/bash

${mysql_path}/bin/mysqladmin --defaults-file=${mysql_path}/my.cnf -uroot -p${mysql_passwd} -S /data/${mysql_version}/mysql.sock shutdown
EOF

cat >>start_mysql.sh<<EOF
#! /bin/sh

nohup ${mysql_path}/bin/mysqld_safe --defaults-file=${mysql_path}/my.cnf >> ${mysql_path}/start_stop.log 2>&1 &
EOF

#启动MySQL
chmod +x shutdown_mysql.sh start_mysql.sh && sh start_mysql.sh
sleep 50
ps -aux |grep -v grep |grep ${mysql_port} &> /dev/null
if [ $? -ne 0 ]
then
   echo -e "\e[1;31m[MySQL start failure...]\e[0m"
   exit 1
else
    echo -e "\e[1;32m[MySQL start secessful]\e[0m"
fi
#修改密码
${mysql_path}/bin/mysqladmin -uroot password "${mysql_passwd}"  -S /data/${mysql_version}/mysql.sock

 

六、进行PHP安装

[root src]$wget http://softlayer.dl.sourceforge.net/sourceforge/mcrypt/libmcrypt-2.5.8.tar.gz[root src]$ tar zxf libmcrypt-2.5.8.tar.gz 
[root src]$ cd libmcrypt-2.5.8
[root libmcrypt-2.5.8]$ ./configure --prefix=/usr/local && make && make install

下载PHP并安装,版本要5.3以上,要注意的是,php安装涉及了你安装apache和mysql的路径,这个要特别注意的:

[root src]$ wget http://cn2.php.net/distributions/php-5.5.19.tar.gz
[root src]$ tar zxf php-5.5.19.tar.gz
[root src]$ cd php-5.5.19
[root php-5.5.19]$./configure --prefix=/usr/local/php \
--mandir=/usr/local/share/man \
--infodir=/usr/local/share/info \
--with-apxs2=/usr/local/apache/bin/apxs \
--enable-cgi --with-mysql=/usr/local/mysql-5.6.10/ \
--with-config-file-path=/usr/local/php/etc \
--with-pdo-mysql=/usr/local/mysql-5.6.10 \
--with-mysqli=/usr/local/mysql-5.6.10/bin/mysql_config \
--enable-zip --enable-sqlite-utf8 -enable-sockets \
--enable-soap --enable-pcntl --enable-mbstring \
--enable-intl --enable-calendar --enable-bcmath \
--enable-exif --with-mcrypt --with-mhash --with-gd \
--with-png-dir --with-jpeg-dir --with-freetype-dir \
--with-libxml-dir --with-curl --with-curlwrappers \
--with-zlib   --with-openssl --with-kerberos=shared \
--with-gettext=shared --with-xmlrpc=shared
[root php-5.5.19]$ make && make install

拷贝配置文件:

[root php-5.5.19]$ cp php.ini-production /usr/local/php/etc/php.ini

修改apache的配置文件:

[root php-5.5.19]$ vim /usr/local/apache/conf/httpd.conf

添加以下内容:

查找AddType application/x-gzip .gz .tgz,在该行下面添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
查找DirectoryIndex index.html 把该行修改成
DirectoryIndex index.html index.htm index.php

重启apache服务,在/usr/local/apache/htdocs/下vim index.php,操作如下:

[root htdocs]$ service httpd restart
[root htdocs]$ pwd
/usr/local/apache/htdocs
[root htdocs]$ cat index.php 
<?php
phpinfo();
?>

在防火墙里添加80端口,并重启,然后请问index.php:
http://ip/index.php,如果得到下图,意味着apache整合php成功了

wKioL1WaKguz871YAAGyLwbdB-g487.jpg

六、进行python安装,推荐2.7版本,其他版本未做测试,执行数据采集和报警任务

[root src]$ wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz2
[root src]$ tar jxf Python-2.7.2.tar.bz2
[root src]$ cd Python-2.7.2
[root Python-2.7.2]$ ./configure --prefix=/usr/local/Python2.7 --enable-shared make && make install
[root Python-2.7.2]$ mv /usr/bin/python /usr/bin/pythonbak
[root Python-2.7.2]$ ln -sf /usr/local/Python2.7/bin/python /usr/bin/python

查看Python版本,如果报少了库文件,vim /etc/ld.so.conf添加/usr/local/Python2.7/lib,执行ldconfig刷新配置文件

[root Python-2.7.2]$ python -V           
python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
[root Python-2.7.2]$ cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/Python2.7/lib
[root Python-2.7.2]$ ldconfig 
[root Python-2.7.2]$ python -V          
Python 2.7.2

如果python升级到2.7以后出现yum无法使用的情况,错误为No module named yum,请按照如下步骤处理,将yum使用的python版本改为旧版本,第一行修改为如下即可:

[root htdocs]$ vim /usr/bin/yum 
#!/usr/bin/python2.6

七、安装MySQLdb for python

[root src]$ wget [root src]$ unzip MySQLdb-python.zip
[root src]$ cd MySQLdb1-master
[root MySQLdb1-master]$ vim site.cfg

添加你安装的mysql路径下的mysql_config:

    which mysql_config

wKiom1WaKRejFVnzAAC2XY9IT9s114.jpg

添加完再执行python setup.py build可能报以下错:

[root MySQLdb1-master]$ python setup.py build
error: command 'gcc' failed with exit status 1

解决方法:

[root MySQLdb1-master]$ yum install gcc python-devel

再执行安装:

[root MySQLdb1-master]$ python setup.py build
[root MySQLdb1-master]$ python setup.py install

基本环境已经安装OVER了,下面去官网下载开源的管理软件包:http://www.lepus.cc/soft/index,要注册账号的

八、安装MySQL MTOP系统

下载地址:

https://gitee.com/feihu/MySQLMTOP

 

 监控机创建监控数据库,并授予权限,导入SQL文件

mysql> create database mysqlmtop default character set utf8; 
Query OK, 1 row affected (0.07 sec)

mysql> grant select,insert,update,delete,create,drop on mysqlmtop.* to 'mtop_user'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.04 sec)

mysql>  flush privileges;
Query OK, 0 rows affected (0.02 sec)
[root src]$ unzip MySQLMTOP.zip
[root src]$ cd  mysqlmtop2.2
[root sql]$ pwd/usr/local/src/mysqlmtop2.2/sql
[root sql]$ lsmysqlmtop_data.sql  mysqlmtop.sql

监控机(即MySQL MTOP server)创建监控数据库,并授予权限,导入SQL文件夹里的SQL文件(表结构和数据文件):

[root sql]$ mysql -uroot -p123456 -S /data/mysql-5.6.10/mysql.sock  mysqlmtop < ./mysqlmtop.sql 
[root sql]$ mysql -uroot -p123456 -S /data/mysql-5.6.10/mysql.sock  mysqlmtop < ./mysqlmtop_data.sql
[root sql]$ mv /usr/local/src/mysqlmtop2.2 /usr/local/mysqlmtop

对被监控的数据库进行授权

在python采集数据的过程中,需要连接到需要监控的数据库服务器采集数据,我们为了安全考虑,在WEB管理里面只要求录入主机和端口,没有录入账号和密码。所有需要监控的数据库请授予相同的用户密码记录在配置文件中。授权如下所示:

grant select,super,process on *.* to 'monitor'@'ip' identified by 'monitor';

九、安装数据采集和报警系统

修改监控系统配置文件,进到/usr/local/mysqlmtop/mysqlmtop/etc,修改config.ini

wKioL1WaLAWiqMNdAAHjIqyht24819.jpg

 授予可执行文件执行权限

[root mysqlmtop]$ pwd/usr/local/mysqlmtop/mysqlmtop
[root mysqlmtop]$ chmod +x *.py
[root mysqlmtop]$ chmod +x *.sh[root mysqlmtop]$ chmod +x mtopctl
[root mysqlmtop]$ ln -s /usr/local/mysqlmtop/mysqlmtop/mtopctl /usr/local/bin/

测试MySQL连接,报错了

[root mysqlmtop]$ ./test_mysql.py 
Traceback (most recent call last):
  File "./test_mysql.py", line 6, in <module>
    import MySQLdb
  File "/usr/lib64/python2.6/site-packages/MySQL_python-1.2.4-py2.6-linux-x86_64.egg/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory

解决方法:

如果是64系统则:
[root mysqlmtop]$ ln -s /usr/local/mysql-5.6.10/lib/libmysqlclient.so.18  /usr/lib64/libmysqlclient.so.18
如果是32位系统:
[root mysqlmtop]$ ln -s /usr/local/mysql-5.6.10/lib/libmysqlclient.so.18  /usr/lib/libmysqlclient.so.18

如果是通过socket文件连接MySQL的话 可能会报以下错:

mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)")

添加一下链接:

[root mysqlmtop]$ ln -s /data/mysql-5.6.10/mysql.sock /tmp/mysql.sock

再执行测试脚本,看到OK就正常连接成功了:

[root mysqlmtop]$ ./test_mysql.py 
MySQLDB OK!

修改下启动脚本mtopctl(注意路径),再启动监控系统(注意:只有监控进程运行时系统才会进行监控和报警)

wKiom1WaKrrCVFgFAAHzs0uwGso377.jpg

启动:

[root mysqlmtop]$ mtopctl  start
nohup: 把输出追加到"nohup.out"
mysql mtop start success!

使用--help查看监控系统进程管理参数,分别有start、stop、status

[root mysqlmtop]$ mtopctl --help
mysql mtop help:
support-site:www.mtop.cc  www.ruzuojun.com
====================================================================
start        Start mysql mtop monitor server; Command: #mtopctl start
stop         Stop mysql mtop monitor server; Command: #mtopctl stop
status       Check mysql mtop monitor run status; Command: #mtopctl status

十、安装WEB管理界面

把/usr/local/mysqlmtop/frontweb下的所有文件传到apache的/usr/local/apache/htdocs/

[root frontweb]$ pwd
/usr/local/mysqlmtop/frontweb
[root frontweb]$ cp -a * /usr/local/apache/htdocs/

打开application/config/database.php文件,修改PHP连接监控服务器的数据库信息

[root@localhost config]# pwd
/usr/local/apache/htdocs/application/config
root@localhost config]# vim database.php

修改username填刚刚在MySQL授权用户,password也就是对应的密码,mysqlmtop是对应的库,修改这三个即可

wKioL1WaLTLzQI-rAAIDHtaZoCE730.jpg

可以通过浏览器去访问了:http://ip

最好把默认的index.html删除了,这样才走index.php,默认管理员账号密码admin/admin 登录后请修改密码,增加普通账号

wKioL1WaLXmThsK_AAHUDzsWq5k947.jpg

查看一下相关功能

wKiom1WaK_qAXF9jAAOMNDrRD2s929.jpg

 监控项设置

点击管理中心 --> 应用管理 添加应用

点击管理中心 --> 服务器管理 添加 MySQL 服务器

十一、慢查询配置

1、在被监控服务器安装如下组件

http://cpan.metacpan.org/authors/id/T/TI/TIMB/DBI-1.628.tar.gz

tar xvzsf DBI-1.628.tar.gz

 cd DBI-1.628

perl Makefile.PL

 make && make install

http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.024.tar.gz

  1. # tar xvzf DBD-mysql-4.024.tar.gz
  2. # cd DBD-mysql-4.024
  3. # perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config --with-mysql=/usr/local/mysql
  4. # make && make install

http://search.cpan.org/CPAN/authors/id/S/SU/SULLR/IO-Socket-SSL-1.972.tar.gz

  1. # tar xvzf IO-Socket-SSL-1.972.tar.gz
  2. # cd IO-Socket-SSL-1.972
  3. # perl Makefile.PL
  4. # make && make install

http://www.percona.com/redir/downloads/percona-toolkit/LATEST/percona-toolkit-2.2.7.tar.gz

  1. # tar xvzf percona-toolkit-2.2.7.tar.gz
  2. # cd percona-toolkit-2.2.7
  3. # perl Makefile.PL
  4. # make && make install

2、开启 MySQL 本身的慢查询功能

  1. slow_query_log = 1
  2. slow_query_log_file = /data/dbdata/slow_query.log
  3. long_query_time = 1

3、在被监控服务器(10.160.22.14)上添加如下 crontab 项

  1. 00 * * * * /usr/bin/pt-query-digest --user=mtop_user --password=123456 --port=3306 --review h=172.18.35.29,D=mysqlmtop,t=mysql_slow_query_review_4 --history h=172.18.35.29,D=mysqlmtop,t=mysql_slow_query_review_history_4 --no-report --limit=0% /data/dbdata/slow_query.log >/dev/null 2>&1

4、在被监控服务器(10.160.22.47)上添加如下 crontab 项

  1. 00 * * * * /usr/bin/pt-query-digest --user=mtop_user --password=123456 --port=3306 --review h=172.18.35.29,D=mysqlmtop,t=mysql_slow_query_review_5 --history h=172.18.35.29,D=mysqlmtop,t=mysql_slow_query_review_history_5 --no-report --limit=0% /data/dbdata/slow_query.log >/dev/null 2>&1

以上数据表 mysql_slow_query_review、mysql_slow_query_review_history 的后缀为主机 ID,如图:

5、为被监控的服务器开启慢查询

6、效果展示

十二、工具组件配置

1、在被监控服务器(172.18.35.29)上添加如下 crontab 项

  1. */30 * * * * cd /usr/local/mysqlmtop; ./check_mysql_widget_bigtable.py >/dev/null 2>&1
  2. */1 * * * * cd /usr/local/mysqlmtop; ./check_mysql_widget_hit_rate.py >/dev/null 2>&1
  3. */1 * * * * cd /usr/local/mysqlmtop; ./check_mysql_widget_connect.py >/dev/null 2>&1

2、效果展示

十三、资源监控配置

1、被监控服务器上的设置

NET-SNMP服务安装(注意版本):

ftp://ftp.fi.freebsd.org/pub/FreeBSD/ports/distfiles/net-snmp-5.3.2.tar.gz

  1. # tar xvzf net-snmp-5.3.2.tar.gz
  2. # cd net-snmp-5.3.2
  3. # ./configure --prefix=/usr/local/snmp \
  4. --enable-mfd-rewrites \
  5. --with-default-snmp-version="2" \
  6. --with-sys-contact="lovezym5@qq.com" \
  7. --with-sys-location="China" \
  8. --with-logfile="/var/log/snmpd.log" \
  9. --with-persistent-directory="/var/net-snmp"
  10.  
  11. # make && make install
  12. # cp EXAMPLE.conf /usr/local/snmp/share/snmp/snmpd.conf
  13.  
  14. # vim /usr/local/snmp/share/snmp/snmpd.conf
  15. com2sec notConfigUser 172.18.35.29   mysqlmtop
  16.  
  17. group notConfigGroup v1  notConfigUser
  18. group notConfigGroup v2c notConfigUser
  19. group notConfigGroup usm notConfigUser
  20.  
  21. view all  included .1                80
  22. access notConfigGroup ""   any    noauth  exact all none none
  23. ......

服务启动:

  1. # /usr/local/snmp/sbin/snmpd -c /usr/local/snmp/share/snmp/snmpd.conf

2、监控服务器上的设置

NET-SNMP服务安装:

  1. # tar xvzf net-snmp-5.3.2.tar.gz
  2. # cd net-snmp-5.3.2
  3. # ./configure --prefix=/usr/local/snmp \
  4. --enable-mfd-rewrites \
  5. --with-default-snmp-version="2" \
  6. --with-sys-contact="lovezym5@qq.com" \
  7. --with-sys-location="China" \
  8. --with-logfile="/var/log/snmpd.log" \
  9. --with-persistent-directory="/var/net-snmp"
  10.  
  11. # make && make install
  12.  
  13. # cd /usr/local/mysqlmtop
  14. # ln -s /usr/local/snmp/bin/snmpwalk /usr/bin/snmpwalk
  15. # ln -s /usr/local/snmp/bin/snmpdf /usr/bin/snmpdf
  16.  
  17. # vim /usr/local/mysqlmtop/check_linux_resource.sh
  18. host="172.18.35.29"
  19. port="3306"
  20. user="mtop_user"
  21. password="123456"
  22. dbname="mysqlmtop"
  23. ......
  24.  
  25. # vim /usr/local/mysqlmtop/etc/config.ini
  26. [linux_server]
  27. server_ip="10.160.22.14|10.160.22.47"

重启监控服务:

  1. # mtopctl stop && mtopctl start

问题修正(否则无法获取内存信息):

  1. # vim /usr/local/mysqlmtop/check_linux_resource.sh
  2. totalmem=`/usr/bin/snmpdf -v1 -c mysqlmtop ${ip} | awk '/Real Memory/ {print $3}'`
  3. usedmem=`/usr/bin/snmpdf -v1 -c mysqlmtop ${ip} | awk '/Real Memory/ {print $4}'`

crontab 内容添加:

  1. */1 * * * * cd /usr/local/mysqlmtop; ./check_linux_resource.py >/dev/null 2>&1

 

总结:

      一、该系统是开源的系统,如果搭建在公网,一定要做好各种访问控制,做好各方面的安全工作

      二、该系统功能比较多,可以帮助MySQL DBA或运维DBA对管理MySQL及查看其性能

      三、可能该系统存在一些小bug,例如发不出邮件啊,这些就要根据自己能力去完善了,如果会python,可以去掉没用的,加上自己想要的功能

详细参考资料 MySQLMTOP官网:http://www.mtop.cc/

http://www.cnblogs.com/xuanzhi201111/p/4172604.html 

http://www.ruzuojun.com/topic/967.html 

http://sofar.blog.51cto.com/353572/1384203 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值