Zabbix是一個企業級的開源分佈式監控解決方案,由一個國外的團隊持續維護更新,軟件能夠自由下載使用,運做團隊靠提供收費的技術支持贏利。官方網站:http://www.zabbix.com官方文檔:http://www.zabbix.com/documentation/2.0/manual/quickstart。Zabbix經過C/S模式採集數據,經過B/S模式在web端展現和配置。php
Zabbix運行條件:html
Server:Zabbix Server需運行在LAMP(Linux+Apache+Mysql+PHP)環境下,對硬件要求低。mysql
Agent:目前已有的agent基本支持市面常見的OS,包含Linux、HPUX、Solaris、Sun、windows。linux
SNMP:支持各種常見的網絡設備web
1.2 Zabbix功能sql
具有常見的商業監控軟件所具有的功能(主機的性能監控、網絡設備性能監控、數據庫性能監控、FTP等通用協議監控、多種告警方式、詳細的報表圖表繪製)支持自動發現網絡設備和服務器;支持分佈式,能集中展現、管理分佈式的監控點;擴展性強,server提供通用接口,能夠本身開發完善各種監控。數據庫
1.3 優劣勢apache
優勢:開源,無軟件成本投入;Server對設備性能要求低(實際測試環境:虛擬機CentOS5,2GCPU 1G內存,監控5臺設備,CPU使用率基本保持在10%如下,內存剩餘400M以上);支持設備多;支持分佈式集中管理;開放式接口,擴展性強。windows
缺點:中文資料較少。緩存
Server:指安裝zabbix服務的服務器(如下簡稱服務器端),是最重要的部份,主要安裝在linux系統上(支持多種操做系統),採用mysql存儲監控數據並使用apache+php的方式呈現。
Agent:指安裝在被監控設備上的zabbix代理(如下簡稱代理),被監控設備上的數據由代理收集後統一上傳到服務器端由服務器端收集、整理並呈現。
SNMP:也是agent的一種,指支持SNMP協議的設備(也能夠是服務器),經過設定SNMP的參數將相關監控數據傳送至服務器端(大部份的交換機、防火牆等網絡設備都支持SNMP協議)。
IPMI:Agent的另外一種方式,主要應用於設備的物理性能監控,例如設備的溫度、風扇的轉速等。
Zabbix支持多種網絡方式下的監控,可經過分佈式的方式部署和安裝監控代理,整個架構如(圖1、圖四)所示。
圖一:架構圖
圖四:架構圖
Zabbix安裝後服務端默認的配置文件存在安裝文件夾中的/etc中,假設編譯的參數是「—prefix=/usr/local/zabbix」,那麼服務端的配置文件則在「vi /usr/loca/zabbix/etc/」。如圖二所示。
圖二:配置文件
主要的配置文件兩個:「zabbix_server.conf」負責服務器端的設定;「zabbix_agent.conf」用來設置客戶端代理參數;「zabbix_proxy.conf」用來設定分佈式的部署。
Zabbix_server.conf中的參數比較多,設定值的跨度也很大,這裏僅列出經常使用的一些參數。如圖三所示。Zabbix_server.conf參數除了保證服務正常運行外還涉及該服務器的性能,若是參數設定不合理可能會致使zabbix添加主機不正常、代理端數據沒法正常收集或是zabbix服務器性能嚴重降低,常常報告CPU佔用太高或是IO佔用太高等問題。
圖三:zabbix_server.conf
DBName=zabbix zabbix所屬數據庫名稱 DBUser=zabbix zabbix所屬數據庫用戶 DBPassword=www.xxxxxx.com zabbix數據庫密碼 StartPollers=30 輪詢的初始值(0-1000) StartIPMIPollers=4 IPMI輪詢的初始值(0-1000) StartPollersUnreachable=30 輪詢不可達的主機數(包括IPMI 0-1000) StartTrappers=8 捕獲的初始值(0-1000) StartPingers=4 ping的初始值(0-1000) StartDiscoverers=0 自動發現的初始值(0-250) CacheSize=384M 緩存大小 CacheUpdateFrequency=300 緩存更新的頻率 StartDBSyncers=8 數據庫同步時間 TrendCacheSize=128M 總趨勢緩存大小 AlertScriptsPath=/usr/bin 腳本的存放位置 LogSlowQueries=1000 日誌慢查詢設定 |
Zabbix_agent.conf用來配置代理的參數,該文件中須要更改的地方比較少,僅更改幾個經常使用的參數就好了(linux的agent和windows的都差很少,大同小異,如下的說明以windows爲例)。如圖五所示。
LogFile=c:\zabbix\zabbix_agentd.log 日誌文件的存放位置 Server=192.168.0.189 zabbix服務器的IP Hostname=192.168.0.13 被監控機的IP |
須要注意的是代理端的設定參數「Hostname=192.168.0.13」要和配置時填入的主機名稱一致,否則日誌中將會報「host {主機名}not found」的錯誤。如(圖6、七)所示。
圖五:zabbix_agent.conf
圖六:主機名不一致的錯誤提示
圖七:填入正確的主機名
Zabbix須要在被監控的host上安裝agent,在zabbix官網上下載相應平臺的agent包到各被監控端,按以下方式在被監控上運行agent。(注:官網上下載的agent包裏沒有運行agentd所必須的配置文件,能夠從zabbix server上拷貝一份zabbix_agentd.conf,這個conf文件是全部平臺都通用的)
2.6.1 Linux Agent安裝
Linux、UNIX上的agent是編譯好了的,不用編譯安裝。(圖八)
- useradd zabbix
- cd /usr/local/zabbix
- tar zxvf zabbix_agents_1.8.linux2_6.i386.tar.gz
圖八:agent安裝
取一份server上的zabbix_agnetd.conf到本地,而後按說明修改,通常咱們只需修改2.5中的三個參數。修改完成後,運行agentd。
- /usr/local/zabbix/sbin/zabbix-agentd –c /usr/local/zabbix/zabbix_agentd.conf &
- ps –ef|grep zabbix_agentd
若是進程沒起來,可查看agentd.log日誌來排查問題。(注:啓動時建議用全路徑,不然可能會出錯),加入開機運行。
- echo ‘/usr/local/zabbix/sbin/zabbix-agentd –c /usr/local/zabbix/zabbix_agentd.conf &‘ >>/etc/rc.local
2.6.2 Windows agent安裝
Windows下解壓客戶端包到c:\zabbix,下載修改好的zabbix_agentd.conf文件也放到c:\zabbix,打開cmd命令行,執行:
- zabbix_agentd -c "c:\zabbix\zabbix_agentd.conf" -i
- zabbix_agentd -c "c:\zabbix\zabbix_agentd.conf" -s
安裝後會在系統服務裏添加一個zabbix_agentd服務(圖九),會自動開機運行。若是須要將卸載客戶端,請執行(圖十):
- zabbix_agentd -c "c:\zabbix\zabbix_agentd.conf" -x
- zabbix_agentd -c "c:\zabbix\zabbix_agentd.conf" –d
圖九:zabbix agent服務
圖十:zabbix agent服務卸載、安裝命令
Zabbix的maps用來圖形化顯示監控設備的拓撲圖,而且以不一樣的標記顯示故障事件,經過該圖表很直觀的顯示設備的總體狀況。系統默認的圖標比較簡陋,如圖十一所示。經過更改系統自帶的圖標讓監控顯示更加直觀、方便(圖十二)。
首先下載Icon圖標,經過http://www.zabbix.com/forum/p_w_upload.php?p_w_uploadid=1855&d=1239079235下載圖標庫並壓至相關目錄。
圖十一:默認的maps圖
圖十二:新maps圖
- unzip zabbix_icons_set_generic.zip
- unzip make_img_insert_sql.sh.gz
- sh make_img_insert_sql.sh ./48 1000
- mv my_p_w_picpaths_mysql.sql my_p_w_picpaths_mysql_48.sql
- sh make_img_insert_sql.sh ./128 2000
- mv my_p_w_picpaths_mysql.sql my_p_w_picpaths_mysql_128.sql
- cat my_p_w_picpaths_mysql_48.sql |mysql -u zabbix -p zabbix
- cat my_p_w_picpaths_mysql_128.sql |mysql -u zabbix -p zabbix
指令執行後可能出現128_g_router_off.png、128_g_router_on.png、128_g_router_unknown.png這三個文件的錯誤提示,對於這三個文件能夠直接經過web方式更改提交。
短信提醒功能(圖二十)可讓運維團隊在第一時間瞭解故障,讓系統管理人員快速定位、解決故障。如下是詳細步驟:
3.2.1 新建短信發送腳本
對於能夠通http方式發送短信的方式均可以參考該腳本,這個例子中平常的短信發送都是經過windows平臺發送,這裏把它轉換成了linux下可用的腳本(圖十三)。這裏經過「curl」指令來實現http的操做,隨後通後「iconv」指令實現編碼轉換(utf8轉gbk編碼),不然可能出現收到短信是亂碼的狀況。
需注意的是該腳本的存放位置要和2.4中的腳本存放位置一致。
- #!/bin/sh
- IFS=""
- sms="http://x1.xxxxxxxx.cn/gbk/interface/send_sms.aspx?username=xxxxxx&password=yyyyyy&receiver=$1&content=$2,$3"
- echo $sms|tr ' ' '.'|iconv -f utf8 -t gbk >/tmp/sendsms.in
- cont=`cat /tmp/sendsms.in`
- curl $cont -s -o /tmp/sendsms.log
圖十三:sendsms.sh圖
3.2.2 增長報警方式類型
進入zabbix的WEB管理頁面,在「Administration」---「Media types」,新建一個告警方式類型,描述欄填寫「message send by mobile」,類型欄選擇「Script」,Script name欄填寫「sendsms.sh」,勾選「enable」單擊保存按鈕。(圖十四)
圖十四:media types圖
3.2.3 增長報警通知的用戶
進入zabbix的WEB管理頁面,在「Administration」---「Users」—「Create user」進入新建用戶頁面,在該頁面中選擇「Media」選擇新建報警類型「add」。設置告警方式爲「message send by mobile」,在send to欄中設置接收報警的手機號碼,在相應的欄中設定事件的等級(N未分級、I信息、W警告、A平均、H高、D害難)和工做時間,點擊保存。(圖十五)
圖十五:user圖
3.2.4 增長報警動做
進入zabbix的WEB管理頁面,在「Configuration」---「Actions」—「Create action」進入新建動做頁面,在該頁面中共包含三項目內容:
「Action」指報警動做的名稱、報警週期、標題、詳細內容及故障恢復時的報警標題和內容。這裏須要注意的是標題和內容不能太長,否則一條短信沒法定遠整顯示(圖十6、十七分別表示action默認的內容和精簡後的內容)。在標題和內容中均可以使用zabbix中自定義的宏。常見的宏有如下內容:
{HOST.CONN} 主機IP地址 {TRIGGER.NAME} 觸發事件名稱 {TRIGGER.STATUS} 事件觸發狀態 {TRIGGER.SEVERITY} 事件觸發級別 {ITEM.NAME1} 監控項的名稱 {ITEM.KEY1} 監控項的參數 {ITEM.VALUE1} 監控項目的值 |
圖十六:默認action圖
圖十七:修改的action圖
「Conditions」指知足條件的主機。「Type of calculation」指的是條件的集合,分爲兩種:「AND」指條件必須同時知足,「OR」指知足其中的一個條件就能夠。「Conditions」指知足條件的主機。圖十八所表達的意思是:「當主機的狀態不是「維護」而且主機已經觸發「問題」而且主機組等於「project3 group」時的全部設備」。
圖十八:報警條件
「Operations」指對於知足條件的主機所採起的操做(圖十九)。選擇正確的發送週期「step」,默認爲0,「operation type」指的是操做方式,可選擇發送信息和執行遠程指令;「send user groups」指發送的用戶組;「send to users」發送到的用戶;「send only to」採用的具體發送方式。
圖十九:報警操做
以上的這些設定好後就點「save」保存,當知足條件的主機觸發報警時相關的用戶就會收到短信提醒(圖二十)。
圖二十:短信提醒
Host是Zabbix監控的基本載體,全部的監控項都是基於host的。經過Configuration->Hosts->Create Host來建立監控設備(圖二一)。
圖二一:HOST
按提示填入Host name、Groups、IP ,其餘選項默認便可,Link Templates 處選擇一個模板,save便可成功添加設備。(注:若是host上沒安裝agent,添加後的狀態會是unmonitor,會採集不到值,Zabbix自帶大量的設備監控模板,咱們添加主機時經過link到這些模板,就能夠快速添加主機的監控項和告警觸發條件。)
一類的hosts能夠歸屬到同一個Host Group,便於分類管理同一類設備,在Configuration->Host Group->Create Host Group 能夠添加設備組。
Item是監控項,是監控的基本元素,每個監控項對應一個被監控端的採集值。(圖二2、二三)
在Configuration->Hosts界面,咱們能看到每一個host所包含的items總數,點擊對應主機的items項,能夠看到具體的每一個item信息,這些items能夠引用自templates,也能夠本身建立。
圖二二:ITEM
經過點擊具體item名字能夠修改已有監控項的屬性,點擊Satus的連接能夠禁用/啓用這個監控項。(注:咱們能夠經過新建一個template,在template中禁用掉全部不須要用到的items,而後把同一類hosts link to這個template,就不用一臺臺主機去更改items)新增item能夠經過點擊右上角的create item來建立。
圖二三:ITEM圖
按提示逐項填入相關信息便可,其中key是zabbix已經自帶的取值方法,Application相似於host groups,是item的組。(item key也能夠自定義,後面會講到如何自定義監控項)。
Trigger是觸發器,當Items採集值知足triggers的觸發條件時,就會產生actions。(圖二4、二五)每個trigger必須對應一個item,但一個item能夠對應多個trigger。
一樣,經過點擊Configuration->Hosts->Triggers中某個trigger的名字,能夠修改trigger的屬性。(注意:引用自template的trigger觸發值是不能單獨修改的,必須在template中修改,或是複製一個一樣的trigger再修改,而後禁用掉以前的)新增trigger能夠經過點擊右上角的create trigger來建立。
圖二四:Triggers圖
圖二五:Triggers圖
Expression中選擇對應的item、觸發方式及觸發值,Severity是告警級別,根據trigger的嚴重性來選擇。Zabbix 提供多種trigger觸發方式供選擇,經常使用的咱們能夠選擇last value </>/=/#/N(最近一次採集值),或是選擇maximal value for period of time (一段時間內的最大值),等等。能夠根據實際須要來設定觸發方式。
Zabbix的Graphs功能很強大,能夠爲每個item繪製圖表,也能夠把多個items繪製在一張圖表內。經過configuration->hosts選擇要繪製圖表的host,點擊graphs,create graphs便可建立圖表。(圖二6、二七)
圖二六:graph圖
圖二七:graph圖
Graph type:圖表樣式,有線狀、柱狀、餅狀;還能夠自定義圖表大小,及Y軸最大最小值;經過add items能夠添加在同一個圖表中展現的多個items(注:注意每一個item的顏色及取值範圍,範圍相差太大圖表會顯示不全);配置好的graphs在monitoring->graphs中查看。在monitoring->last data下能快速查看每一個host的每一個item的graph。
Screen將多種信息放在一塊兒展現,便於集中展現某個host的多個信息,或是比較多個hosts的同一種信息,這些信息能夠爲graphs、maps、server infos等等,幾乎涵蓋zabbix全部的監控信息。(圖二8、二九)
經過configuration->screen->creat screen來建立,建立時定義screen的行數和列數,點擊對應單元格內的change,添加相應的信息。
圖二八:screen圖
圖二九:screen圖
經過monitoring-screen,能夠查看以前配置好的信息。
這裏能夠添加關於主機的拓撲圖:configration-maps,在右上角能夠create maps或者import map。這裏咱們點擊crate maps 點save保存。(圖三10、三一)
圖三十:maps圖
圖三一:maps圖
Zabbix snmp的監控要在configration 中hosts中添加相關主機和snmp設備IP地址,通常用snmp監控網絡設備就能夠了。(圖三2、三三)在我看來zabbix 對server的監控通常是用agent來作的,因此zabbxi不建議用snmp對server監控,這一點和cacit有本質的區別,由於cacti主要是經過snmp對主機和網絡設備進行監控的。
圖三二:SNMP圖
圖三三:SNMP圖
若是有大量的同一類設備,須要監控的信息也大體相似,一個個去修改相關參數比較麻煩,咱們能夠經過建立一個template來簡化操做。(圖三四)
Configuration->Host Groups->Template->Create Template。建立template後,在configuration->host->template下找到剛建立的Template_MicrosoftSQLServer2008,修改相關的items、triggers、graphs等信息,使知足要求後link到相關的host便可。
圖三四:模板圖
在zabbix中關於報表的功能有三項:Avaliability report:(圖三五)整個系統可用的系統報表提供過濾功能。
圖三五:avaliability report圖
Most busy triggers top 100:(圖三六)提供最經常使用的triggers 預覽。
圖三六:triggers top 100圖
Bar report :(圖三七)可定製報表能夠報多個報表整合到一塊兒。
圖三七:bar report圖
Zabbix提供將全部配置導出爲標準XML格式的文件,一樣,也支持導入標準格式的XML配置文件。
經過configuration->Host->Export,勾選要導出的host,選擇export便可導出xml文件到本地。(圖三九)
圖三九:export圖
Import可導入本地的XML文件,注意格式必定要符合標準要求,若是server上有同名的配置,會被覆蓋掉。(圖三八)
圖三八:import圖
若是有大量的配置須要手動新增,譬如新增oralce監控,咱們能夠手動編寫xml,一次導入全部的items和triggers,但要注意格式,可本身導出一個配置後參考。
Item是zabbix中最小的監控單位,相關的數據都由item提供。在item項中,最重要的是「Key」項,該項提供具體的監控點(圖四十)。這裏有幾個重要的值,分別以下:
type 監控類型(有zabbix agent、snmp、jmx等) key 監控值(對於windows監控點使用perf_counter前綴) type of information 信息的類型(數值型、字符型、日誌型、文本型等) data type 數據的類理(整數型、浮點型等) Units 單元(例如B=Byte) Update interval 數值的更新週期 |
圖四十:item圖
能夠經過zabbix_get指令來獲取被監控設備的數據值(圖四一)。其中:-s指定須要取值的客戶端;-p指定通信端口;-k指定具體的鍵值。
圖四一:zabbix_get圖
理論上只要是windows性能監視器能夠查看的值,經過zabbix均可以監控到,可是對於不一樣的服務器安裝的同類應用有可能存在監控鍵值不同的狀況,在windows系統下經過指令typeperf能夠導出windows全部的監控鍵值(圖四2、四3、四四)。
圖四二:typeperf圖
圖四三:sql2005圖
圖四四:sql2008圖
Windows主機的監控能夠參考圖四3、圖四四所導出來的監控點,在新增的item中新建key,格式爲「perf_counter【監控值】」(例如perf_counter[\Processor(_Total)\% Processor Time]),圖四五是參考SQL2005模板結合導出的監控點文件整理的SQL2008模板,請重點對照Key項。
圖四五:sql2008模板圖
經過更改zabbix的配置文件能夠控制zabbix的頁面顯示內容,在zabbix初始安裝完成後,管理界面上的「configuration」中還有一個頁面是「install」選項,存在誤操做從新安裝的風險,經過修改menu.inc.php文件能夠禁用該顯示項目(圖四六)。
- vi /var/www/html/zabbix/include/menu.inc.php
圖四六:menu.inc.php圖
SNMP協議主要用在對網絡設備的監控方面,如交換機、防火牆等。首先須要在被監控設備上啓用SNMP協議(圖四七),而後在zabbix中增長被監控的主機。對於未找到snmp模板的設備就須要本身手動添加item,這裏經過snmp指令查詢到相關值,而後根據實際狀況定製本身所須要item。
圖四七:啓用snmp
- snmpwalk 172.16.1.1 -v1 -c public |egrep -i 'if(in|out)'|less
- snmpwalk -v1 -c public -On 172.16.1.1 ifInOctets.7
- snmpwalk -v1 -c public -On 172.16.1.1 ifOutOctets.7
- snmpwalk -v1 -c public -On 172.16.1.1 ifInOctets.9
- snmpwalk -v1 -c public -On 172.16.1.1 ifOutOctets.9
- snmpwalk 172.16.1.1 -v1 -c public |grep -i eth0
- snmpwalk 172.16.1.1 -v1 -c public |grep -i eth2
經過第一條指令結合實際狀況找出須要監控的網卡(一個設備上有多個網卡但僅啓用了其中的兩個),而且區分出內網網卡和外網網卡;經過其它指令進一步確認網卡的狀態及實時的數據,根據得出的數據結合設備實際狀況定製zabbix的snmp item項,注意OID的填寫(圖四8、四9、五十)。
圖四八:snmpwalk指令
圖四九:snmpwalk指令
圖五十:SNMP item圖
zabbix安裝指南:http://waringid.blog.51cto.com/65148/904201
zabbix使用指南:http://waringid.blog.51cto.com/65148/945352
zabbix使用手冊:http://down.51cto.com/data/462129
zabbix配置手冊:http://down.51cto.com/data/469472