Box Anemometer是一個非常不錯的MySQL慢查詢可視化工具平臺,具體就不多詳述了,官網是https://github.com/box/Anemometer 最近動自己動手搭了一個,具體搭建過程,參考了http://www.cnblogs.com/xuanzhi201111/p/41288 ...
Box Anemometer是一個非常不錯的MySQL慢查詢可視化工具平臺,具體就不多詳述了,官網是https://github.com/box/Anemometer
最近動自己動手搭了一個,具體搭建過程,參考了http://www.cnblogs.com/xuanzhi201111/p/4128894.html以及官網的說明文檔
下麵把其中遇到的一些坑記錄於此:
1、.資源規劃:
192.168.17.205 Box Anemometer伺服器,安裝httpd服務、php、用於存儲Anemometer慢查詢數據的MySQL服務。
192.168.16.21/22/23/24/25/**** 需要被監控的MySQL伺服器,需要安裝percona-toolkit,並配置使用pt-query-digest收集數據的相關腳本任務。
2、安裝過程及遇到的坑:2.1、之前192.168.17.205上就編譯安裝過一個MySQL5.7.20服務
於是按照網上的教程先yum 安裝了httpd,再yum安裝php,然後配置Anemometer。
結果一直報錯,連接不上MySQL伺服器。我懷疑是yum安裝php預設的Mysql客戶端驅動太低導致的。所以重新採用編譯安裝php,編譯配置如下:
./configure --prefix=/data/php --enable-fpm --with-fpm-user=daemon --with-fpm-group=daemon --with-config-file-path=/usr/local/php/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-gd --with-zlib --with-libxml-dir --with-curl --with-mhash --with-xmlrpc --with-mcrypt --with-openssl --with-apxs2=/usr/sbin/apxs --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-gd-native-ttf --enable-ftp --enable-pcntl --enable-sockets --enable-zip --enable-soap --disable-debug --disable-ipv6 --with-gettext --enable-calendar --enable-dom --enable-opcache=no
結果還是報錯,仍然連接不上mysql伺服器。但錯誤信息有所變化,最終解決方案是:關閉Selinux。
2.2、關於Anemometer資料庫的授權以及被監控資料庫的用戶授權:
2.2.1、Anemometer用於保存收集過來的慢查詢數據的MySQL資料庫192.168.17.205的授權如下:
GRANT SELECT, UPDATE ON `slow_query_log`.* TO 'app_anemometer_rw'@'localhost'
對應的配置如下:
[root@oracle conf]# pwd
/var/www/html/anemometer/conf
[root@oracle conf]# vi config.inc.php
<?php
$conf['datasources']['localhost'] = array(
'host' => '127.0.0.1',
'port' => 3306,
'db' => 'slow_query_log',
'user' => 'app_anemometer_r',
'password' => 'Your@StrongPassword',
'tables' => array(
'global_query_review' => 'fact',
'global_query_review_history' => 'dimension'
),
'source_type' => 'slow_query_log'
);
2.2.2、另外該資料庫還需要給各被監控資料庫的腳本程式授權:
GRANT SELECT, INSERT, UPDATE, DELETE ON `slow_query_log`.* TO 'app_anemometer_rw'@'192.168.16.2%'
2.2.3、各被監控的資料庫需要授權Anemometer程式訪問,用來獲取執行計劃等數據:
GRANT SELECT, SUPER ON *.* TO 'app_anemometer_r'@'192.168.17.205'
對應的配置(/var/www/html/anemometer/conf/config.inc.php)如下:
3、通過配置,終於能打開首頁了,但首頁顯示的SQL長度實在是太短,只有20個字元,導致沒法從這個列表上清楚的知道到底是哪個查詢:
這個也可以通過修改/var/www/html/anemometer/conf/config.inc.php文件來配置:
預設是取最左邊20位,改成想要的長度即可。
4、最後附上各MySQL伺服器中用於收集慢查詢日誌的python腳本:
#!/usr/bin/env python2 #-*- coding: utf-8 -*- import subprocess PATH='/bin:/usr/bin' LOG='/log/slow.log' SERVER_HOST='192.168.17.205' DB='slow_query_log' TAB1='global_query_review' TAB2='global_query_review_history' MYSQL_USER='app_anemometer_rw' MYSQL_PASSWD='Your@StrongPassword' hostname='MySQL-M-16-21' print MYSQL_PASSWD cmd='pt-query-digest --user='+MYSQL_USER+' --password='+ MYSQL_PASSWD + ' --port=3306 --review h='+SERVER_HOST+',D='+DB+',t='+TAB1+' --history h='+SERVER_HOST+',D='+DB+',t='+TAB2 +' --no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\\"'+hostname+'\\"" ' +LOG print cmd subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
4.1 由於anemometer伺服器是通過上面python腳本所配置的hostname定義來反過來訪問各被監控的伺服器,用於獲取執行計劃等相關信息。
所以,如果hostname如果配置的不是Ip,那麼還需在anemometer伺服器192.168.17.205上配置hosts文件:
[root@oracle conf]# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.16.21 MySQL-M-16-21
4.2 可能預設配置下,該平臺所顯示的內容並不是自己想要的
例如單個查詢的過去90天歷史記錄里,它是以ts_min為group by的,這會只顯示一條數據,而不是每天的數據,我改成了ts_max。
另外,ts_cnt也是Sum出來的,如果我們5分鐘收集一次日誌,這個結果完全不是想要的,我這裡添加了一行配置:'query_cnt' => 'MAX(ts_cnt)',
並且將history_defaults和report_defaults的table_fields配置中將ts_cnt改為了query_cnt:
通過以上配置,系統所顯示的值基本與預期相符。
本文鏈接:http://www.cnblogs.com/ajiangg/p/8258926.html