1. 程式人生 > >分散式系統監視zabbix講解六之自定義監控項--技術流ken

分散式系統監視zabbix講解六之自定義監控項--技術流ken

除了支援開箱即用的巨集之外,Zabbix 還支援更靈活的使用者巨集。

使用者巨集可以在全域性、模板和主機級別進行定義。這些巨集具有一個特殊的語法:

{$MACRO}

使用者巨集可被用於:

  • 監控項名稱;
  • 監控項鍵值引數;
  • 觸發器名稱和描述;
  • 觸發器表示式引數和常量;
  • 許多其他位置;

巨集名稱中允許使用以下字元:A-Z , 0-9 , _ , . 。

Zabbix 根據以下優先順序解析巨集:

  1. 主機級別的巨集 (首先檢查);
  2. 為主機的第一級別模板定義的巨集(即,直接連結到主機的模板),按照模板 ID 來排序;
  3. 為主機的第二級別模板定義的巨集,按照模板 ID 來排序;
  4. 為主機的第三級別模板定義的巨集,按照模板ID來排序,等;
  5. 全域性巨集 (最後檢查)。

換言之,如果一個主機不存在一個巨集, Zabbix 將會嘗試在級別遞增的主機模板中找到它,如果仍然找不到,那麼將會使用全域性巨集(如果全域性巨集存在的話)。

如果 Zabbix不能找到巨集, 那麼巨集將不能被解析。

如果要定義使用者巨集,請轉到Zabbix的前端頁面的如下位置:

  • 對於全域性巨集,請訪問 管理 → 常規 → 右上角下拉選單選擇 “巨集” 
  • 對於主機和模板級別的巨集,請開啟主機或模板屬性並檢視 巨集 標籤頁面。

認識userparameter_mysql.conf檔案

這個檔案在zabbix客戶端的子目錄下,如果你想要自己來設定監控項的話,參考這個檔案即可。

[[email protected] ~]# ls /etc/zabbix/zabbix_agentd.d/
testuser.conf             userparameter_mysql.conf  

現在我們來開啟它,看一下具體內容

[[email protected] ~]# vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
# For all the following commands HOME should be set to the directory that has .my.cnf file with password information.

# Flexible parameter to grab 
global variables. On the frontend side, use keys like mysql.status[Com_insert]. # Key syntax is mysql.status[variable]. UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}' # Flexible parameter to determine database or table size. On the frontend side, use keys like mysql.size[zabbix,history,data]. # Key syntax is mysql.size[<database>,<table>,<type>]. # Database may be a database name or "all". Default is "all". # Table may be a table name or "all". Default is "all". # Type may be "data", "index", "free" or "both". Both is a sum of data and index. Default is "both". # Database is mandatory if a table is specified. Type may be specified always. # Returns value in bytes. # 'sum' on data_length or index_length alone needed when we are getting this information for whole database instead of a single table UserParameter=mysql.size[*],bash -c '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=/var/lib/zabbix mysql -N' UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive UserParameter=mysql.version,mysql -V

可以看到這個檔案裡面只有四行是生效的,其餘的都已經被註釋掉了。現在我們來過濾出來這幾行

[[email protected] ~]# cp /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf{,bak} #對檔案做一個備份
[[email protected] ~]# grep -E -v '^#|^$' /etc/zabbix/zabbix_agentd.d/userparameter_mysql.confbak > /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf #過濾出註釋行和空白行
[[email protected] ~]# vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}' #檢視資料庫狀態
UserParameter=mysql.size[*],bash -c '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=/var/lib/zabbix mysql -N' #檢視資料庫空間大小
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive #檢視資料庫是否線上
UserParameter=mysql.version,mysql -V #檢視資料庫版本資訊

自定義監控專案

 現在我們已經瞭解了整個檔案的書寫格式,即

1. UserParameter=key,command

2.UserParameter=key[*],command

兩種格式的區別即第一個不能接受使用者引數,第二個可以接受變數,更加靈活。

現在我們一一來實現,直觀感受下效果。

1. UserParameter=key,command 應用示例

第一步:進入到子目錄下,建立一個testyserp.conf (檔名無所謂,你也可以把你自己設定的寫進上面那個檔案中,都是可以的。)

[[email protected] ~]# cd /etc/zabbix/zabbix_agentd.d/
[[email protected] zabbix_agentd.d]# touch testuserp.conf

第二步:寫入你要監控的內容,這裡我監控的是記憶體的總量,記憶體的使用量,以及記憶體剩餘量。

[[email protected] zabbix_agentd.d]# vim testuserp.conf
UserParameter=check.totalmem,free -m| awk -F ' +' 'NR==2{print $2}'
UserParameter=check.usedmem,free -m| awk -F ' +' 'NR==2{print $3}'
UserParameter=check.freemem,free -m| awk -F ' +' 'NR==2{print $4}'

第三步:重啟zabbix客戶端

[[email protected] zabbix_agentd.d]# systemctl restart zabbix-agent

第四步:在zabbix中新增監控項,configure>hosts>items>create item,上面檔案中定義的三個key一一複製進去,點選add儲存即可,建立三個監控項

第五步:檢視。monitoring>latest data>select,選擇你的組即可檢視

你可以把它們顯示在一張圖形中 前面白色方框內選中>display graph

2.UserParameter=key[*],command應用示例

 還是進入到客戶端的子目錄下,建立一個檔案用來儲存自定義的監控項

[[email protected] ~]# cd /etc/zabbix/zabbix_agentd.d/
[[email protected] zabbix_agentd.d]# touch test.conf

寫入我們想要的監控專案。寫成如下格式,這樣我們就可以來接收引數了。

[[email protected] zabbix_agentd.d]# vim test.conf
 UserParameter=check.meminfo[*],cat /proc/meminfo | awk -F " +" '/$1/{print $$2}'

重啟zabbix-agent客戶端

[[email protected] zabbix_agentd.d]# systemctl restart zabbix-agent

現在把check.meminfo這個key寫進zabbix的key當中。

監控SwapTotal總量

監控SwapFree

 新增完之後就可以去monitoring > latest data > select 你的application

 選中,選擇display graph.檢視圖形介面

 

結言

學會了上面的自定義監控,想要監控什麼你是不是都可以做到了那? 只要記住格式,會使用命令來獲取你想要的結果,即可自定義監控項,以數字或者圖形化介面顯示出來。