天天看點

zabbix監控MySQL(windows和linux環境)

一、linux環境下監控MySQL

Zabbix Server自帶了MySQL插件來監控mysql資料庫的模闆,隻需要配置好agent用戶端,然後在web端給主機增加模闆就行了

監控項目:

Com_update:     mysql執行的更新個數

Com_select:     mysql執行的查詢個數

Com_insert:     mysql執行插入的個數

Com_delete:     執行删除的個數

Com_rollback:   執行復原的操作個數

Bytes_received:  接受的位元組數

Bytes_sent:     發送的位元組數

Slow_queries:   慢查詢語句的個數

Com_commit:     确認的事物個數

Com_begin:      開始的事物個數

Uptime:         伺服器已啟動的秒數

Questions:      用戶端發送到伺服器的語句個數

1)建立zabbix連結MySQL的使用者名,密碼并授予權限。

<code>mysql&gt; grant all on *.* to zabbix@</code><code>'localhost'</code>

<code>identified by "123456”;</code>

<code>mysql&gt; flush privileges;</code>

2)在zabbix_agent服務目錄下建立 .my.cnf 連接配接檔案

<code>cd</code> <code>/usr/local/zabbix/etc/</code>

<code>vim .my.cnf</code>

<code>[client]</code>

<code>user=zabbix</code>

<code>password=123456</code>

注意:

如果在資料庫grant授權時,針對的是localhost,這個.my.cnf裡面就不用加host參數了【如上配置】

但如果grant授權時針對的是本機的ip(如192.168.1.25),那麼在.my.cnf檔案裡就要加上host參數進行指定:host=192.168.1.25

3)配置MySQL的key檔案

這個可以從zabbix安裝時的解壓包裡拷貝過來:

<code>cp</code> 

<code>/usr/local/src/zabbix3</code><code>.0.3</code><code>/conf/</code>

<code>zabbix_agentd</code><code>/userparameter_mysql</code><code>.conf </code><code>/usr/local/zabbix/etc/zabbix_agentd</code><code>.conf.d/</code>

4)替換zabbix安裝路徑,注意如果MySQL沒配置好環境變量可能找不到MySQL指令,可以用MySQL全路徑

看到類似 HOME=/var/lib/zabbix 的路徑設定,把路徑全都替換為 /usr/local/zabbix/etc/,也就是上面的.my.cnf檔案所在的目錄路徑。

<code>cd</code> <code>/usr/local/zabbix/etc/zabbix_agentd</code><code>.conf.d/</code>

<code>vim userparameter_mysql.conf</code>

<code># For all the following commands HOME should be set to the directory that has .my.cnf file with password information.</code>

<code># Flexible parameter to grab global variables. On the frontend side, use keys like mysql.status[Com_insert].</code>

<code># Key syntax is mysql.status[variable].</code>

<code>UserParameter=mysql.status[*],</code><code>echo</code> <code>"show global status where Variable_name='$1';"</code> <code>| HOME=</code><code>/usr/local/zabbix/etc/</code> <code>mysql -N | </code><code>awk</code> <code>'{print $$2}'</code>

<code># Flexible parameter to determine database or table size. On the frontend side, use keys like mysql.size[zabbix,history,data].</code>

<code># Key syntax is mysql.size[&lt;database&gt;,&lt;table&gt;,&lt;type&gt;].</code>

<code># Database may be a database name or "all". Default is "all".</code>

<code># Table may be a table name or "all". Default is "all".</code>

<code># Type may be "data", "index", "free" or "both". Both is a sum of data and index. Default is "both".</code>

<code># Database is mandatory if a table is specified. Type may be specified always.</code>

<code># Returns value in bytes.</code>

<code># 'sum' on data_length or index_length alone needed when we are getting this information for whole database instead of a single table</code>

<code>UserParameter=mysql.size[*],</code><code>bash</code> <code>-c </code><code>'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/usr/local/zabbix/etc/ mysql -N'</code>

<code>UserParameter=mysql.</code><code>ping</code><code>,HOME=</code><code>/usr/local/zabbix/etc/</code> <code>mysqladmin </code><code>ping</code> <code>| </code><code>grep</code> <code>-c alive</code>

<code>UserParameter=mysql.version,mysql -V</code>

<code>%s</code><code>#/var/lib/zabbix#/usr/local/zabbix/etc/#      #用指令替換</code>

也可以用這個shell腳本監控,包括主從監控:

<code>### MySQL DB Infomation</code>

<code>UserParameter=mysql.status[*],</code><code>echo</code><code>"show global status where Variable_name='$1';"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf -N|</code><code>awk</code> <code>'{print $$2}'</code>

<code>UserParameter=mysql.variables[*],</code><code>echo</code><code>"show global variables where Variable_name='$1';"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf -N|</code><code>awk</code> <code>'{print $$2}'</code>

<code>UserParameter=mysql.</code><code>ping</code><code>,mysqladmin--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf </code><code>ping</code><code>|</code><code>grep</code> <code>-c  alive</code>

<code>UserParameter=mysql.version,</code><code>echo</code><code>"select version();"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf -N</code>

<code> </code> 

<code>#### MySQL Master Information</code>

<code>UserParameter=mysql.master.Slave_count,</code><code>echo</code><code>"show slave hosts;"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf -N|</code><code>wc</code> <code>-l</code>

<code>UserParameter=mysql.master.Binlog_file,</code><code>echo</code><code>"show master status;"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf -N|</code><code>awk</code> <code>'{print $1}'</code><code>|</code><code>awk</code> <code>-F.</code><code>'{print $1}'</code>

<code>UserParameter=mysql.master.Binlog_number,</code><code>echo</code><code>"show master status;"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf -N|</code><code>awk</code> <code>'{print $1}'</code><code>|</code><code>awk</code> <code>-F.</code><code>'{print $2}'</code>

<code>UserParameter=mysql.master.Binlog_position,</code><code>echo</code><code>"show master status;"</code><code>|mysql --defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf-N|</code><code>awk</code> <code>'{print $2}'</code>

<code>UserParameter=mysql.master.Binlog_count,</code><code>echo</code><code>"show binary logs;"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf -N|</code><code>wc</code> <code>-l</code>

<code>UserParameter=mysql.master.Binlog_total_size,</code><code>echo</code><code>"show binary logs;"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf -N|</code><code>awk</code> <code>'{sum+=$NF}END{print  sum}'</code>

<code>#### MySQL Slave Information</code>

<code>UserParameter=mysql.slave.Seconds_Behind_Master,</code><code>echo</code><code>"show slave status\G"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf|</code><code>grep</code> <code>"Seconds_Behind_Master"</code><code>|</code><code>awk</code><code>'{print $2}'</code>

<code>UserParameter=mysql.slave.Slave_IO_Running,</code><code>echo</code><code>"show slave status\G"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf|</code><code>grep</code><code>"Slave_IO_Running"</code><code>|</code><code>awk</code> <code>'{print $2}'</code>

<code>UserParameter=mysql.slave.Slave_SQL_Running,</code><code>echo</code><code>"show slave status\G"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf|</code><code>grep</code><code>"Slave_SQL_Running"</code><code>|</code><code>awk</code> <code>'{print $2}'</code>

<code>UserParameter=mysql.slave.Relay_Log_Pos,</code><code>echo</code><code>"show slave status\G"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf|</code><code>grep</code><code>"Relay_Log_Pos"</code><code>|</code><code>awk</code> <code>'{print $2}'</code>

<code>UserParameter=mysql.slave.Exec_Master_Log_Pos,</code><code>echo</code><code>"show slave status\G"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf|</code><code>grep</code><code>"Exec_Master_Log_Pos"</code><code>|</code><code>awk</code> <code>'{print $2}'</code>

<code>UserParameter=mysql.slave.Read_Master_Log_Pos,</code><code>echo</code><code>"show slave status\G"</code><code>|mysql--defaults-</code><code>file</code><code>=</code><code>/usr/local/zabbix/etc/</code><code>.my.cnf|</code><code>grep</code><code>"Read_Master_Log_Pos"</code><code>|</code><code>awk</code> <code>'{print $2}'</code>

5)修改zabbix_agentd.conf配置檔案,開啟額外加載,就是去掉前面的#号

<code>vim zabbix_agentd.conf</code>

<code>Include=</code><code>/usr/local/zabbix/etc/zabbix_agentd</code><code>.conf.d/</code>

6)重新開機zabbix_agentd服務

<code>/etc/init</code><code>.d</code><code>/zabbix_agentd</code> <code>restart</code>

7)測試看能否擷取到資料

<code># zabbix_get -s 127.0.0.1 -p 10050 -k mysql.status[Com_select]</code>

<code>200661</code>

8)登陸zabbix監控界面,在“配置”裡為主機添加模闆,完成監控。

<a href="https://s3.51cto.com/wyfs02/M00/92/CD/wKioL1kDCfnzGAvoAAErWK8wki4296.png-wh_500x0-wm_3-wmp_4-s_1713505052.png" target="_blank"></a>

<a href="https://s3.51cto.com/wyfs02/M01/92/CE/wKiom1kDCfrxfjaPAAEhZQbl6As617.png-wh_500x0-wm_3-wmp_4-s_3101104208.png" target="_blank"></a>

<a href="https://s1.51cto.com/wyfs02/M01/92/CD/wKioL1kDCfugFXQpAADs2vrL1NI866.png-wh_500x0-wm_3-wmp_4-s_3673559191.png" target="_blank"></a>

二、windows下的MySQL監控

要想在Windows上取得MySQL的狀态資料,可以用vbs腳本運作mysql指令

1)在d:\Zabbix\Scripts\目錄下建立兩個腳本檔案内容如下:

mysql_ping.vbs

<code>Set</code> <code>objFS =CreateObject(</code><code>"Scripting.FileSystemObject"</code><code>)</code>

<code>Set</code> <code>objArgs = WScript.Arguments</code>

<code>str1 = getCommandOutput(</code><code>"D:\SOFT_PHP_PACKAGE\mysql\bin\mysqladmin-ucactiuser -pcactiuser ping"</code><code>)     //修改對應資料庫路徑,使用者名和密碼</code>

<code>If</code> <code>Instr(str1,</code><code>"alive"</code><code>) &gt; 0Then</code>

<code>WScript.Echo 1</code>

<code>Else</code>

<code>WScript.Echo 0</code>

<code>End</code> <code>If</code>

<code>Function</code> <code>getCommandOutput(theCommand)</code>

<code>Dim</code> <code>objShell, objCmdExec</code>

<code>Set</code> <code>objShell =CreateObject(</code><code>"WScript.Shell"</code><code>)</code>

<code>Set</code> <code>objCmdExec = objshell.exec(thecommand)</code>

<code>getCommandOutput =objCmdExec.StdOut.ReadAll</code>

<code>end </code><code>Function</code>

 MYSQL-status.vbs

<code>Set</code> <code>objFS = CreateObject(</code><code>"Scripting.FileSystemObject"</code><code>)</code>

<code>str1 = getCommandOutput(</code><code>"D:\SOFT_PHP_PACKAGE\mysql\bin\mysqladmin-u cactiuser -pcactiuser extended-status"</code><code>)      //修改對應資料庫路徑,使用者名和密碼</code>

<code>Arg = objArgs(0)</code>

<code>str2 = Split(str1,</code><code>"|"</code><code>)</code>

<code>For</code> <code>i = LBound(str2) to UBound(str2)</code>

<code>If</code> <code>Trim(str2(i)) = Arg </code><code>Then</code>   

<code>WScript.Echo TRIM(str2(i+1))</code>

<code>Exit</code> <code>For</code>

<code>next</code>

2)修改windows上的zabbix_agentd.comf檔案,設定key值。在UserParameter下面加兩句;

UserParameter=mysql.status[*], cscript/nologo d:\Zabbix\Scripts\MySQL_Ext-Status_Script.vbs $1 

UserParameter=mysql.ping, cscript /nologo d:\Zabbix\Scripts\MySql_Ping.vbs

3)重新開機zabbix_agentd,并給主機添加MySQL模版,檢視items狀态。

本文轉自 80後小菜鳥 51CTO部落格,原文連結:http://blog.51cto.com/zhangxinqi/1920584