一、Zabbix簡介
1.1 Zabbix簡介
Zabbix是一個企業級的開源分布式監控解決方案,由一個國外的團隊持續維護更新,軟件可以自由下載使用,運作團隊靠提供收費的技術支持贏利。官方網站:http://www.zabbix.com官方文檔:http://www.zabbix.com/documentation/2.0/manual/quickstart。Zabbix通過C/S模式采集數據,通過B/S模式在web端展示和配置。
Zabbix運行條件:
Server:Zabbix Server需運行在LAMP(Linux+Apache+Mysql+PHP)環境下,對硬件要求低。
Agent:目前已有的agent基本支持市面常見的OS,包含Linux、HPUX、Solaris、Sun、windows。
SNMP:支持各類常見的網絡設備
1.2 Zabbix功能
具備常見的商業監控軟件所具備的功能(主機的性能監控、網絡設備性能監控、數據庫性能監控、FTP等通用協議監控、多種告警方式、詳細的報表圖表繪制)支持自動發現網絡設備和服務器;支持分布式,能集中展示、管理分布式的監控點;擴展性強,server提供通用接口,可以自己開發完善各類監控。
1.3 優劣勢
優點:開源,無軟件成本投入;Server對設備性能要求低(實際測試環境:虛擬機CentOS5,2GCPU 1G內存,監控5台設備,CPU使用率基本保持在10%以下,內存剩余400M以上);支持設備多;支持分布式集中管理;開放式接口,擴展性強。
缺點:中文資料較少。
二、Zabbix配置文件
2.1 說明
Server:指安裝zabbix服務的服務器(以下簡稱服務器端),是最重要的部份,主要安裝在linux系統上(支持多種操作系統),采用mysql存儲監控數據並使用apache+php的方式呈現。
Agent:指安裝在被監控設備上的zabbix代理(以下簡稱代理),被監控設備上的數據由代理收集后統一上傳到服務器端由服務器端收集、整理並呈現。
SNMP:也是agent的一種,指支持SNMP協議的設備(也可以是服務器),通過設定SNMP的參數將相關監控數據傳送至服務器端(大部份的交換機、防火牆等網絡設備都支持SNMP協議)。
IPMI:Agent的另一種方式,主要應用於設備的物理性能監控,例如設備的溫度、風扇的轉速等。
2.2 Zabbix架構
Zabbix支持多種網絡方式下的監控,可通過分布式的方式部署和安裝監控代理,整個架構如(圖一、圖四)所示。
圖一:架構圖

圖四:架構圖
2.3 Zabbix服務配置文件
Zabbix安裝后服務端默認的配置文件存在安裝文件夾中的/etc中,假設編譯的參數是“—prefix=/usr/local/zabbix”,那么服務端的配置文件則在“vi /usr/loca/zabbix/etc/”。如圖二所示。

圖二:配置文件
主要的配置文件兩個:“zabbix_server.conf”負責服務器端的設定;“zabbix_agent.conf”用來設置客戶端代理參數;“zabbix_proxy.conf”用來設定分布式的部署。
2.4 zabbix_server.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 日志慢查詢設定 |
2.5 zabbix_agent.conf說明
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”的錯誤。如(圖六、七)所示。

圖五:zabbix_agent.conf

圖六:主機名不一致的錯誤提示

圖七:填入正確的主機名
2.6 Agent安裝
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配置
3.1 更改Zabbix map圖標
Zabbix的maps用來圖形化顯示監控設備的拓撲圖,並且以不同的標記顯示故障事件,通過該圖表很直觀的顯示設備的整體情況。系統默認的圖標比較簡陋,如圖十一所示。通過更改系統自帶的圖標讓監控顯示更加直觀、方便(圖十二)。
首先下載Icon圖標,通過http://www.zabbix.com/forum/attachment.php?attachmentid=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_images_mysql.sql my_images_mysql_48.sql
- sh make_img_insert_sql.sh ./128 2000
- mv my_images_mysql.sql my_images_mysql_128.sql
- cat my_images_mysql_48.sql |mysql -u zabbix -p zabbix
- cat my_images_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 添加短信報警(腳本方式)
短信提醒功能(圖二十)可以讓運維團隊在第一時間了解故障,讓系統管理人員快速定位、解決故障。以下是詳細步驟:
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”指報警動作的名稱、報警周期、標題、詳細內容及故障恢復時的報警標題和內容。這里需要注意的是標題和內容不能太長,不然一條短信無法定遠整顯示(圖十六、十七分別表示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”保存,當滿足條件的主機觸發報警時相關的用戶就會收到短信提醒(圖二十)。

圖二十:短信提醒
3.3 添加 Hosts
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 可以添加設備組。
3.4 添加 Items
Item是監控項,是監控的基本元素,每一個監控項對應一個被監控端的采集值。(圖二二、二三)
在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也可以自定義,后面會講到如何自定義監控項)。
3.5 添加 Triggers
Trigger是觸發器,當Items采集值滿足triggers的觸發條件時,就會產生actions。(圖二四、二五)每一個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 (一段時間內的最大值),等等。可以根據實際需要來設定觸發方式。
3.6 添加 Graphs
Zabbix的Graphs功能很強大,可以為每一個item繪制圖表,也可以把多個items繪制在一張圖表內。通過configuration->hosts選擇要繪制圖表的host,點擊graphs,create graphs即可創建圖表。(圖二六、二七)

圖二六:graph圖

圖二七:graph圖
Graph type:圖表樣式,有線狀、柱狀、餅狀;還可以自定義圖表大小,及Y軸最大最小值;通過add items可以添加在同一個圖表中展示的多個items(注:注意每個item的顏色及取值范圍,范圍相差太大圖表會顯示不全);配置好的graphs在monitoring->graphs中查看。在monitoring->last data下能快速查看每個host的每個item的graph。
3.7 添加 Screens
Screen將多種信息放在一起展示,便於集中展示某個host的多個信息,或是比較多個hosts的同一種信息,這些信息可以為graphs、maps、server infos等等,幾乎涵蓋zabbix所有的監控信息。(圖二八、二九)
通過configuration->screen->creat screen來創建,創建時定義screen的行數和列數,點擊對應單元格內的change,添加相應的信息。

圖二八:screen圖

圖二九:screen圖
通過monitoring-screen,可以查看之前配置好的信息。
3.8 添加 Maps
這里可以添加關於主機的拓撲圖:configration-maps,在右上角可以create maps或者import map。這里我們點擊crate maps 點save保存。(圖三十、三一)

圖三十:maps圖

圖三一:maps圖
3.9 添加 SNMP監控
Zabbix snmp的監控要在configration 中hosts中添加相關主機和snmp設備IP地址,一般用snmp監控網絡設備就可以了。(圖三二、三三)在我看來zabbix 對server的監控一般是用agent來做的,所以zabbxi不建議用snmp對server監控,這一點和cacit有本質的區別,因為cacti主要是通過snmp對主機和網絡設備進行監控的。

圖三二:SNMP圖

圖三三:SNMP圖
3.10 添加 Templates
如果有大量的同一類設備,需要監控的信息也大致類似,一個個去修改相關參數比較麻煩,我們可以通過創建一個template來簡化操作。(圖三四)
Configuration->Host Groups->Template->Create Template。創建template后,在configuration->host->template下找到剛創建的Template_MicrosoftSQLServer2008,修改相關的items、triggers、graphs等信息,使滿足要求后link到相關的host即可。

圖三四:模板圖
3.11 添加Reports(定制報表)
在zabbix中關於報表的功能有三項:Avaliability report:(圖三五)整個系統可用的系統報表提供過濾功能。

圖三五:avaliability report圖
Most busy triggers top 100:(圖三六)提供最常用的triggers 預覽。

圖三六:triggers top 100圖
Bar report :(圖三七)可定制報表可以報多個報表整合到一起。

圖三七:bar report圖
3.12 Export/Import XML
Zabbix提供將所有配置導出為標准XML格式的文件,同樣,也支持導入標准格式的XML配置文件。
通過configuration->Host->Export,勾選要導出的host,選擇export即可導出xml文件到本地。(圖三九)

圖三九:export圖
Import可導入本地的XML文件,注意格式一定要符合標准要求,如果server上有同名的配置,會被覆蓋掉。(圖三八)

圖三八:import圖
如果有大量的配置需要手動新增,譬如新增oralce監控,我們可以手動編寫xml,一次導入所有的items和triggers,但要注意格式,可自己導出一個配置后參考。
四、Zabbix ITEM、模板及SNMP配置
4.1 Zabbix ITEM說明及配置
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所有的監控鍵值(圖四二、四三、四四)。

圖四二:typeperf圖

圖四三:sql2005圖

圖四四:sql2008圖
Windows主機的監控可以參考圖四三、圖四四所導出來的監控點,在新增的item中新建key,格式為“perf_counter【監控值】”(例如perf_counter[\Processor(_Total)\% Processor Time]),圖四五是參考SQL2005模板結合導出的監控點文件整理的SQL2008模板,請重點對照Key項。

圖四五:sql2008模板圖
4.2 Zabbix頁面顯示項配置
通過更改zabbix的配置文件可以控制zabbix的頁面顯示內容,在zabbix初始安裝完成后,管理界面上的“configuration”中還有一個頁面是“install”選項,存在誤操作重新安裝的風險,通過修改menu.inc.php文件可以禁用該顯示項目(圖四六)。
- vi /var/www/html/zabbix/include/menu.inc.php

圖四六:menu.inc.php圖
4.3 Zabbix SNMP說明及配置
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的填寫(圖四八、四九、五十)。

圖四八: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