簡單分析percona-zabbix-templates

jeanron100發表於2016-08-29
    當Zabbix和Percona兩者相遇,會擦出不少的開源火花來,眾人拾柴火焰高,最終受益的還是大部分運維人員。
    我很早就用過Percona提供的MySQL監控模板,但是卻沒有刨根問底,只是簡單使用而已,自從定製了Orabbix之後,我還是信心滿滿,MySQL的資料字典相對要少很多,監控起來可能想必Oracle要少很多,不過關於Percona的這個外掛,我還是帶著好奇之心,內部是否有很多獨門祕籍,我想好好學學那些監控項對應的SQL,好好彌補我對於MySQL監控的一些空缺,所以簡單分析這個模板就排上了日程。
    首先是Percona monitoring Plugins for Zabbix這個外掛,可以參考官網。https://www.percona.com/doc/percona-monitoring-plugins/1.1/zabbix/index.html裡面已經列出了很詳細的步驟,我就不再贅述了,我的目標是簡單理解這些監控的出處和原理。
    因為這個外掛是客戶端的,所以選擇了一臺伺服器在客戶端檢視。到達了相應的安裝目錄下,假設為:/home/app/zabbix/zabbix_agentd.conf.d/ 
可以看到配置檔案userparameter_percona_mysql.conf的內容,類似下面的形式

如此來看監控項還是豐富啊,而且後面對應的引數很簡介。這樣的監控項總共有多少,大概是160多個。我想我算是找到了一個寶藏了,這麼多的指令碼可著實能好好潛心學習一番。
等等,我看了看指令碼,發現有些不大對勁啊,怎麼呼叫的都是同一個指令碼。/home/app/zabbix/script/get_mysql_stats_wrapper.sh
好吧,一個就一個指令碼,肯定指令碼很大,也不影響程式碼閱讀。
再次檢視這個指令碼,發現我又想錯了。

這個指令碼是大小是1333,大概就是1k的樣子,這麼大點能放多少程式碼,肯定遠遠不夠啊。帶著好奇心進入這個指令碼。
原來這個指令碼中不是實際的詳細邏輯,這個指令碼會生成一個所謂的cache檔案,裡面呼叫的指令碼是一個php指令碼ss_get_mysql_stats.php
大體的呼叫方式如下:
CMD="sudo /usr/local/php/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items gg"            
把生成的資料都放入/tmp/localhost-mysql_cacti_stats.txt  
          

這個cache檔案是什麼東東,就是呼叫後生成的資料資訊。內容類似下面的樣子:
 #cat /tmp/localhost-mysql_cacti_stats.txt
gg:19526110683 gh:2588 gi:330457818 gj:288709876 gk:-1 gl:-1 gm:-1 gn:-1 go:0 gp:0 gq:131064 gr:130907
就是把上面監控項的值按照引數來分組,比如引數gg,值為19526110683。
對應的就是監控項:
UserParameter=MySQL.Key-read-requests,/home/app/zabbix/script/get_mysql_stats_wrapper.sh gg         
而如果現學現用,就直接呼叫模板裡引用的那個php指令碼,也能得到引數gg對應的值。
# sudo /usr/local/php/bin/php -q /home/app/zabbix/script/ss_get_mysql_stats.php --host localhost --items gg
gg:19526142091   
這個引數值代表什麼含義呢,繼續在裡面找找。檢視程式碼,可以看到gg對應的是Key_read_requests,和監控項裡的定義是一致的。

更為關鍵的是,我在指令碼里找了半天相關的SQL語句,竟然一個都沒有,這是什麼情況。
繼續往下看,發現原來是取的show status輸出的結果,裡面定義了不少的陣列去存放和對映。

明白了套路,那裡面引用了哪些命令呢,大概是這樣的一些命令,而且難能可貴的是裡面都給出了一些解釋。

當然這個時候就會發現這個指令碼的內容量很豐富了,裡面定義了大量的函式。有些通過字面意思就能明白大體要做的操作了。

大師的指令碼可以反覆揣摩,其中值得學習的一個地方就是步驟很清晰,從註釋就可以學習不少。
當然要抓住重點,那就是從main開始看起,有方向性。
把程式碼中的註釋直接拿出來,對於理解也是大有裨益,這就是好指令碼的一個特點。

可能因為裡面有很多陣列的處理,作者更鐘愛於php,所以直接使用php來封裝了,當然直接用shell封裝也是可行的。這個應該就是基於個人喜好了。
通過這個簡單的分析可以看到,這個指令碼是基於一些看似簡單的命令來得到一個MySQL的狀態資訊,而且從程式碼裡也可以看到它也會對資料做一些二次處理,比如做一些數值統計。
看起來還是很繁瑣的一個工作,在指令碼里可以很清晰看出結構關係來。值得好好揣摩學習。
當然指令碼執行的資料在Zabbix端也有一個對映。比如unflushed-log這個監控項,就需要這樣配置一番。簡單分析percona-zabbix-templates

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2124165/,如需轉載,請註明出處,否則將追究法律責任。

相關文章