1. 程式人生 > >zabbix-原理+安裝

zabbix-原理+安裝

一、前言

監控對我們來說太重要了,監控工具也有很多,像,Cacti,Nagios,Ganglia,Zabbix等等,今天我們要介紹的是Zabbix,它的功能很強大,在介紹Zabbix之前,我們先說說Cacti和Nagios。

  • Cacti:它是一款資料採集,資料儲存,外加web介面展示的工具,它的資料展示功能很強大,但是故障報警方面很薄弱

  • Nagios:告警功能異常強大,但是資料展示方面薄弱,並且監控主機數量有限

  • 而Zabbix集以上兩款工具的優點於一身,並且更加強大,能實現企業級的分散式監控。

監控系統採集資料的方式:

snmpà簡單,但是安全性差,主要針對網路裝置

,網路裝置不能安裝agent

server/agentà安全性高,功能強大

二、簡介

zabbix是一個基於WEB介面的提供分散式系統監視以及網路監視功能的企業級的開源解決方案。zabbix能監視各種網路引數,保證伺服器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。

1)Zabbix中常用的元件

Zabbix Server:負責接收agent傳送的報告資訊的核心元件,所有配置,統計資料及操作資料均由其組織進行;

Database Storage:專用於儲存所有配置資訊,以及由zabbix收集的資料;

Web interface:zabbix的GUI介面,通常與Server執行在同一臺主機上

Proxy:可選元件,常用於分散式監控環境中,代理Server收集被監控端的監控資料並統一發往Server端;

Agent:部署在被監控主機上,負收集本地資料併發往Server端或Proxy端;

常見程序

預設情況下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。

2)工作原理

    zabbix執行的大概的流:

zabbix agent需要安裝到被監控的主機上,它負責定期收集各項資料,併發送到zabbix server端,zabbix server將資料儲存到資料庫中,zabbix web根據資料在前端進行展現和繪圖。這裡agent收集資料分為主動和被動兩種模式:

主動:agent請求server獲取主動的監控項列表,並主動將監控項內需要檢測的資料提交給server/proxy

被動:server向agent請求獲取監控項的資料,agent返回資料。

​​​​​​​3)Zabbix常用術語

主機(host):要監控的網路裝置,可由IP或DNS名稱指定; 主機組(host group):主機的邏輯容器,可以包含主機和模版,但同一個組內的主機和模版不能互相連結;主機組通常在給使用者或使用者組指派監控許可權時使用; 監控項(item):一個特定監控指標的相關的資料,這些資料來自於被監控物件;item是zabbix進行資料採集的核心,沒有item將沒有資料;相對某監控物件來說,每個item都由“key”進行標識; 觸發器(trigger):一個表示式,用於評估某監控物件的某特定item內所接受到的資料是否在合理範圍內,即閾值;接受到的資料量大於閾值時,觸發器狀態將從“OK”轉變為“Problem”,但資料在此迴歸到合理範圍時,其狀態將從“Problem”轉換回“OK”; 事件(event):即發生的一個值得關注的事情,如觸發器的狀態轉變,新的agent或重新上線的agent的自動註冊等; 動作(action):指對於特定事件事先定義的處理方法,通過包含操作(如傳送通知)和條件(何時執行操作); 報警升級(escalation):傳送報警或執行遠端命令的自定義方案,如每5分鐘傳送一次警報,共傳送5次等; 媒介(media):傳送通知的手段或通道,如Email,Jabber或SMS等; 通知(notification):通過選定的媒介向用戶傳送的有關某事件的資訊; 遠端命令(remote command):預定義的命令,可在被監控主機處於某特定條件時自動執行; 模版(template):用於快速定義被監控主機的預設條目集合,通常包含了item,trigger,graph,screen,application以及low-level discovery rule;模版可以直接連結至單個主機; 應用(application):一組item的集合; web場景(web scennario):用於檢測web站點可用性的一個或多個HTTP請求; 前端(frontend):Zabbix的web介面;

​​​​​​​3)zabbix的監控架構

在實際監控架構中,zabbix根據網路環境、監控規模等 分了三種架構: server-client 、master-node-client、server-proxy-client三種 。

1、server-client架構

也是zabbix的最簡單的架構,監控機和被監控機之間不經過任何代理 ,直接由zabbix server和zabbix agentd之間進行資料互動。適用於網路比較簡單,裝置比較少的監控環境 。

2、server-proxy-client架構

其中proxy是server、client之間溝通的一個橋樑,proxy本身沒有前端,而且其本身並不存放資料,只是將agentd發來的資料暫時存放,而後再提交給server 。該架構經常是和master-node-client架構做比較的架構 ,一般適用於跨機房、跨網路的中型網路架構的監控。

3、master-node-client架構

該架構是zabbix最複雜的監控架構,適用於跨網路、跨機房、裝置較多的大型環境 。每個node同時也是一個server端,node下面可以接proxy,也可以直接接client 。node有自已的配置檔案和資料庫,其要做的是將配置資訊和監控資料向master同步,master的故障或損壞對node其下架構的完整性。

三安裝zabbix

Zabbix需要資料庫的支援,而Zabbix已經自帶了資料庫結構,images資料庫和表資料等相關內容

1)建立zabbix使用資料庫

    mysql 
mysql> create database zabbix;
mysql> grant all on zabbix.* to [email protected] identified by 'zabbix';
mysql> flush privileges;
mysql> exit
tar xvf zabbix-3.2.3.tar.gz 
cd zabbix-3.2.3
mysql -uzabbix -pzabbix zabbix < database/mysql/schema.sql 
mysql -uzabbix -pzabbix zabbix < database/mysql/images.sql
mysql -uzabbix -pzabbix zabbix < database/mysql/data.sql

注:如果在做分散式的環境中,Proxy伺服器只需要一個數據庫schema,代理者agent不需要資料庫!Server必須三個資料庫同時擁有
Zabbix同時支援很多型別資料庫

2)編譯安裝zabbix

yum install -y net-snmp-devel #依賴包
ntpdate cn.pool.ntp.org #同步系統時間
crontab -e  #計劃任務
*/10 * * * * /usr/sbin/ntpdate cn.pool.ntp.org
 ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql=/usr/local/mysql/bin/mysql_config --with-net-snmp --with-libcurl && make && make install
 ls /usr/local/zabbix/
        bin  etc  lib  sbin  share 
vim /usr/local/zabbix/etc/zabbix_server.conf
DBHost=localhost #預設註釋掉了,直接取消註釋即可
DBName=zabbix #資料庫名字
DBUser=zabbix #預設是root,我們授權的使用者是zabbix
DBPassword=zabbix #密碼我們授權的也是zabbix

3)監控本身

vim /usr/local/zabbix/etc/zabbix_agentd.conf 
Server=127.0.0.1 #預設監控伺服器自己,這三行不用改
ServerActive=127.0.0.1
Hostname=Zabbix server
UnsafeUserParameters=1 #允許所用的字元是使用者定義的引數,引數傳遞,也就是支援自定義指令碼

注:其中Server和ServerActive都指定zabbixserver的IP地址,不同的是,前者是被動後者是主動。也就是說前者允許127.0.0.1這個ip來我這取資料。而serverActive的127.0.0.1的意思是,客戶端主動提交資料給zabbix server。

4)啟動服務

useradd -u 8005 -M -s /sbin/nologin zabbix    #如果zabbix使用者不存在,將以root執行,新建之後,如果zabbix存在,那麼就直接可以用zabbix執行
/usr/local/zabbix/sbin/zabbix_server  #直接執行
echo /usr/local/zabbix/sbin/zabbix_server >> /etc/rc.local  #開機啟動
netstat -antup | grep zabbix 
tcp        0      0 0.0.0.0:10051               0.0.0.0:*                   LISTEN      94837/zabbix_serverbix_server
vim /etc/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
通過啟動指令碼啟動zabbix
注:Zabbix預設有部分啟動指令碼,如果你自己也可以通過u指令碼的方式來實現,可以使用他的模板來實現。指令碼在原始碼目錄的misc/init.d/下面(使用fedora下面的core即可,也可以使用fedroa core5的指令碼均可)
cd /usr/src/zabbix-3.2.3/misc/init.d/ 
cp fedora/core/zabbix_server /etc/init.d/ 
cp fedora/core/zabbix_agentd /etc/init.d/
vim /etc/init.d/zabbix_server 
BASEDIR=/usr/local/zabbix  #找到此行,並修改
[[email protected] init.d]# vim /etc/init.d/zabbix_agentd
BASEDIR=/usr/local/zabbix  #找到此行,並修改
chkconfig --add zabbix_agentd 
chkconfig zabbix_agentd on 
chkconfig --add zabbix_server 
chkconfig zabbix_server on 
service zabbix_agentd start 
service zabbix_server restart

5)編輯php頁面控制檔案 (預設配置檔案沒有寫入到我們的Nginx的配置檔案中,也就是不能載入到我們的zabbix頁面目錄)

mkdir -p /tmp/nginxhtml
mv /usr/local/nginx/html/* /tmp/nginxhtml/ 
cp -r /usr/src/zabbix-3.2.3/frontends/php/* /usr/local/nginx/html/ 
vim /usr/local/nginx/conf/nginx.conf 
location / { 
root html; 
index index.php index.html index.htm; #找到此行內容,新增index.php
}
#重新載入nginx,重啟php-fpm
/usr/local/nginx/sbin/nginx -s reload ; /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
ln -s /usr/local/zabbix/etc/ /etc/zabbix
ln -s /usr/local/zabbix/bin/*  /usr/bin/
ln -s /usr/local/zabbix/sbin/*  /usr/sbin/

6)開啟網頁安裝zabbix(瀏覽器輸入:http:// 192.168.1.100 如圖,下一步Next

vim /usr/local/php/php.ini

post_max_size = 16M

max_execution_time = 300

max_input_time = 300

date.timezone = Asia/Shanghai

always_populate_raw_post_data = -1

/usr/local/nginx/sbin/nginx -s reload ; /etc/init.d/php-fpm restart

注:如果這裡出錯就將zabbix的檔案拷貝到/usr/local/nginx/html/conf/下,到這安裝完成了