1. 程式人生 > >MySQL監控系統MySQL MTOP的搭建

MySQL監控系統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的介面)

二、 安裝必備的開發包

[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

三、同步系統時間:

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
複製程式碼

四、進位制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

五、進行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://
[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成功了

六、進行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 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

八、安裝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';

九、安裝資料採集和報警系統

修改監控系統配置檔案,進到/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
複製程式碼


十、安裝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連線監控伺服器的資料庫資訊

[[email protected] config]# pwd
/usr/local/apache/htdocs/application/config
[email protected] config]# vim database.php

修改username填剛剛在MySQL授權使用者,password也就是對應的密碼,mysqlmtop是對應的庫,修改這三個即可

最好把預設的index.html刪除了,這樣才走index.php,預設管理員賬號密碼admin/admin 登入後請修改密碼,增加普通賬號

看一下功能:

哈哈,是不是很吸引呢,功能非常強大,大家可以研究下

總結:

      一、該系統是開源的系統,如果搭建在公網,一定要做好各種訪問控制,做好各方面的安全工作

      二、該系統功能比較多,可以幫助MySQL DBA或運維DBA對管理MySQL及檢視其效能

      三、可能該系統存在一些小bug,例如發不出郵件啊,這些就要根據自己能力去完善了,如果會python,可以去掉沒用的,加上自己想要的功能