首先介紹下 pt-stalk,它是 Percona-Toolkit 工具包中的一個(gè)工具,說起 PT 工具包大家都不陌生,平時(shí)常用的 pt-query-digest、 pt-online-schema-change 等工具都是出自于這個(gè)工具包,這里就不多介紹了。
庫倫網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
pt-stalk 的主要功能是在出現(xiàn)問題時(shí)收集 OS 及 MySQL 的診斷信息,這其中包括:
1. OS 層面的 CPU、IO、內(nèi)存、磁盤、網(wǎng)絡(luò)等信息;
2. MySQL 層面的行鎖等待、會(huì)話連接、主從復(fù)制,狀態(tài)參數(shù)等信息。
而且 pt-stalk 是一個(gè) Shell腳本,對(duì)于我這種看不懂 perl 的人來說比較友好,腳本里面的監(jiān)控邏輯與監(jiān)控命令也可以拿來參考,用于構(gòu)建自己的監(jiān)控體系。
三、使用
接著我們來看下如何使用這個(gè)工具。
pt-stalk 通常以后臺(tái)服務(wù)形式監(jiān)控 MySQL 并等待觸發(fā)條件,當(dāng)觸發(fā)條件時(shí)收集相關(guān)診斷數(shù)據(jù)。
觸發(fā)條件相關(guān)的參數(shù)有以下幾個(gè):
function:
°?默認(rèn)為 status,代表監(jiān)控 SHOW GLOBAL STATUS 的輸出;
°?也可以設(shè)置為 processlist,代表監(jiān)控 show processlist 的輸出;
variable:
°?默認(rèn)為 Threads_running,代表 監(jiān)控參數(shù),根據(jù)上述監(jiān)控輸出指定具體的監(jiān)控項(xiàng);
threshold:
°?默認(rèn)為 25,代表 監(jiān)控閾值,監(jiān)控參數(shù)超過閾值,則滿足觸發(fā)條件;
°?監(jiān)控參數(shù)的值非數(shù)字時(shí),需要配合 match 參數(shù)一起使用,如 processlist 的 state 列;
cycles:
°?默認(rèn)為 5,表示連續(xù)觀察到五次滿足觸發(fā)條件時(shí),才觸發(fā)收集;
連接參數(shù):host、password、port、socket。
其他一些重要參數(shù):
iterations:該參數(shù)指定 pt-stalk 在觸發(fā)收集幾次后退出,默認(rèn)會(huì)一直運(yùn)行。
run-time:觸發(fā)收集后,該參數(shù)指定收集多長(zhǎng)時(shí)間的數(shù)據(jù),默認(rèn) 30 秒。
sleep:該參數(shù)指定在觸發(fā)收集后,sleep 多久后繼續(xù)監(jiān)控,默認(rèn) 300 秒。
interval:指定狀態(tài)參數(shù)的檢查頻率,判斷是否需要觸發(fā)收集,默認(rèn) 1 秒。
dest:監(jiān)控?cái)?shù)據(jù)存放路徑,默認(rèn)為 /var/lib/pt-stalk。
retention-time :監(jiān)控?cái)?shù)據(jù)保留時(shí)長(zhǎng),默認(rèn) 30 天。
daemonize:以后臺(tái)服務(wù)運(yùn)行,默認(rèn)不開啟。
log:后臺(tái)運(yùn)行日志,默認(rèn)為 /var/log/pt-stalk.log。
collect:觸發(fā)發(fā)生時(shí)收集診斷數(shù)據(jù),默認(rèn)開啟。
°?collect-gdb:收集 GDB 堆棧跟蹤,需要 gdb 工具。
°?collect-strace:收集跟蹤數(shù)據(jù),需要 strace 工具。
°?collect-tcpdump:收集 tcpdump 數(shù)據(jù),需要 tcpdump 工具。
根據(jù)mysql慢日志監(jiān)控SQL語句執(zhí)行效率
啟用MySQL的log-slow-queries(慢查詢記錄)。
在Linux環(huán)境下先要找到my.cnf文件(一般在/etc/mysql/),然后可能會(huì)發(fā)現(xiàn)該文件修改后無法保存,原因是你沒有相應(yīng)的權(quán)限,可以從屬性中看到該文件的所有者是root,這時(shí)要先以root的身份打開它:
sudo
nautilus
/etc/mysql
接著再打開my.cnf文件然后找到[mysqld]標(biāo)簽在下面加上:
log-slow-queries=/path/slow.log
–慢日志保存路徑,該文件自己新建
long_query_time=2
–超過2秒的查詢
log-queries-not-using-indexes
–記錄沒有使用索引的查詢
保存,關(guān)閉。然后如果重啟MySQL的話會(huì)碰到這樣的提示:world-writable
config
file
‘
etc
my.cnf'
is
ignored
這時(shí)需要你再運(yùn)行這個(gè)代碼:
chmod
644
/etc/my.cnf
–644表示rw-r–r–
然后再重啟服務(wù)就OK了。
但是要注意的是:log-slow-queries=/path/slow.log為慢查詢?nèi)罩敬娣诺牡胤?,而這個(gè)目錄要有MySQL的運(yùn)行帳號(hào)的可寫權(quán)限,一般都將這個(gè)目錄設(shè)置為MySQL的數(shù)據(jù)存放目錄。
我是這么做的:先用root用戶進(jìn)到MySQL的數(shù)據(jù)存放目錄(一般是/var/lib/mysql),新建一個(gè)slow.log文件(root用戶能保證有權(quán)限新建,再運(yùn)行chmod
644)。然后更改該文件的所有者和所在組:
chown
mysql運(yùn)行帳戶的名字(可以看同文件夾中其他文件的所有者和組)+小數(shù)點(diǎn)+組名(方法同用戶名)
/path/slow.log
或者:
chown
mysql運(yùn)行帳戶的名字(可以看同文件夾中其他文件的所有者和組)
/path/slow.log
chgrp
組名(方法同用戶名)
/path/slow.log
這樣才能保證MySQL能往slow.log中寫日志。
首先介紹下 pt-stalk,它是 Percona-Toolkit 工具包中的一個(gè)工具,說起 PT 工具包大家都不陌生,平時(shí)常用的 pt-query-digest、 pt-online-schema-change 等工具都是出自于這個(gè)工具包,這里就不多介紹了。
pt-stalk 的主要功能是在出現(xiàn)問題時(shí)收集 OS 及 MySQL 的診斷信息,這其中包括:
1. OS 層面的 CPU、IO、內(nèi)存、磁盤、網(wǎng)絡(luò)等信息;
2. MySQL 層面的行鎖等待、會(huì)話連接、主從復(fù)制,狀態(tài)參數(shù)等信息。
而且 pt-stalk 是一個(gè) Shell腳本,對(duì)于我這種看不懂 perl 的人來說比較友好,腳本里面的監(jiān)控邏輯與監(jiān)控命令也可以拿來參考,用于構(gòu)建自己的監(jiān)控體系。
三、使用
接著我們來看下如何使用這個(gè)工具。
pt-stalk 通常以后臺(tái)服務(wù)形式監(jiān)控 MySQL 并等待觸發(fā)條件,當(dāng)觸發(fā)條件時(shí)收集相關(guān)診斷數(shù)據(jù)。
觸發(fā)條件相關(guān)的參數(shù)有以下幾個(gè):
function:
°?默認(rèn)為 status,代表監(jiān)控 SHOW GLOBAL STATUS 的輸出;
°?也可以設(shè)置為 processlist,代表監(jiān)控 show processlist 的輸出;
variable:
°?默認(rèn)為 Threads_running,代表 監(jiān)控參數(shù),根據(jù)上述監(jiān)控輸出指定具體的監(jiān)控項(xiàng);
threshold:
°?默認(rèn)為 25,代表 監(jiān)控閾值,監(jiān)控參數(shù)超過閾值,則滿足觸發(fā)條件;
°?監(jiān)控參數(shù)的值非數(shù)字時(shí),需要配合 match 參數(shù)一起使用,如 processlist 的 state 列;
cycles:
°?默認(rèn)為 5,表示連續(xù)觀察到五次滿足觸發(fā)條件時(shí),才觸發(fā)收集;
連接參數(shù):host、password、port、socket。
其他一些重要參數(shù):
iterations:該參數(shù)指定 pt-stalk 在觸發(fā)收集幾次后退出,默認(rèn)會(huì)一直運(yùn)行。
run-time:觸發(fā)收集后,該參數(shù)指定收集多長(zhǎng)時(shí)間的數(shù)據(jù),默認(rèn) 30 秒。
sleep:該參數(shù)指定在觸發(fā)收集后,sleep 多久后繼續(xù)監(jiān)控,默認(rèn) 300 秒。
interval:指定狀態(tài)參數(shù)的檢查頻率,判斷是否需要觸發(fā)收集,默認(rèn) 1 秒。
dest:監(jiān)控?cái)?shù)據(jù)存放路徑,默認(rèn)為 /var/lib/pt-stalk。
retention-time :監(jiān)控?cái)?shù)據(jù)保留時(shí)長(zhǎng),默認(rèn) 30 天。
daemonize:以后臺(tái)服務(wù)運(yùn)行,默認(rèn)不開啟。
log:后臺(tái)運(yùn)行日志,默認(rèn)為 /var/log/pt-stalk.log。
collect:觸發(fā)發(fā)生時(shí)收集診斷數(shù)據(jù),默認(rèn)開啟。
°?collect-gdb:收集 GDB 堆棧跟蹤,需要 gdb 工具。
°?collect-strace:收集跟蹤數(shù)據(jù),需要 strace 工具。
°?collect-tcpdump:收集 tcpdump 數(shù)據(jù),需要 tcpdump 工具。