首先介紹下 pt-stalk,它是 Percona-Toolkit 工具包中的一個(gè)工具,說起 PT 工具包大家都不陌生,平時(shí)常用的 pt-query-digest、 pt-online-schema-change 等工具都是出自于這個(gè)工具包,這里就不多介紹了。
為魚臺(tái)等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及魚臺(tái)網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、魚臺(tái)網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎ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 的人來(lái)說比較友好,腳本里面的監(jiān)控邏輯與監(jiān)控命令也可以拿來(lái)參考,用于構(gòu)建自己的監(jiān)控體系。
三、使用
接著我們來(lái)看下如何使用這個(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 工具。
cacti監(jiān)控mysql數(shù)據(jù)庫(kù)的方法
環(huán)境:
Cactiez或者cacti主機(jī):192.168.12.5
被監(jiān)控mysql數(shù)據(jù)庫(kù)主機(jī):192.168.5.231
1. 安裝監(jiān)控插件
cd /opt
tar -xzvf mysql-cacti-templates-1.1.2.tar.gz
cp /opt/mysql-cacti-templates-1.1.2/ss_get_mysql_stats.php /var/www/html/scripts/
其實(shí)里面我們要監(jiān)控mysql用到的是:acti_host_template_x_db_server_ht_0.8.6i.xml和mysql_definitions.pl
其他則是監(jiān)控Apache和Nginx的,接下來(lái)我們會(huì)介紹到,這里不再詳細(xì)的講了。
chown -R apache.apache /var/www/html/scripts
chmod -R 755 /var/www/html/scripts
使用 http 訪問 cacti主機(jī) 導(dǎo)入
/opt/mysql-cacti-templates-1.1.2/cacti_host_template_x_db_server_ht_0.8.6i.xml
默認(rèn)CactiEZ 和Cacti別是 admin admin
控制臺(tái) - 導(dǎo)入導(dǎo)出 - 模板導(dǎo)入 - 瀏覽
選中 cacti_host_template_x_db_server_ht_0.8.6i.xml
保存
2. 配置cacti的mysql插件
修改 ss_get_mysql_stats.php
vi /var/www/html/scripts/ss_get_mysql_stats.php
$mysql_user = 'cacti';
$mysql_pass = 'cacti';
$cache_dir = "/tmp/cacti/cache/";
這個(gè)賬戶和密碼是 被監(jiān)控端主機(jī) 給 Cacti主機(jī) 授權(quán)的 賬戶和密碼
Cacti需要這個(gè)賬戶和密碼去連接 被監(jiān)控機(jī) 查詢狀態(tài)
mkdir -p /tmp/cacti/cache
chown -R apache.apache /tmp/cacti
chmod -R 755 /tmp/cacti
設(shè)置 cacti 緩存目錄在 /tmp/cacti/cache/ 并給予權(quán)限
3. 配置被監(jiān)控端(192.168.5.231)的mysql 給 cacti 主機(jī)授權(quán)
mysql -uroot -p
grant process,super on *.* to 'cacti'@'192.168.12.5' identified by 'cacti';
exit
grant process,super on *.* to '賬戶'@'Cacti主機(jī)IP地址' identified by '密碼';此命令意義
只允許IP為 192.168.12.5 的主機(jī) 以賬戶 cacti 密碼 cacti 去訪問 本機(jī)數(shù)據(jù)
4. 在Cacti主機(jī)上(192.168.12.5) 監(jiān)控Mysql
4.1 為主機(jī)添加mysql模塊
控制臺(tái) - 管理 - 設(shè)備 - 選中之前創(chuàng)建好的主機(jī)
然后移到最下面的 添加圖形模版 選中 Mysql相關(guān)模塊 然后保存
4.2 為mysql模塊創(chuàng)建圖形
控制臺(tái) - 創(chuàng)建 - 創(chuàng)建圖形 - 選中該主機(jī) - 選中mysql模塊 - 創(chuàng)建
4.3 插件mysql性能數(shù)據(jù)
監(jiān)視器 - 選中該主機(jī) - 查閱對(duì)應(yīng)的mysql
完畢
-----一些數(shù)據(jù)庫(kù)操作語(yǔ)句
mysqld_safe --user=mysql
mysql -uroot -p
mysql -uroot -proot
grant ALL PRIVILEGES ON *.* to ‘root’@"%" identified by "root" WITH GRANT OPTION;
exit
grant select,insert,update,delete on cacti.* to ‘cacti’@”*”identified by "cacti";
exit
grant process,super on *.* to 'cacti'@'%' identified by 'cacti';
grant all privileges on cacti.* to ‘cacti’@"%" identified by "cacti";
客戶端開啟Cacti訪問本機(jī)mysql的權(quán)限
grant process,super on *.* to 'cacti'@'192.168.12.5' identified by 'cacti';
grant process,super on *.* to 'cacti'@'192.168.5.231' identified by 'cacti';
= = = = =
mysql -ucacti -pcacti -h 192.168.5.231
首先介紹下 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 的人來(lái)說比較友好,腳本里面的監(jiān)控邏輯與監(jiān)控命令也可以拿來(lái)參考,用于構(gòu)建自己的監(jiān)控體系。
三、使用
接著我們來(lái)看下如何使用這個(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 工具。
本期我們用 MySQL 提供的 DBUG 工具來(lái)研究 MySQL 的 SQL 處理流程。
起手先造個(gè)實(shí)例
這里得稍微改一下實(shí)例的啟動(dòng)文件 start,將 CUSTOM_MYSQLD 改為 mysqld-debug:
重啟一下實(shí)例,加上 debug 參數(shù):
我們來(lái)做一兩個(gè)實(shí)驗(yàn),說明 DBUG 包的作用:
先設(shè)置一個(gè)簡(jiǎn)單的調(diào)試規(guī)則,我們?cè)O(shè)置了兩個(gè)調(diào)試選項(xiàng):
d:開啟各個(gè)調(diào)試點(diǎn)的輸出
O,/tmp/mysqld.trace:將調(diào)試結(jié)果輸出到指定文件
請(qǐng)點(diǎn)擊輸入圖片描述
然后我們創(chuàng)建了一張表,來(lái)看一下調(diào)試的輸出結(jié)果:
請(qǐng)點(diǎn)擊輸入圖片描述
可以看到 create table 的過程中,MySQL 的一些細(xì)節(jié)操作,比如分配內(nèi)存 alloc_root 等
這樣看還不夠直觀,我們?cè)黾右恍┬畔ⅲ?/p>
請(qǐng)點(diǎn)擊輸入圖片描述
來(lái)看看效果:
請(qǐng)點(diǎn)擊輸入圖片描述
可以看到輸出變成了調(diào)用樹的形式,現(xiàn)在就可以分辨出 alloc_root 分配的內(nèi)存,是為了解析 SQL 時(shí)用的(mysql_parse)
我們?cè)僭黾右恍┯杏玫男畔ⅲ?/p>
請(qǐng)點(diǎn)擊輸入圖片描述
可以看到結(jié)果中增加了文件名和行號(hào):
請(qǐng)點(diǎn)擊輸入圖片描述
現(xiàn)在我們可以在輸出中找一下統(tǒng)計(jì)表相關(guān)的信息:
請(qǐng)點(diǎn)擊輸入圖片描述
可以看到 MySQL 在這里非常機(jī)智,直接執(zhí)行了一個(gè)內(nèi)置的存儲(chǔ)過程來(lái)更新統(tǒng)計(jì)表。
沿著 que_eval_sql,可以找到其他類似的統(tǒng)計(jì)表,比如下面這些:
請(qǐng)點(diǎn)擊輸入圖片描述
請(qǐng)點(diǎn)擊輸入圖片描述
本次實(shí)驗(yàn)中,我們借助了 MySQL 的 DBUG 包,來(lái)讓 MySQL 將處理過程暴露出來(lái)。MySQL 中類似的技術(shù)還有不少,比如 performance_schema,OPTIMIZER_TRACE 等等。
這些技術(shù)將 MySQL 的不同方向的信息暴露出來(lái),方便大家理解其中機(jī)制。
1.
被監(jiān)控MySQL主機(jī)設(shè)置
2.
被監(jiān)控MySQL主機(jī)配置 mysql grant usage on *.* to 'zabbix'@'localhost' identified by 'zabbix'; mysql flush ...
3.
設(shè)置完帳戶之后在被監(jiān)控端新建/etc/zabbix/.my.cnf以提供Zabb...
4.
zabbix界面配置 在zabbix圖形界面添加MySQL主機(jī)(此處不做詳述) ...
方法:
1.下載zabbix;
2.安裝zabbix所需的組件
#yum -y install curl curl-devel net-snmp net-snmp-devel perl-DBI php-gd php-xml php-bcmath
3.數(shù)據(jù)庫(kù)創(chuàng)建并導(dǎo)入數(shù)據(jù)
#tar zxf zabbix 1.8.2.tar.gz
#cd zabbix 1.8.2
#mysql -uroot -p
create database zabbix;
grant all on zabbix.* to zabbix@localhost identified by 'zabbix';
flush privileges;
#mysql -uroot zabbixcreate/schema/mysql.sql
#mysql -uroot zabbixcreate/data/data.sql
#mysql -uroot zabbixcreate/data/images_mysql.sql
//為zabbix創(chuàng)建自己的數(shù)據(jù)庫(kù),以便zabbix可以把收集到的數(shù)據(jù)信息存放在那里調(diào)用。
4.編譯安裝
#./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-proxy --with-mysql=/usr/local/mysql-5.1.56/bin/mysql_config --with-net-snmp --with-libcurl
//--prefix指定zabbix安裝目錄,--enable-server 支持zabbix服務(wù)器
--enable-agent支持zabbix代理
--enable-proxy 支持zabbix代理服務(wù)器
--with-mysql 使用MySQL客戶端庫(kù)可以選擇指定路徑mysql_config
--with-net-snmp 使用net - snmp軟件包,擇性地指定路徑NET - SNMP配置
--with-libcurl 使用curl包
#make make install
5.添加zabbix服務(wù)對(duì)應(yīng)的端口(可以省略,但是官方建議有)
#cat /etc/servicesEOF
zabbix-agent 10050/tcp Zabbix Agent
zabbix-agent 10050/udp Zabbix Agent
zabbix-trapper 10051/tcp Zabbix Trapper
zabbix-trapper 10051/udp Zabbix Trapper
EOF
6.拷貝zabbix的配置文件到etc下,web相關(guān)文件拷貝到web目錄下
#cd zabbix-1.8.2
#mkdir /etc/zabbix
#cp misc/conf/* etc/zabbix
#cp -r frontends/php /var/www/html/zabbix
修改zabbix連接的數(shù)據(jù)庫(kù)的用戶名和密碼
#vi /etc/zabbix/zabbix_server.conf
DBName=zabbix
DBUser=zabbix
DBUDBPassword=zabbix
7.為zabbix的啟動(dòng)、關(guān)閉和重啟的腳本文件做鏈接,方便系統(tǒng)可以找得到
#cd /usr/local/zabbix/bin/
#for i in *;do ln -s /usr/local/zabbix/bin/${i} /usr/bin/${i};done
#cd /usr/local/zabbix/sbin/
#for i in *;do ln -s /usr/local/zabbix/sbin/${i} /usr/sbin/${i};done
8.把mysql的lib庫(kù)文件添加到系統(tǒng)動(dòng)態(tài)庫(kù)配置文件中,方便系統(tǒng)可以找到mysql的lib庫(kù)。
#echo “/usr/local/mysql-5.1.56/lib/mysql/” /etc/ld.so.conf
#ldconfig //使上面的操作立即生效
9.將zabbix相關(guān)的啟動(dòng)腳本等文件拷貝的/etc/init.d/下,方便日后對(duì)zabbix的啟動(dòng)關(guān)閉操作
#cp misc/init.d/redhat/8.0/zabbix_server /etc/init.d/
#chmod +x /etc/init.d/zabbix_server //賦予可執(zhí)行權(quán)限
#cp misc/init.d/redhat/8.0/zabbix_agentd /etc/init.d/
#chmod +x /etc/init.d/zabbix_agentd
修改zabbix server和agentd程序目錄的位置:
#vi /etc/init.d/zabbix_server
progdir="/usr/local/zabbix/sbin/"
#vi /etc/init.d/zabbix_agentd
progdir="/usr/local/zabbix/sbin/"
10.添加開機(jī)啟動(dòng)服務(wù)
#chkconfig --add zabbix_server
#chkconfig --add zabbix_agentd
#chkconfig --level 345 zabbix_server on
#chkconfig --level 345 zabbix_agentd on
7、修改php相關(guān)參數(shù)
# vi /etc/php.ini
max_input_time = 600
max_execution_time = 300
date.timezone = Asia/Shanghai
post_max_size = 32M
memory_limit = 128M
mbstring.func_overload = 2
重啟apache
#service httpd restart