Zabbix 簡介
Zabbix 是一個企業級的開源分布式監控解決方案, 由一個國外的團隊持續維護更新, 軟體可以自由下載下傳使用, 運作團隊靠提供收費的技術支援赢利。
官方網站http://www.zabbix.com 官方文檔:
Zabbix通過C/S模式采集資料,通過B/S模式在web端展示和配置。
zabbix運作條件
1.Zabbix Server需運作在 LAMP(Linux+Apache+Mysql+PHP)環境下對硬體要求低 ; 2.Agent:目前已有的agent基本支援市面常見的OS,包含Linux、HPUX、Solaris、Sun、windows。 3.SNMP:支援各類常見的網絡裝置
Zabbix 功能
1.具備常見的商業監控軟體所具備的功能(主機的性能監控、網絡裝置性能監控、資料庫性能監控、 FTP等通用協定監控、多種告警方式、詳細的報表圖表繪制)支援自動發現網絡裝置和伺服器;支援分布式,能集中展示、管理分布式的監控點;擴充性強, server提供通用接口, 可以自己開發完善各類監控。
優勢劣勢
優點:開源,無軟體成本投入; Server對裝置性能要求低(實際測試環境:虛拟機CentOS5,2GCPU1G記憶體,監控5台裝置, CPU使用率基本保持在10%以下,記憶體剩餘400M以上);支援裝置多;支援分布式集中管理;開放式接口,擴充性強 缺點: 中文資料較少。
zabbix元件
了解完zabbix特性之後,本該進入zabbix安裝教程,但是我覺得在安裝之前我們很有必要了解一下zabbix程序組成結構,預設情況下zabbix包含5個程式:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一個zabbix_java_gateway是可選,這個需要另外安裝。下面來分别介紹下他們各自的作用。
zabbix_agentd
用戶端守護程序,此程序收集用戶端資料,例如cpu負載、記憶體、硬碟使用情況等
zabbix_get
zabbix工具,單獨使用的指令,通常在server或者proxy端執行擷取遠端用戶端資訊的指令。通常使用者排錯。例如在server端擷取不到用戶端的記憶體資料,我們可以使用zabbix_get擷取用戶端的内容的方式來做故障排查。
zabbix_sender
zabbix工具,用于發送資料給server或者proxy,通常用于耗時比較長的檢查。很多檢查非常耗時間,導緻zabbix逾時。于是我們在腳本執行完畢之後,使用sender主動送出資料。
zabbix_server
zabbix服務端守護程序。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的資料最終都是送出到server
備注:當然不是資料都是主動送出給zabbix_server,也有的是server主動去取資料。
zabbix_proxy
zabbix代理守護程序。功能類似server,唯一不同的是它隻是一個中轉站,它需要把收集到的資料送出/被送出到server裡。
zabbix_java_gateway
zabbix2.0之後引入的一個功能。顧名思義:
Java 網關,類似agentd,但是隻用于Java方面。需要特别注意的是,它隻能主動去擷取資料,而不能被動擷取資料。它的資料最終會給到server或者proxy。zabbix小結 告警與維護配置
zabbix的告警通知非常靈活,支援的通知類型有Email、Jabber、sms、script 。其在裝置需要修護時,同樣可以提供同nagios 一樣的裝置維護期間,暫停告警的功能有,而且其相對于nagios 更加靈活。本篇就針對zabbix的告警和裝置維護功能進行下說明。
一、media types 告警通知
本篇以腳本通知為例進行說明
1、配置AlertScriptsPath
# vim /etc/zabbix/zabbix_server.conf找到# AlertScriptsPath=${datadir}/zabbix/alertscripts 行,增加如下内容AlertScriptsPath=/etc/zabbix/alertscripts
配置完成後,需要重新開機zabbix_server服務生效,在後面media type 寫入的腳本名稱就會從上面的配置目錄中查找并執行。
2、建立media type
步驟為:登入 zabbix web 頁面------Administration--------Media types--------Create Media Type(右上角) ,如下圖:
http://www.361way.com/wp-content/uploads/2014/07/mediatype.png https://s5.51cto.com/wyfs02/M02/97/8D/wKiom1kvs3STDeGVAAANTkKZa0A402.png-wh_500x0-wm_3-wmp_4-s_3776283155.png https://s2.51cto.com/wyfs02/M01/97/8F/wKioL1kvs6TyRZkZAAAv4oNQFF0745.png-wh_500x0-wm_3-wmp_4-s_2070908856.png配置完成後,save儲存即可。
3、建立Action
步驟為:登入 zabbix web 頁面---- Configuration ---- Actions ---- Create action , 如下圖
subject為發送主題,message為發送内容(通過message内容的自定義,可以例如在告警時,将其他相關資訊也進行通知,可以從側面了解整個主機的運作情況---某次面試時面試官曾提過的需求),這兩者的内容都可以很友善的進行更改。勾選了Recovery message 選項,會在監控項恢複時也會給一個恢複的提示。
http://www.361way.com/wp-content/uploads/2014/07/conditions.pngcondeitions 選項中設定的是觸發通知的條件,預設情況下隻有A、B兩項 ,這裡可以設定觸發級别、主機組、主機、觸發值、應用等 。舉例說明下:
1、可以根據告警級别進行通知,如severity 級别大于等于average時,通知OPS運維人員,級别為Disater時通知部門經理或者BOSS (這需要配置兩個action);
2、也可以根據時間進行定義,如隻在工作時間進行告警通知;
3、如果你喜歡的話,也可以指定不同主機組通知到不同的人;
而且所有條件之間的關系可以是AND或者OR ,預設情況下都是AND,即所有條件都滿足時,觸發通知。
注:個别主機,如DB主機,晚上有備份任務導緻晚上某段時間過載(同時又不是所有主機都這樣,又不想增大觸發條件的話),可以在configuation ---hosts 裡的items 選項裡配置通知的時間範圍,那裡也有 time period 配置選項(從另一方面也反映了zabbix的靈活,有宏觀調控,也有微觀調控,适用性很強) 。不過要盡可能的都在actions 裡進行配置,因為這一般檢視具體條件都是在這裡 。
下圖是action的Operations部分,該項是必填項:
http://www.361way.com/wp-content/uploads/2014/07/operations.pngOperation details 是一個比較強的配置項,這裡主要有三個知識點---Escalations、remote command 和 event acknowledged,其中Escalations、remote command比較重要 。
operation details 的 step部分主要和escalations 相關,在監控場景中,如果你一天收到100+的短信告警,真有一天“狼”真來了估計你也不會注意到。有了escalations功能,可以實作如下配置(需配置多條operation):
1、在機關時間内(step duration)發送的總的通知次數(to - from +1 次),并通知到相應的組或人;
2、假如條件1中設定的是1800秒内發送1-5 次給OPS運維人員,結果運維人員在該時間段未能處理;我們就可以再增加一個Operations,指定from 5 to 10 (第5到10條告警)通知給 運維經理 ;我們還可以再增加,第11-15條給BOSS ,第16-20條告警時執行一個遠端指令。
escalations部分,可以參看官方文檔。
第二個知識點就是Operation type部分,類型可以是send message進行通知,也可以是remote command :
remote command 可以支援的操作有IPMI、Custom script、ssh、telnet、Global script (其中前兩者隻能在zabbix server 或 zabbix proxy上操作),該功能是相當牛B的。如,檢測到一個tomcat 服務404,我們就可以利用該功能重新開機tomcat 服務 。
remote command部分可以檢視官方頁面第三個功能主要是為有值班人員或上班時間準備的一個功能,當設定這個條件時,如果一個告警的狀态被設定為ACK ,則本次告警的後續通知就會停止 。
在一線運維人員接到告警資訊時,在zabbix 的首頁上,移到相應告警提示的部分,選擇主機的ACK 部分 ,點選 NO ,會跳出一個message的視窗,在message裡輸入相關資訊 ,如:誤報、因什麼什麼原因在調試、已通知到相關責任人等 ,并點選Acknowledge 送出,此時的ACK 狀态會變成YES 。本次告警也将停止不再進行。直到本次告警解決,下次再次出現同樣告警時,該項又會重新變成ACK 。
Acknowledge部分,可以參看官文頁面二、maintenance 維護
線上場景中,經常會遇到這樣的情況:線上産品需要進行更新或其他操作,此時又不想将監控系統的完整告警功能進行全部關閉,隻臨時關閉線上更新主機的告警。這就可以使用zabbix的maintenance功能。具體配置方式如下:
建立maintenance的步驟為:登入 zabbix web 頁面---- Configuration-----Maintenance ----- create maintenance period。
http://www.361way.com/wp-content/uploads/2014/07/maintenance.png第一頁籤配置的是任務名和一個大範圍的時間值,其指定了維護所在的磊的時候段在什麼範圍。maintenance type 指定在維護期間是否仍進行資料搜集。
http://www.361way.com/wp-content/uploads/2014/07/periods.pngperiods指定的時間段具體的維護時間段,和maintenace中的範圍為包含關系。而period type指定了執行的類型,其類型有one time only 一次執行,也有按日、星期或月定期執行 ,如果是後三種方式,date項會變成具體的間隔、開始時間 。無論是何種類型,都有maintenance period length型 ,其指定了具體每次維護的持續時間,如2小時。
hosts & groups 項太多内容,就是選擇某組主機或某個主機在維護期間不進行告警通知。
安裝Zabbix過程中出現的問題集:
zabbix 是一個基于WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。 zabbix能監視各種網絡參數,保證伺服器系統的安全營運;并提供靈活的通知機制以讓系統管理者快速定位/解決存在的各種問題。
故障一:
2637:20151009:050431.719 [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost' (using password: YES)
2637:20151009:050431.719 database is down: reconnecting in 10 seconds
權限問題,執行下面的SQL語句.
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
故障二:
PHPtime zone unknown Fail
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value date.timezone Asia/Shanghai #修改成正确的時區.
[root@localhost zabbix]# service httpd restart
故障三:
zabbix server is not running the information displayed may not be current
selinux 問題
[root@zabbix create]# getenforce
Enforcing
[root@zabbix create]# setenforce 0
[root@zabbix create]# getenforce
Permissive
或者
[root@zabbix create]# vim /etc/selinux/config
type=AVC msg=audit(1444450162.226:7610): avc: denied { name_connect } for pid=31941 comm="httpd" dest=10051 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:zabbix_port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1444450162.226:7610): arch=c000003e syscall=42 success=no exit=-13 a0=c a1=7f95a9345270 a2=10 a3=0 items=0 ppid=31936 pid=31941 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1444450171.586:7611): avc: denied { name_connect } for pid=32146 comm="httpd" dest=10051 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:zabbix_port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1444450171.586:7611): arch=c000003e syscall=42 success=no exit=-13 a0=b a1=7f95a934dbe0 a2=10 a3=3 items=0 ppid=31936 pid=32146 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1444450172.228:7612): avc: denied { name_connect } for pid=32146 comm="httpd" dest=10051 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:zabbix_port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1444450172.228:7612): arch=c000003e syscall=42 success=no exit=-13 a0=c a1=7f95a9354a50 a2=10 a3=0 items=0 ppid=31936 pid=32146 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=MAC_STATUS msg=audit(1444450178.657:7613): enforcing=0 old_enforcing=1 auid=0 ses=969
1、web頁面無法顯示:
原因一:檢查系統是否安裝apache,以便解析html
原因二:php沒有完全安裝好
原因三:apache沒有提供對php的支援
原因四:apache的配置檔案中DocumentRoot的參數值沒有改成zabbix的路徑,zabbix預設的路徑 是/var/www/html/下
解決方案一:安裝apache
tar zxvf httpd-2.2.23.tar.gz
cd httpd-2.2.23
./configure --prefix=/usr/local/apache
make && make install
若安裝過程中出現錯誤, 則在編譯時入加 --with-included-apr 參數。
解決方案二:完整安裝php
安裝php時首先要檢查系統是否安裝了支援zabbix的依賴包,特别GD庫的安裝,如果gd庫沒安裝會 導緻zabbix安裝過程出現問題。
<1>安裝freetype,libpng,jpeg以便于讓php支援GD庫(WeatherMap插件必須要較新的GD庫支援)
tar -zxvf libpng-1.2.18.tar.gz
./configure --prefix=/usr/local/libpng
tar -zxvf freetype-2.3.5.tar.gz
./configure --prefix=/usr/local/freetype
make &&make install
tar -zxvf jpegsrc.v7.tar.gz
mkdir /usr/local/libjpeg
mkdir /usr/local/libjpeg/bin
mkdir /usr/local/libjpeg/lib
mkdir /usr/local/libjpeg/man
mkdir /usr/local/libjpeg/man/man1
./configure --prefix=/usr/local/libjpeg/ --enable-shared --enable-static
tar -zxvf gd-2.0.28.tar.gz
./configure --prefix=/usr/local/libgd --with-png --with-freetype=/usr/local/freetype/ --with- jpeg=/usr/local/libjpeg/
安裝完成後,對gd庫進行配置:
vi /etc/ld.so.conf
/usr/local/freetype/lib
/usr/local/libjpeg/lib
/usr/local/libgd/lib
ldconfig --------執行指令,使用動态裝入器裝載找到的共享庫
<2>安裝PHP
cd php-5.6.0
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-
MySQL=/usr/local/mysql/ --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-bcmath --enable- mbstring --enable-sockets --with-gd --with- gettext --with-freetype-dir=/usr/local/freetype/ --with-jpeg- dir=/usr/local/libjpeg/
make clean
安裝完後将tar包中的php.ini-development或php.ini-production複制到到/usr/local/php/lib下,并更名為php.ini
-with-apxs2=/usr/local/apache/bin/apxs | 支援apache |
--with-mysql=/usr/local/mysql/ | 支援mysql |
--with-mysqli=/usr/local/mysql/bin/mysql_config | 優化支援mysqli |
--enable-bcmath | 打開圖檔大小調整 |
--enable-mbstring | 多位元組,字元串的支援 |
--enable-sockets | 打開sockets 支援 |
--with-gd | 打開gd庫的支援 |
--with-gettext | 打開gnu的gettext 支援,編碼庫用到 |
--with-freetype-dir=/usr/local/freetype/ | 打開對freetype字型庫的支援 |
--with-jpeg-dir=/usr/local/libjpeg/ | 打開對jpeg圖檔的支援 |
解決方案三:apache沒有提供對php的支援
打開apache的配置文檔/usr/local/apache/conf/httpd.conf,修改其中參數
子產品中修改為
DirectoryIndex index.html index.php
子產品中添加
AddType application/x-httpd-php .php .php3 .php4
修改完成後需重新啟動apache
2、通路目錄http://ip/zabbix會顯示:
Forbidden
You don't have permission to access /test/ on this server.
解決方案:
在apache的配置文檔中找到,其中定義了Deny from all,可以将其注釋,就不會封網段
3、zabbix在安裝過程中出現無法找到sock檔案的問題
将mysql的socket.sock檔案軟連結到zabbix的路徑
4、登入進zabbix頁面中,頁面顯示如下錯誤:
ini_set(): Use of mbstring.internal_encoding is deprecated [dashboard.php:21 → require_once() →
ZBase->run() → ZBase>initLocales() → init_mbstrings() →
ini_set() in /var/www/html/zabbix/include/locales.inc.php:25]
将路徑中/var/www/html/zabbix/include/locales.inc.php的第25行資料注釋掉,頁面不會顯示錯誤