分佈式監控解決方案zabbix03-監控mysql

一 。mysql性能指標php

   mysql服務器 內置的狀態信息 能夠獲取mysql性能 html

查看當前登陸後的session相關的狀態信息
node

[root@node1 ~]# mysql -uroot -proot -e "show status"
查看全局的狀態信息
mysqladmin -h192.168.58.147 -P3306 -uroot -proot extended-status
查看簡易全局狀態信息
[root@node1 ~]# mysqladmin -h192.168.58.147 -P3306 -uroot -proot status
Uptime: 196844  Threads: 13  Questions: 24377  Slow queries: 0  Opens: 248  Flush tables: 2  Open tables: 4  Queries per second avg: 0.123
Uptime表示mysql運行的時間
Threads表示線程總數
Questions表示執行的查詢數
Slow queries 查詢很慢的執行個數
Opens 打開的鏈接數
Open Tables 打開操做過的表個數
Queries per second avg 平均每秒的查詢個數
具體的參數 能夠經過 傳入不一樣參數名稱獲取
mysqladmin -h192.168.58.147 -P3306 -uroot -proot extended-status | grep Uptime
查詢總查詢次數(查詢Com_select 修改 Com_update 插入 Com_insert 刪除 Com_delete)
[root@node1 ~]# mysqladmin -h192.168.58.147 -P3306 -uroot -proot extended-status | grep Com_select
| Com_select                               | 14710
zabbix模板中有個模板  Template DB MySQL

點擊進入發現裏面定義的全部監控項所有都是上面的一些參數

mysql

咱們須要找一個獲取mysql版本和是否存活的命令 用於檢測 存活輸出 1 非返回0web

mysqladmin -h192.168.58.147 -P3306 -uroot -proot ping | grep -c alive
查看mysql的版本
[root@node1 ~]# mysqladmin -h192.168.58.147 -P3306 -uroot -proot version
mysqladmin  Ver 9.0 Distrib 5.5.56-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Server version          5.5.56-MariaDB
Protocol version        10
Connection              192.168.58.147 via TCP/IP
TCP port                3306
Uptime:                 18 sec

Threads: 2  Questions: 3  Slow queries: 0  Opens: 0  Flush tables: 2  Open tables: 4  Queries per second avg: 0.166

總結其餘status的參數值(轉從 http://www.sandzhang.com/blog/2010/04/07/mysql-show-status-explained-detail/)算法

狀態名sql

做用域數據庫

詳細解釋緩存

Aborted_clients安全

Global

因爲客戶端沒有正確關閉鏈接致使客戶端終止而中斷的鏈接數

Aborted_connects

Global

試圖鏈接到MySQL服務器而失敗的鏈接數

Binlog_cache_disk_use

Global

使用臨時二進制日誌緩存但超過binlog_cache_size值並使用臨時文件來保存事務中的語句的事務數量

Binlog_cache_use

Global

使用臨時二進制日誌緩存的事務數量

Bytes_received

Both

從全部客戶端接收到的字節數。

Bytes_sent

Both

發送給全部客戶端的字節數。

com*

 

各類數據庫操做的數量

Compression

Session

客戶端與服務器之間只否啓用壓縮協議

Connections

Global

試圖鏈接到(不論是否成功)MySQL服務器的鏈接數

Created_tmp_disk_tables

Both

服務器執行語句時在硬盤上自動建立的臨時表的數量

Created_tmp_files

Global

mysqld已經建立的臨時文件的數量

Created_tmp_tables

Both

服務器執行語句時自動建立的內存中的臨時表的數量。若是Created_tmp_disk_tables較大,你可能要增長tmp_table_size值使臨時 表基於內存而不基於硬盤

Delayed_errors

Global

用INSERT DELAYED寫的出現錯誤的行數(可能爲duplicate key)。

Delayed_insert_threads

Global

使用的INSERT DELAYED處理器線程數。

Delayed_writes

Global

寫入的INSERT DELAYED行數

Flush_commands

Global

執行的FLUSH語句數。

Handler_commit

Both

內部提交語句數

Handler_delete

Both

行從表中刪除的次數。

Handler_discover

Both

MySQL服務器能夠問NDB CLUSTER存儲引擎是否知道某一名字的表。這被稱做發現。Handler_discover說明經過該方法發現的次數。

Handler_prepare

Both

A counter for the prepare phase of two-phase commit operations.

Handler_read_first

Both

索引中第一條被讀的次數。若是較高,它建議服務器正執行大量全索引掃描;例如,SELECT col1 FROM foo,假定col1有索引。

Handler_read_key

Both

根據鍵讀一行的請求數。若是較高,說明查詢和表的索引正確。

Handler_read_next

Both

按照鍵順序讀下一行的請求數。若是你用範圍約束或若是執行索引掃描來查詢索引列,該值增長。

Handler_read_prev

Both

按照鍵順序讀前一行的請求數。該讀方法主要用於優化ORDER BY ... DESC。

Handler_read_rnd

Both

根據固定位置讀一行的請求數。若是你正執行大量查詢並須要對結果進行排序該值較高。你可能使用了大量須要MySQL掃描整個表的查詢或你的鏈接沒有正確使用鍵。

Handler_read_rnd_next

Both

在數據文件中讀下一行的請求數。若是你正進行大量的表掃描,該值較高。一般說明你的表索引不正確或寫入的查詢沒有利用索引。

Handler_rollback

Both

內部ROLLBACK語句的數量。

Handler_savepoint

Both

在一個存儲引擎放置一個保存點的請求數量。

Handler_savepoint_rollback

Both

在一個存儲引擎的要求回滾到一個保存點數目。

Handler_update

Both

在表內更新一行的請求數。

Handler_write

Both

在表內插入一行的請求數。

Innodb_buffer_pool_pages_data

Global

包含數據的頁數(髒或乾淨)。

Innodb_buffer_pool_pages_dirty

Global

當前的髒頁數。

Innodb_buffer_pool_pages_flushed

Global

要求清空的緩衝池頁數

Innodb_buffer_pool_pages_free

Global

空頁數。

Innodb_buffer_pool_pages_latched

Global

在InnoDB緩衝池中鎖定的頁數。這是當前正讀或寫或因爲其它緣由不能清空或刪除的頁數。

Innodb_buffer_pool_pages_misc

Global

忙的頁數,由於它們已經被分配優先用做管理,例如行鎖定或適用的哈希索引。該值還能夠計算爲Innodb_buffer_pool_pages_total - Innodb_buffer_pool_pages_free - Innodb_buffer_pool_pages_data。

Innodb_buffer_pool_pages_total

Global

緩衝池總大小(頁數)。

Innodb_buffer_pool_read_ahead_rnd

Global

InnoDB初始化的「隨機」read-aheads數。當查詢以隨機順序掃描表的一大部分時發生。

Innodb_buffer_pool_read_ahead_seq

Global

InnoDB初始化的順序read-aheads數。當InnoDB執行順序全表掃描時發生。

Innodb_buffer_pool_read_requests

Global

InnoDB已經完成的邏輯讀請求數。

Innodb_buffer_pool_reads

Global

不能知足InnoDB必須單頁讀取的緩衝池中的邏輯讀數量。

Innodb_buffer_pool_wait_free

Global

通常狀況,經過後臺向InnoDB緩衝池寫。可是,若是須要讀或建立頁,而且沒有乾淨的頁可用,則它還須要先等待頁面清空。該計數器對等待實例進行記數。若是已經適當設置緩衝池大小,該值應小。

Innodb_buffer_pool_write_requests

Global

向InnoDB緩衝池的寫數量。

Innodb_data_fsyncs

Global

fsync()操做數。

Innodb_data_pending_fsyncs

Global

當前掛起的fsync()操做數。

Innodb_data_pending_reads

Global

當前掛起的讀數。

Innodb_data_pending_writes

Global

當前掛起的寫數。

Innodb_data_read

Global

至此已經讀取的數據數量(字節)。

Innodb_data_reads

Global

數據讀總數量。

Innodb_data_writes

Global

數據寫總數量。

Innodb_data_written

Global

至此已經寫入的數據量(字節)。

Innodb_dblwr_pages_written

Global

已經執行的雙寫操做數量

Innodb_dblwr_writes

Global

雙寫操做已經寫好的頁數

Innodb_log_waits

Global

咱們必須等待的時間,由於日誌緩衝區過小,咱們在繼續前必須先等待對它清空

Innodb_log_write_requests

Global

日誌寫請求數。

Innodb_log_writes

Global

向日志文件的物理寫數量。

Innodb_os_log_fsyncs

Global

向日志文件完成的fsync()寫數量。

Innodb_os_log_pending_fsyncs

Global

掛起的日誌文件fsync()操做數量。

Innodb_os_log_pending_writes

Global

掛起的日誌文件寫操做

Innodb_os_log_written

Global

寫入日誌文件的字節數。

Innodb_page_size

Global

編譯的InnoDB頁大小(默認16KB)。許多值用頁來記數;頁的大小很容易轉換爲字節。

Innodb_pages_created

Global

建立的頁數。

Innodb_pages_read

Global

讀取的頁數。

Innodb_pages_written

Global

寫入的頁數。

Innodb_row_lock_current_waits

Global

當前等待的待鎖定的行數。

Innodb_row_lock_time

Global

行鎖定花費的總時間,單位毫秒。

Innodb_row_lock_time_avg

Global

行鎖定的平均時間,單位毫秒。

Innodb_row_lock_time_max

Global

行鎖定的最長時間,單位毫秒。

Innodb_row_lock_waits

Global

一行鎖定必須等待的時間數。

Innodb_rows_deleted

Global

從InnoDB表刪除的行數。

Innodb_rows_inserted

Global

插入到InnoDB表的行數。

Innodb_rows_read

Global

從InnoDB表讀取的行數。

Innodb_rows_updated

Global

InnoDB表內更新的行數。

Key_blocks_not_flushed

Global

鍵緩存內已經更改但尚未清空到硬盤上的鍵的數據塊數量。

Key_blocks_unused

Global

鍵緩存內未使用的塊數量。你可使用該值來肯定使用了多少鍵緩存

Key_blocks_used

Global

鍵緩存內使用的塊數量。該值爲高水平線標記,說明已經同時最多使用了多少塊。

Key_read_requests

Global

從緩存讀鍵的數據塊的請求數。

Key_reads

Global

從硬盤讀取鍵的數據塊的次數。若是Key_reads較大,則Key_buffer_size值可能過小。能夠用Key_reads/Key_read_requests計算緩存損失率。

Key_write_requests

Global

將鍵的數據塊寫入緩存的請求數。

Key_writes

Global

向硬盤寫入將鍵的數據塊的物理寫操做的次數。

Last_query_cost

Session

用查詢優化器計算的最後編譯的查詢的總成本。用於對比同一查詢的不一樣查詢方案的成本。默認值0表示尚未編譯查詢。 默認值是0。Last_query_cost具備會話範圍。

Max_used_connections

Global

服務器啓動後已經同時使用的鏈接的最大數量。

ndb*

 

ndb集羣相關

Not_flushed_delayed_rows

Global

等待寫入INSERT DELAY隊列的行數。

 

Open_files

Global

打開的文件的數目。

Open_streams

Global

打開的流的數量(主要用於記錄)。

Open_table_definitions

Global

緩存的.frm文件數量

Open_tables

Both

當前打開的表的數量。

原文地址:http://www.sandzhang.com/blog/2010/04/07/mysql-show-status-explained-detail/

Opened_files

Global

文件打開的數量。不包括諸如套接字或管道其餘類型的文件。 也不包括存儲引擎用來作本身的內部功能的文件。

Opened_table_definitions

Both

已經緩存的.frm文件數量

Opened_tables

Both

已經打開的表的數量。若是Opened_tables較大,table_cache 值可能過小。

Prepared_stmt_count

Global

當前的預處理語句的數量。 (最大數爲系統變量: max_prepared_stmt_count) 

Qcache_free_blocks

Global

查詢緩存內自由內存塊的數量。

Qcache_free_memory

Global

用於查詢緩存的自由內存的數量。

Qcache_hits

Global

查詢緩存被訪問的次數。

Qcache_inserts

Global

加入到緩存的查詢數量。

Qcache_lowmem_prunes

Global

因爲內存較少從緩存刪除的查詢數量。

Qcache_not_cached

Global

非緩存查詢數(不可緩存,或因爲query_cache_type設定值未緩存)。

Qcache_queries_in_cache

Global

登記到緩存內的查詢的數量。

Qcache_total_blocks

Global

查詢緩存內的總塊數。

Queries

Both

服務器執行的請求個數,包含存儲過程當中的請求。

Questions

Both

已經發送給服務器的查詢的個數。

Rpl_status

Global

失敗安全複製狀態(還未使用)。

Select_full_join

Both

沒有使用索引的聯接的數量。若是該值不爲0,你應仔細檢查表的索引

Select_full_range_join

Both

在引用的表中使用範圍搜索的聯接的數量。

Select_range

Both

在第一個表中使用範圍的聯接的數量。通常狀況不是關鍵問題,即便該值至關大。

Select_range_check

Both

在每一行數據後對鍵值進行檢查的不帶鍵值的聯接的數量。若是不爲0,你應仔細檢查表的索引。

Select_scan

Both

對第一個表進行徹底掃描的聯接的數量。

Slave_heartbeat_period

Global

複製的心跳間隔

Slave_open_temp_tables

Global

從服務器打開的臨時表數量

Slave_received_heartbeats

Global

從服務器心跳數

Slave_retried_transactions

Global

本次啓動以來從服務器複製線程重試次數

Slave_running

Global

若是該服務器是鏈接到主服務器的從服務器,則該值爲ON。

Slow_launch_threads

Both

建立時間超過slow_launch_time秒的線程數。

Slow_queries

Both

查詢時間超過long_query_time秒的查詢的個數。

Sort_merge_passes

Both

排序算法已經執行的合併的數量。若是這個變量值較大,應考慮增長sort_buffer_size系統變量的值。

Sort_range

Both

在範圍內執行的排序的數量。

Sort_rows

Both

已經排序的行數。

Sort_scan

Both

經過掃描表完成的排序的數量。

ssl*

 

ssl鏈接相關

Table_locks_immediate

Global

當即得到的表的鎖的次數。

Table_locks_waited

Global

不能當即得到的表的鎖的次數。若是該值較高,而且有性能問題,你應首先優化查詢,而後拆分表或使用複製。

Threads_cached

Global

線程緩存內的線程的數量。

Threads_connected

Global

當前打開的鏈接的數量。

Threads_created

Global

建立用來處理鏈接的線程數。若是Threads_created較大,你可能要增長thread_cache_size值。緩存訪問率的計算方法Threads_created/Connections。

Threads_running

Global

激活的(非睡眠狀態)線程數。

Uptime

Global

服務器已經運行的時間(以秒爲單位)。

Uptime_since_flush_status

Global

最近一次使用FLUSH STATUS 的時間(以秒爲單位)。

這裏 寫個腳本統一到一個腳本文件中傳入對應的參數獲取對應的結果 (注意開頭加 #!/bin/sh)

#!/bin/sh
MYSQL_HOST=192.168.58.147
MYSQL_PORT=3306
MYSQL_UID=root
MYSQL_PWD=root

MY_COMMAD="mysqladmin -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_UID} -p${MYSQL_PWD} "
#支持 ping version qps 以及其餘狀態值
if [ ${1} = "ping" ] 
then
  MYSQL_C="${1}"
  MYSQL_STATUS=`${MY_COMMAD} ping | grep -c alive` 
  echo "${MYSQL_STATUS}"
  
elif [ ${1} = "version" ]
then
   echo   $(${MY_COMMAD} version)
elif [ ${1} = "qps" ]
then
   #QPS=查詢的總次數/上線運行的總時間   能夠經過 mysqladmin -uroot -proot status 截取最後一段 我這裏本身計算 複習下awk
   QueryCount=$(mysqladmin -uroot -proot extended-status | grep Queries | cut -f3 -d'|');
   Uptime=$(mysqladmin -uroot -proot extended-status | grep Uptime |  awk -F '|' '{if(NR==1)print $3}')   
   #echo `expr ${QueryCount} / ${Uptime}` 不支持浮點數
   echo -e ${QueryCount} \\t  ${Uptime} | awk '{printf("%.3f",$1/$2)}'
else
  echo `${MY_COMMAD} extended-status | grep ${1} | awk -F '|' '{if(NR==1)print $3}'` 
fi

參數1 能夠傳入 ping  version 以及mysql的狀態信息(添加執行權限 chmod +x ./mysql.sh) 好比

[root@node1 ~]# ./mysql.sh Com_select
194
[root@node1 ~]# ./mysql.sh Com_update
0
[root@node1 ~]# ./mysql.sh Com_delete
0
[root@node1 ~]# ./mysql.sh Com_insert
80
[root@node1 ~]# ./mysql.sh ping
1
[root@node1 ~]# ./mysql.sh version
mysqladmin Ver 9.0 Distrib 5.5.56-MariaDB, for Linux on x86_64 Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Server version 5.5.56-MariaDB Protocol version 10 Connection 192.168.58.147 via TCP/IP TCP port 3306 Uptime: 29 min 38 sec Threads: 12 Questions: 454 Slow queries: 0 Opens: 1 Flush tables: 2 Open tables: 4 Queries per second avg: 0.255

二。 zabbix配置mysql監控

  這裏爲了研究zabbix定義模板 監控項 觸發器等常見配置 因此我從頭開始創建一個模板 首先了解下自定義採集的過程
   》》 用戶自定義採集的腳本  腳本傳入一些特定的參數 來決定獲取哪些結果 結果輸出一些數字或者轉改信息用於統計
   》》 被監控的機器 須要安裝zabbix-agent 同時配置調用自定義腳本已經傳入的參數信息
   》》在zabbit-server端嘗試使用zabbit-get測試agent定義的參數是否能正常獲取數據
   》》 在web界面添加主機 對應的監控項以及圖表 觸發器等

演示環境
    

192.168.58.152  zabbix-server和zabbix-web  
192.168.58.147 zabbix-agent 被監控的mysql主機
1》自定義監控腳本
   章節1 已經給出 
2》安裝mysql數據庫+zabbix-agent
  安裝mariadb 安裝過程參考(http://blog.csdn.net/liaomin416100569/article/details/78580382)
  安裝zabbix-agent 參考(http://blog.csdn.net/liaomin416100569/article/details/78672475)
  zabbix-server和zabbix-web參考(http://blog.csdn.net/liaomin416100569/article/details/78663086)

 配置zabbix-agent調用自定義腳本  
 zabbix使用 UserParamerter指定 定義監控項和腳本間的調用關係  好比
 UserParameter=web監控項名稱(在web上定義key名稱), 調用的命令
 修改配置文件 (/etc/zabbix/zabbix_agentd.conf) 【注意key名稱 我使用mysql.沒法啓動不知爲什麼】

Server=192.168.58.152
ServerActive=192.168.58.152
Hostname=MysqlMonitor
UserParameter=mysqlm.ping, /root/mysql.sh ping
UserParameter=mysqlm.version, /root/mysql.sh version
UserParameter=mysqlm.qps, /root/mysql.sh qps
UserParameter=mysqlm.status[*], /root/mysql.sh $1
AllowRoot=1  #不設置 默認的帳號zabbix無權限執行
3》使用zabbix-get測試
  在152服務器安裝 zabbix-get
[root@bogon ~]# yum -y install zabbix-get
測試
[root@bogon ~]# zabbix_get -s 192.168.58.147 -k mysqlm.ping
sh: /root/mysql.sh: Permission denied
發現已經調用 說沒有權限執行mysql.sh 後面到147上發現zabbix-agent是以zabbix帳號運行的將腳本的全部者 賦給zabbix 將AllowRoot=1設置
[root@bogon ~]# zabbix_get -s 192.168.58.147 -k mysqlm.ping
1
[root@bogon ~]# zabbix_get -s 192.168.58.147 -k mysqlm.version
mysqladmin Ver 9.0 Distrib 5.5.56-MariaDB, for Linux on x86_64 Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Server version 5.5.56-MariaDB Protocol version 10 Connection 192.168.58.147 via TCP/IP TCP port 3306 Uptime: 1 hour 25 min 18 sec Threads: 12 Questions: 1650 Slow queries: 0 Opens: 1 Flush tables: 2 Open tables: 4 Queries per second avg: 0.322
[root@bogon ~]# zabbix_get -s 192.168.58.147 -k mysqlm.status[Com_select]
571
4》zabbix-web添加主機和監控項
  》》建立mysql模板
  點擊配置-模板-右上角 添加


》》添加監控項
   再次進入全部模板列表點擊列表中的監控項 進入
 
進入監控項列表 右上角 添加 彈出窗口
 這裏 我就監控 四個數據 版本號(verson)  是否存活(ping) 每秒查詢次數(Queries/Uptime)  鏈接線程數(Threads_connected)
版本號監控項以下

是否存活 監控項

Qps監控項:


鏈接線程數(key是 mysqlm.status["Threads_connected"])圖片上填錯

mysql服務時間(key是 mysqlm.status["Uptime"])圖片上填錯

》》添加主機

  點擊 配置 -主機 -右上角添加主機
 

模板頁簽上選擇咱們自定義的模板 注意點擊下面的超連接添加


最後點擊主機界面下角的添加 列表中出現mysql監控的主機  點擊圖形

好比添加一個qps的圖形

圖形類別中 若是須要用其餘圖形能夠選擇圖形類別
預覽一下 看效果

也能夠點擊 檢測中 - 圖形 進入查看對應 主機的圖形  其餘幾個線程數 本身添加便可 

mysql.ping主要用於判斷mysql是否掛掉 須要配置觸發器 當mysql.ping=0時 發郵件通知管理員
5》發送郵件預警
  藉助mailx來配置第三方郵件發送郵件 
安裝 mailx

yum -y install mailx
查看mailx全部文件
[root@node1 ~]# rpm -ql mailx-12.5-16.el7.x86_64
/bin/mail
/bin/mailx
/etc/mail.rc
/usr/bin/Mail
/usr/bin/nail
/usr/share/doc/mailx-12.5
/usr/share/doc/mailx-12.5/AUTHORS
/usr/share/doc/mailx-12.5/COPYING
/usr/share/doc/mailx-12.5/README
/usr/share/man/man1/Mail.1.gz
/usr/share/man/man1/mail.1.gz
/usr/share/man/man1/mailx.1.gz
/usr/share/man/man1/nail.1.gz
修改/etc/mail.rc添加發送帳號的郵箱地址 smtp服務器 以及用戶名和密碼(我這裏使用了126 由於126默認開啓了smtp qq必須二次密保才能開 麻煩)
set from=lixin1112003@126.com 
set smtp=smtp.126.com
set smtp-auth-user=lixin1112003
set smtp-auth-password=你的郵箱密碼
set smtp-auth=login
嘗試 發送郵件
echo "郵件內容" |mail -s "郵件標題" 接受郵箱地址
好比個人測試 
echo "zabbix郵箱測試" |mail -s "測試郵箱是否正常發送" 973465719@qq.com
登陸qq郵箱 發現該郵件被自動丟進了垃圾箱

查看zabbix-server默認的報警腳本存在未知 ( /etc/zabbix/zabbix_server.conf )
AlertScriptsPath=/usr/lib/zabbix/alertscripts
建立一個sm.sh內容*
echo "$3" |mail -s "$2" $1
添加權限測試
cd /usr/lib/zabbix/alertscripts
chmod +x ./sm.sh
 ./sm.sh lixin1112003@126.com hello jiaozi
web界面添加報警媒介類型 點擊 管理-報警媒介類型 修改email


用戶 添加報警媒介 點擊管理-用戶-點擊|Admin進入-點擊報警媒介  輸入須要接受報警郵件的郵箱地址

主機添加觸發器  點擊配置 主機 點擊mysql監控列表中的 觸發器


新建一個mysql觸發器(什麼條件知足就觸發 mysql的ping爲0表示mysql掛了 須要觸發)

配置動做 觸發器觸發後須要做出一些動做 好比通知哪些用戶 點擊配置-動做 -右上角新建觸發器
動做頁籤 用於輸入 知足什麼觸發器條件 

操做 頁籤表示出現異常後的 發送消息的格式 以及通知的用戶(用戶配置了報警媒介 )


恢復操做 同操做
測試關閉 147的數據庫

service mariadb stop
點擊web界面的log進入首頁

肯定出現狀態 也經過fox接受到了郵件

最後查看儀表盤 發現動做狀態由啓用中 - 完成  也能夠試着重啓一下 mariadb 看是否也有郵件提醒

相關文章
相關標籤/搜索