MySQLMTOP是一個由Python+PHP開發的MySQL企業級監控系統。系統由Python實現多進程數據採集和告警,PHP實現WEB展現和管理。最重要是MySQL服務器無需安裝任何Agent,只需在監控WEB界面配置相關數據庫信息php
功能很是強大:html
可對上百臺MySQL數據庫的狀態、鏈接數、QTS、TPS、數據庫流量、複製、性能等進行時時監控python
能在數據庫偏離設定的正常運行閥值(如鏈接異常,複製異常,複製延遲) 時發送告警郵件通知到DBA進行處理mysql
對歷史數據歸檔,經過圖表展現出數據庫近期狀態,以便DBA和開發人員能對遇到的問題進行分析和診斷linux
系統主要由儀表盤、狀態監控、進程監控、複製監控、慢查詢分析、性能圖表、工具組件、告警事件、系統資源等子系統組成,每一個子系統負責完成特定信息的採集和展現c++
1、系統安裝需求web
MySQL MTOP由PHP和Python開發,因此監控機須要安裝PHP運行環境和Python環境。須要的核心包以下:sql
1.MySQL 5.0及以上(用來存儲監控系統採集的數據)數據庫
2.Apache 2.2及以上 (WEB服務器運行服務器)apache
3.PHP 5.3以上 (WEB界面)
4.Python2 (推薦2.7版本,其餘版本未作測試,執行數據採集和報警任務)
5.MySQLdb for python (Python鏈接MySQl的接口)
2、 安裝必備的開發包
[root src]$ yum -y install ntp vim-enhanced 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
3、同步系統時間:
vim /etc/ntp.conf //添加下面三行內容
而後同步時間,重啓ntp服務,操做以下:
[root data]$ service ntpd stop 關閉 ntpd: [失敗] [root data]$ ntpdate cn.pool.ntp.org 18 Dec 15:09:59 ntpdate[11495]: step time server 119.57.127.125 offset -28806.680250 sec [root data]$ date 2014年 12月 18日 星期四 15:10:03 CST [root data]$ service ntpd start 正在啓動 ntpd: [肯定] [root data]$ chkconfig ntpd on
4、進制apache安裝,版本要2.2及以上
[root data]$cd /usr/local/src [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 ./configure --prefix=/usr/local/apache \ --enable-so --enable-rewrite \ --enable-mods-shared=most --sysconfdir=/etc/httpd [root httpd-2.2.19]$ make && make install
安裝完後啓動,啓動報Could not ....,修改下ServerName就不報這樣的錯了
[root httpd-2.2.19]$ /usr/local/apache/bin/apachectl start httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName [root httpd-2.2.19]$ netstat -tnlp |grep httpd tcp 0 0 :::80 :::* LISTEN 24810/httpd [root httpd-2.2.19]$ cp /usr/local/webserver/apache/bin/apachectl /etc/init.d/httpd [root httpd-2.2.19]$ cp /usr/local/apache/bin/apachectl /etc/init.d/httpd [root httpd-2.2.19]$ grep "ServerName" /etc/httpd/httpd.conf # ServerName gives the name and port that the server uses to identify itself. ServerName 127.0.0.1:80 [root httpd-2.2.19]$ service httpd restart
添加開機啓動:
[root httpd-2.2.19]$chkconfig --add httpd [root httpd-2.2.19]$chkconfig httpd on
MySQL我已經安裝,在這就不演示這個過程了,能夠到官網下載5.5版本的MySQL,而後用我寫的腳本安裝http://www.cnblogs.com/xuanzhi201111/p/4119065.html
5、進行PHP安裝
安裝php前安裝,不然可能出現如下錯誤:
configure: error: mcrypt.h not found. Please reinstall libmcrypt
[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 查找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成功了
6、進行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
7、安裝MySQLdb for python
[root src]$ wget http://www.mtop.cc/software/MySQLdb-python.zip [root src]$ unzip MySQLdb-python.zip [root src]$ cd MySQLdb1-master [root MySQLdb1-master]$ vim site.cfg
vim site.cfg添加你安裝的mysql路徑下的mysql_config:
添加完再執行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,要註冊帳號的
8、安裝MySQL MTOP系統
監控機建立監控數據庫,並授予權限,導入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]$ ls mysqlmtop_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';
9、安裝數據採集和報警系統
修改監控系統配置文件,進到/usr/local/mysqlmtop/mysqlmtop/etc,修改config.ini
[root etc]$ pwd /usr/local/mysqlmtop/mysqlmtop/etc [root etc]$ vim config.ini
授予可執行文件執行權限
[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(注意路徑),再啓動監控系統(注意:只有監控進程運行時系統纔會進行監控和報警)
啓動:
[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
10、安裝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是對應的庫,修改這三個便可
能夠經過瀏覽器去訪問了:http://ip
最好把默認的index.html刪除了,這樣才走index.php,默認管理員帳號密碼admin/admin 登陸後請修改密碼,增長普通帳號
看一下功能:
哈哈,是否是很吸引呢,功能很是強大,你們能夠研究下
總結:
1、該系統是開源的系統,若是搭建在公網,必定要作好各類訪問控制,作好各方面的安全工做
2、該系統功能比較多,能夠幫助MySQL DBA或運維DBA對管理MySQL及查看其性能
3、可能該系統存在一些小bug,例如發不出郵件啊,這些就要根據本身能力去完善了,若是會python,能夠去掉沒用的,加上本身想要的功能
詳細參考資料 MySQLMTOP官網:http://www.mtop.cc/
做者:陸炫志 出處:xuanzhi的博客 http://www.cnblogs.com/xuanzhi201111 您的支持是對博主最大的鼓勵,感謝您的認真閱讀。本文版權歸做者全部,歡迎轉載,但請保留該聲明。 |