介紹企業級分布式監控zabbix的一些常用特性
本文主要從一個項目部署的角度一步一步來介紹zabbix的一些常用特性,希望對于那些想利用zabbix來做監控的初學者,能夠在短時間內快速上手
前言
zabbix是一個基于WEB界面的提供分布式系統監控以及網絡監視功能的企業級開源解決方案。zabbix能監視各種網絡參數,保證服務系統的安全運營,并提供柔軟的通知機制以快速定位/解決存在的各種問題,是系統運維的常用神器之一。
兩周前,向老板提出自己的一個建議,想在我們自己的開發測試環境里,搭建一套zabbix系統,把Local的環境監控起來。之所以有這個想法,主要基于以下幾點:
-
曾經多次花時間debug一些問題,最后發現是環境問題,如某個服務起不來,最后發現是磁盤空間不夠,etc。很多時候重復的去做一些重復的事情,更加浪費人力和時間
-
產品的運維部在美國,production環境配備有一套完整的產品配置管理和監控系統(cfengine+zabbix)
-
通過Zabbix,可視化項目中各種KPI,出現故障時,能夠有效的第一時間定位和分析
以前利用閑暇時間了解和簡單用過Nagios,因為沒有項目作支撐,沒有深入研究,但對于系統監控有個基本的了解。這次研究和搭建zabbix基本沒有花太多的時間。半天時間zabbix的安裝和部署。一個星期不到完成zabbix的學習,項目監控。
網上搜索zabbix的文章一大堆,很多的都是把zabbix官網文檔的某個特性,某個應用稍做翻譯而已。感覺有點零散,不夠系統。如果你想很深入的了解zabbix的特性,建議直接看zabbix官網的英文文檔(http://www.zabbix.com/documentation/)。本文主要從一個項目部署的角度一步一步來介紹zabbix 2.2,希望對于那些想利用zabbix來做監控的初學者,在短時間內快速上手。
1 項目+zabbix
1.1 zabbix能做什么
簡單點說,zabbix是一個監控數據的收集器和dashboard。監控數據中通用的數據可以由zabbix agent本身來負責收集。對于應用數據,需要應用本身提供。zabbix提供接口給第三方應用負責收集和做可視化。
zabbix能監控:
-
CPU負荷
-
內存使用
-
磁盤使用
-
網絡狀況
-
監控的各種應用KPI(產品環境下,這才是我們想用zabbix的真正原因)
-
...
1.2 zabbix常用術語
zabbix操作很簡單,如果你能深入理解這些術語,甚至都不需要教程,主機web界面多點點,多玩玩。無師自通。
-
Host, Host group, User, User group
-
Item: host的監控數據定義最小單元
-
Application:包含Item。一組Item可以定義成一個Application
-
Trigger: 觸發器,監控的Item達到一定的條件時觸發
-
Template: 由Application, Item, Graph, Screen, Trigger等組成
-
Map:網絡主機拓撲可視化
-
IT Service: 了解服務器的SLA情況
1.3 zabbix安裝配置
zabbix server上安裝zabbix-server組件,被監控主機上安裝zabbix-agent, zabbix-sender
官網提供兩種方式安裝,任選其一即可。我比較傾向于從packages安裝,簡單快速(快一點一兩個小時,慢一點半天到一天。)。由于每個安裝環境不可能保證一樣,難免會遇到些安裝錯誤問題。一句話:有什么錯誤,直接google,你遇到的問題,別人早就遇到過了。
-
Install from packages: https://www.zabbix.com/documentation/2.2/manual/installation/install_from_packages
-
Install from sources: https://www.zabbix.com/documentation/2.2/manual/installation/install
1.4 創建用戶組和主機監控組
zabbix安裝好了后,打開zabbix web頁面(http://ZABBIX-SERVER-IP/zabbix)。我們可以根據項目信息(項目組成員,項目中需要被監控的機器,etc)來創建用戶組,用戶,主機監控組,主機。創建用戶組和主機監控組,是為了方便項目的擴展和管理。
1.4.1 創建主機監控組和主機
-
創建主機組入口:Configuration -> Host groups -> Create host group
-
創建主機入口:Configuration -> Hosts -> Create host
1.4.2 創建用戶組和用戶
-
創建用戶組入口:Administration -> Users -> Create user group
-
創建用戶入口:Administration -> Users -> Create user
將主機加入到主機組,將用戶加入到用戶組。制定用戶組到主機組的讀寫權限。主機填寫時,根據Host類型鏈接相應的template,如Template_OS_Linux(可以完成對主機CPU/Memory/Disk/Network的監控)
1.5 實現主機基本監控
接下來配置下被監控主機:
#vim /etc/zabbix/zabbix_agentd.conf Server = #ZABBIX SERVER IP Hostname = #創建主機時第一個元素Host name,不是主機的hostname
配置完后,重啟zabbix-agent。通過zabbix web頁面我們,我們可以看到該主機的一些基本監控信息(CPU/Memory/Disk/Network)數據了。該主機已經被監控起來了。
1.6 如何自定義監控數據
通過1.4我們已經實現了對主機一些基本系統信息的監控。這一節進一步擴展如果監控自定義的數據,如mysql的讀寫性能,項目中我們關心的一些組件KPI等。
常用的兩種數據定義類型:zabbix agent和zabbix trapper。因此方法也相應的有兩種。下面以監控磁盤/dev/sda的disk IO讀寫速度為例。
1.6.1 zabbix agent:UserParameter
-
創建監控item: Configuration -> Hosts -> Create item(主要選項如下)
-
Type => zabbix agent
-
Key => custom.vfs.dev.read.sectors[sda]
-
被監控主機上配置相應的UserParameter
#vim /etc/zabbix/zabbix_agentd.conf UserParameter=custom.vfs.dev.read.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$6}'
實際項目中,可以把UserParameter寫到/etc/zabbix/zabbix_agentd(根據Include可配置)的一個新文件。磁盤讀速度通過一行shell腳本取得。對于復雜點數據的獲取,可以編寫相應的腳本完成。
重啟zabbix-agent后,我們可以看到web頁面已經加入了對用戶自定義的磁盤/dev/sda讀的監控。
1.6.2 zabbix trapper
與zabbix agent方式不同的時,zabbix trapper是由被監控機器主動向zabbix server發送數據。因此不需要安裝zabbix agent。也不需要配置host。只需要發送數據即可。
-
創建監控item: Configuration -> Hosts -> Create item(主要選項如下)
-
Type => zabbix trapper
-
Key => custom.vfs.dev.write.sectors[sda]
-
被監控主機上,取得磁盤/dev/sda寫數據后,通過zabbix_sender發送給zabbix server
zabbix_sender -z ZABBIX_SERVER_IP -k custom.vfs.dev.write.sectors[sda] -o 數據值 -s 被監控主機Host name
zabbix_sender是zabbix項目中得一個客戶端。這里,我們當然不一定需要通過zabbix_sender發送給zabbix server。我們可以自己寫一個zabbix sender功能模塊利用zabbix sender協議。這里有一篇很好的文章關于zabbix sender協議介紹和一個用Python實現zabbix sender的模塊(http://itnihao.blog.51cto.com/1741976/1343670)。
1.7 批量導入監控數據
通過1.6,對于一般項目進行簡單的監控基本沒太大的障礙。實際項目當中,很多的監控數據腳本,監控數據定義可以拿來直接應用,沒必要重新造輪子。還是拿磁盤disk io為例,監控數據的獲取方法通用,我們沒必要每個item都自己定義,自己獲取。圈內很多好心人在網上把這些數據以模板方式共享。因此我們直接導入,然后把我們需要監控這disk io的主機鏈接這個模板就可以了。這樣就可以完成zabbix server段批量數據的導入。這里有個很好的例子(http://www.muck.net/19/getting-hard-disk-performance-stats-from-zabbix)
1.8 數據可視化
通過web頁面Monitoring下面的子項Overview或Latest data我們可以查看到最新和歷史的監控數據。但總感覺還少了點什么,如果能夠講這些數據已圖形,表格或者其他方式更加直觀的方式顯示就更好了。zabbix可以幫我們做到,把這些數據繪制成圖形。
1.8.1 Create Graph | Create Screen | Create Slide shows
-
模板創建圖形:Configuration -> Templates -> Graphs -> Create graph
-
Host創建圖形:Configuration -> Hosts -> Graphs -> Create graph
-
創建Screen:Configuration -> Screens -> Create screen
-
創建Slide shows: Configuration -> Slide shows -> Create slide show
在模板里創建圖形,每個鏈接了該模板的host都會自動加入創建的圖形。
Host里創建圖形,只有該Host才會加入該圖形。
Screen是可以由Graph,issue, Map等組成。
Slide shows由Screen組成。
1.9 報警通知和采取行動
當你在用zabbix監控一個實際項目時。web界面有數據,有圖形,看上去很美。但還不夠。真正發現問題時,我們希望zabbix能夠及時報警通知和采取一定的行動。當然,這些都是zabbix擅長的。
用戶場景:
我們的某個應用A會在/log/下產生大量的log文件,慢慢的會把磁盤空間占滿。我們希望zabbix能幫我們監控/log/下空間大小,當空間大小大于一定值的時候,我們希望能夠收到一份email通知,刪掉以前的log,只保留一份正在被寫得log文件。
步驟:
-
創建一個監控/log使用空間的item。key = vfs.fs.size[/log,used]
-
創建一個trigger,關聯上這個item,當使用空間大于給定的閾值時就回觸發
-
創建一個action,把發送email和執行刪除文件操作(Remote command)兩個動作和trigger關聯起來
具體創建trigger和action直接看zabbix官方文檔,很簡單。
總結
寫著寫著,突然發現沒有附上一個截圖。對于這種工具類型的文章,沒圖顯然不夠直觀。回想這幾天自己邊學邊用心得,當時其實更多的是希望有這樣一篇項目向導性質的文章整體了解zabbix。一些具體的操作,對于一個搞IT的人來說,有針對性的看看官方文檔,應該是一件很簡單的事情。好吧,王婆賣瓜自賣自夸。不管怎么樣。還是希望對想用zabbix來做監控的人有點幫助。
結合我們production環境里zabbix的配置和監控項目,本文從一個項目的角度來分享部分zabbix的特性,對于普通的項目,足夠了。如果你想深入了解zabbix。請看zabbix官方文檔。
來自:http://my.oschina.net/hjh188/blog/396546