轉角遇到Zabbix:企業級分布式系統監控部署
【編者按】Zabbix是一個基于WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。借助Zabbix,可以減輕運維人員們繁重的服務器管理任務,實現業務系統的持續運行。本文中,作者張世鋒結合公司的實際機房分布在多個城市的案例,總結了Zabbix分布式部署實施方案的全過程。
最近在研究Zabbix監控,由于機房分布在多個城市,因此采用zabbix proxy做為監控方案,在每個節點部署zabbix proxy,由zabbix proxy收集agentd數據,然后將采集到的數據主動推送給zabbix server,zabbix server將數據存入數據庫,并在WEB前端顯示。
一、Zabbix主要功能和優劣勢說明
1、Zabbix主要功能:
1)Application monitoring 應用監控
數據庫/SSH/Apache/Nginx等應用程序的監控。
2)Server monitoring 服務器監控
CPU,內存,SWAP,磁盤空間,網卡流量的監控等,可以通過瀏覽器實時查看Graphs。
3)Network monitoring 網絡設備監控
支持Cisco, Juniper, 3Com等網絡設備,網絡設備通過SNMP(SNMP (v1,v2,v3) devices)協議進行監控。
4)添加自定義監控,對于Zabbix無法滿足的監控,可以添加自定義監控。
2、Zabbix 優勢:
1)安裝配置簡單,支持多種語言,包括中文。
2)系統自帶多種監控模板,可以直接使用。
3)支持分布式部署和WEB集中管理(通過WEB頁面設置或查看報警結果)。
4)自動發現主機和網絡設備(discovery of file systems,network interfaces,hosts and netwrok devices)。
5)WEB監控:可以監控WEB下載速度,返回碼及響應時間。
6)提供實時和歷史的監控分析數據。
7)EMAIL報警,按照故障級別|服務器類型|業務類型發送EMAIL郵件到相關負責人。
3、Zabbix 劣勢:
1)需要在被監控機器上面安裝agent。
2)All configuration information都存儲在數據庫里面,數據庫是整個監控平臺的瓶頸。
二、Zabbix分布式部署需求分析
1、軟件需求
官方推薦的軟件配置
1)MySQL5.0.3 or laterRequired if MySQLis used as Zabbix back end database,InnoDB engine isrequired.
2)PHP 5.3.0 or later
3)Apache 1.3.12 or later
2、硬件需求
官方推薦的最小硬件配置:
#p#
三、Zabbix分布式部署實施
1、分布式部署拓撲圖
補充說明:
當proxy部署為主動模式(Active)時,Zabbix Server的負載最小。
1)Server:負責把數據寫入到數據庫,然后通過Apache|Nginx +php在WEB前端顯示。
2)Proxy:幫助server采集被監控端的數據,并把采集到的數據主動傳送給Server,proxy只負責數據收集。
3)Database:所有的配置信息都存儲在數據庫里面,Zabbix server數據庫和proxy數據庫必須獨立。
4)Agent:agent的作用就是獲取host數據,然后將收集到的數據發送給server(主動模式),或者是server主動來拿取數據(被動模式)。
5)Email:通過Qmail|postfix的SMTP負責報警郵件的發送(故障郵件和故障恢復郵件)。
2、Zabbix分布式安裝部署:
1)Mysql 數據庫安裝(參照:http://sfzhang88.blog.51cto.com/4995876/900846)
2)LNMP + Zabbix server 安裝(參照:http://sfzhang88.blog.51cto.com/4995876/978686)
3)Zabbix proxy 安裝(略)
4)Zabbix agent 安裝
- [root@www20 shell]# cat zabbix_agentd_install.sh
- #!/bin/sh
- #Create by sfzhang 2014.02.27
- yum -y install net-snmp
- yum -y install net-snmp-devel
- BASE_DIR="/data/software"
- TAR="zabbix-2.2.1.tar.gz"
- tar -zxvf $BASE_DIR/$TAR -C$BASE_DIR
- cd $BASE_DIR/zabbix-2.2.1
- ./configure--prefix=/usr/local/zabbix --sysconfdir=/etc/zabbix --enable-agent
- make && make install
- groupadd zabbix
- useradd zabbix -g zabbix
- cpmisc/init.d/fedora/core/zabbix_agentd /etc/init.d/zabbix_agentd
- chmod 700/etc/init.d/zabbix_agentd
- chown zabbix.zabbix/etc/init.d/zabbix_agentd
- sed -i "/BASEDIR=/s#/.*#/usr/local/zabbix#" /etc/init.d/zabbix_agentd
- sed -i"s#bin/zabbix_agentd#sbin/zabbix_agentd#" /etc/init.d/zabbix_agentd
- sed -i"s#Server=127.0.0.1#Server=192.168.161.129#"/etc/zabbix/zabbix_agentd.conf
- sed -i"s#ServerActive=127.0.0.1#\#ServerActive=127.0.0.1#"/etc/zabbix/zabbix_agentd.conf
- sed -i "/Hostname=/s#=.*#"=$HOSTNAME#""/etc/zabbix/zabbix_agentd.conf
- sed -i"s#\#/tmp/zabbix_agentd.pid#/data/logs/zabbix_agentd.pid#"/etc/zabbix/zabbix_agentd.conf
- sed -i"s#/tmp/zabbix_agentd.log#/data/logs/zabbix_agentd.log#"/etc/zabbix/zabbix_agentd.conf
- sed -i "s#\#Timeout=3#Timeout=30#" /etc/zabbix/zabbix_agentd.conf
- cat>>/etc/services<<EOF
- #Zabbix services
- zabbix-agent 10050/tcp#Zabbix Agent
- zabbix-agent 10050/udp#Zabbix Agent
- zabbix-trapper 10051/tcp#Zabbix Trapper
- zabbix-trapper 10051/udp#Zabbix Trapper
- EOF
- /etc/init.d/zabbix_agentdstart
四、Zabbix WEB前端配置
1、配置proxy代理
2、添加Groups和hosts
通常Groups按照頻道或者是WEB,MYSQL,memcache等服務類型分組的,提供相同服務的服務器分為一組,便于后期的維護和管理。
3、自定義監控模板,監控項和觸發器
#p#
五、zabbix主要功能展示
1、服務器監控
1)CPU負載監控
2)內存空間的監控
3) 磁盤空間的監控
4)交換分區的監控
5) 網卡流量的監控
除此之外,還有服務器重啟的監控,添加刪除用戶時的監控,主機存活狀態的監控(ICMP ping協議)等。
2、應用程序的監控
Zabbix有很多系統自帶的模板,在添加主機的時候Link相關的模板即可。
當停止主機的上面的SSH服務或者Apache服務的時候會產生報警。
3、WEB Monitoring
Web Monitoring是用來監控web程序的,可以監控到web程序的下載速度、返回碼及響應時間。當返回碼不為200的時候也可以產生報警。
4、Zabbix Screens
Screen將多種信息放在一起展示,便于集中展示某個主機的監控信息。
5、Zabbix maps
Zabbix的maps用來圖形化顯示監控設備的拓撲圖,并且以不同的標記顯示故障事件,通過該圖表很直觀的顯示設備的整體情況。
#p#
六、Zabbix自定義監控
在實際應用當中,好多監控系統都滿足不了實際的需求,需要根據實際的需求添加自定義監控。比如說:監控應用服務器tuxedo排隊,當隊列大于2000的時候報警。監控apache,mysql鏈接數,當大于2000的時候報警等等,此時Zabbix需要借助scripts來完成。
實例:監控http和mysql ESTABLISHED和TIME_WAIT連接數,當大于100的時候報警,并在WEB頁面實時查看連接數。
1、在要監控的服務器上面編寫Shell/python腳本,取出ESTABLISHED和TIME_WAIT連接數。
- [root@monitor scripts]# catcheckservices.sh
- #!/bin/sh
- #Create by sfzhang 2014.02.10
- ARGS=1
- if [ $# -ne "$ARGS"];then
- echo "Please input one arguement";
- fi
- case $1 in
- EST_80)
- result=`netstat -anp | grep :80 | grep EST | wc -l`
- echo$result
- ;;
- TIME_OUT_80)
- result=`netstat-anp | grep :80 | grep TIME_WAIT | wc -l`
- echo$result
- ;;
- EST_3306)
- result=`netstat -anp | grep :3306 | grep EST | wc -l`
- echo $result
- ;;
- TIME_OUT_3306)
- result=`netstat -anp | grep:3306 | grep TIME_WAIT | wc -l`
- echo $result
- ;;
- EST_11211)
- result=`netstat -anp | grep :11211 | grep EST | wc -l`
- echo $result
- ;;
- TIME_OUT_11211)
- result=`netstat -anp | grep:11211 | grep TIME_WAIT | wc -l`
- echo $result
- ;;
- *)
- echo"Usage:$0(EST_80|TIME_OUT_80|EST_3306|TIME_OUT_3306|EST_11211|TIME_OUT_11211)"
- ;;
- esac
2、在Zabbix_agentd.conf里面添加UserParameter,格式如下,對于Zabbix來說,腳本其實就是一個插件。
- UserParameter=checkservices.sh[*],/etc/zabbix/scripts/checkservices.sh $1 $2
重啟agentd服務器,然后在zabbix server用zabbix_get就可以取到值。
3、要監控的服務器有多臺的時候,最簡單的方法是先編寫一個Templates(模板),在Link到要監控的服務器上面。
4、給新添加的模板Linux_service_templates添加Applications。
5、給新添加的模板Linux_service_templates添加Items(監控項)。下面是添加http ESTABLISHED監控條目。
6、給新添加的模板Linux_service_templates添加Triggers(觸發器)。下面是添加 http ESTABLISHED觸發器,當連接數大于2000的時候報警,故障級別為High。
7、要在WEB前端實時查看http的連接情況,必須配置Graph。在一個Graph里面可以添加多個Item數據。
8、要查看Graphs在要監控的主機上面Link剛才的模板Linux_service_templates。
9、在WEB前端查看實時連接情況。
Http連接情況:
Mysql連接情況:
#p#
七、Zabbix discovery
1、Network discovery
Zabbix network discovery能自動發現網絡中存活的主機,可用通過proxy代理或者Zabbix server 發現網絡中存活的主機,并按照Actions里面定義的條件自動添加到Zabbix監控里面。
1)首先:添加Discovery rule,可以通過proxy代理或者zabbix server添加rule。
2)然后create Actions,指定Actions的Conditions,必須具備下列條件才能自動添加,Discover
rule:規則為 Local network,system.uname的值中包含Linux,Zabbix agentd服務必須正常運行。
3) 配置Actions的operations,將Actions里面符合條件的主機添加到shwww組里面并Link要監控的模板。
4)查看Discover自動發現的主機自動添加到Zabbix里面。
2、Zabbix Low-level discovery
Zabbis Low-level discovery 可以自動創建監控項,觸發器和圖像的方法。Zabbix可以自動發現主機上面的文件系統或者網絡接口,不需要對每個文件系統和網絡接口手動創建監控項,觸發器和圖像。Zabbix 還可以自動刪除不需要的監控項,比如:上例當中的,當agentd宕機超過24小時的時候可以自動刪除監控,只需在action里面配置即可。
實例:監控服務器上面所有TCP端口,就可以通過Low-level discovery輕松實現。
八、Zabbix報警郵件機制
1、基于業務類型發送報警郵件
當數據庫服務器出問題時發給DBA組,當系統出問題時發給System組。
2、基于故障級別或者時間發送郵件
九、Zabbix資產管理
Zabbix可以自動收集主機的hostname,OS,cpu信息,MAC等信息。需要在添加主機的時候開啟Host inventory Automatic功能,并按照官方手冊添加Item即可。
十、Zabbix 報表功能
附錄:
1、官方在線文檔:
https://www.zabbix.com/documentation/2.2/manual/introduction