zabbix的強大之處也在於它是分布式監控系統,對於多機房大集群情況下,肯定不是一台zabbix-server服務器來進行信息的收集等工作,就要用到代理了。在記錄zabbix-proxy之前,要系統的記錄一下zabbix的監控方式。
一、Zabbix監控方式
zabbix自帶多種類型的監控方式,大致分兩類:公共的協議和zabbix專業的協議。支持多種協議的監控方式,相應地也支持多種設備的監控,從而可以對復雜的網絡環境進行監控。
1.1支持的監控方式
官方鏈接:https://www.zabbix.com/documentation/3.2/manual/config/items/itemtypes
項類型覆蓋各種方法獲取數據從您的系統。 每個項目類型都有其自己的一組支持項鍵和必需的參數。目前由zabbix提供下列事項類型的支持
Zabbix agent checks #這些客戶端來進行數據采集,又分為Zabbix agent(被動模式:客戶端等着服務器端來要數據),Zabbix agent (active)(主動模式:客戶端主動發送數據到服務器端) SNMP agent checks #SNMP方式,如果要監控打印機網絡設備等支持SNMP設備的話,但是又不能安裝agent的設備。 SNMP traps IPMI checks #IPMI即智能平台管理接口,現在是業界通過的標准。用戶可以利用IPMI監視服務器的物理特性,如溫度、電壓、電扇工作狀態、電源供應以及機箱入侵等。 Simple checks #簡單檢查,選擇此方式后icmping主機判斷主機是否存活 VMware monitoring #VMware監控 Log file monitoring #監控日志文件 Calculated items #監控項的計算 Zabbix internal checks #內部檢查允許監控Zabbix的內部流程。 換句話說,您可以監視與Zabbix服務器或Zabbix代理到底發生了什么。 SSH checks #SSH檢查。Zabbix服務器必須執行SSH檢查最初的配置SSH2的支持。 Telnet checks #Telnet檢查。Telnet檢查表現為缺少代理的監控。 Zabbix代理不需要遠程登錄檢查。 External checks #Zabbix服務器執行的外部檢查是檢查通過運行shell腳本或二進制。外部檢查不需要任何代理被監控主機上運行。 Aggregate checks #總體檢查Zabbix服務器通過直接從項目收集匯總信息數據庫查詢。 Trapper items #陷阱項目接受傳入的數據,而不是查詢它。對於您可能要“推”到Zabbix的任何數據都是有用的。 JMX monitoring #java管理擴展,是java平台上為應用程序、設備、系統等植入管理功能的框架。JMX可以跨越一系列異構操作系統平台、系統體系架構和網絡傳輸協議,靈活地開發無縫集成的系統、網絡和服務管理應用。 ODBC checks #ODBC監控對應數據庫監控Zabbix前端項目類型。ODBC是一個C編程語言中間件API用於訪問數據庫管理系統(DBMS)。 ODBC的概念是由微軟,后來移植到其他平台。 #Zabbix可以查詢任何數據庫,支持ODBC。 為此,Zabbix不直接連接到數據庫,但是使用ODBC接口和ODBC驅動程序設置。 這個函數可以更有效地監控不同數據庫的多種用途——例如,檢查特定數據庫隊列,使用統計等等。 Zabbix支持unixODBC,這是一種最常用的開源ODBCAPI
1.2Agent監控方式
Agent分為主動和被動兩種方式.
Trapper監控方式
Trapper是發送任意的數據給Zabbix-server,采用主動推送的方式,Trapper不需要安裝客戶端,Key的名稱是可以靈活定義,在此工作模式下,Zabbix數據發送的程序是zabbix-sender,可以發送任何zabbix-server想要獲取的數據。
前面http://www.51niux.com/?id=147關於zabbix-sender命令介紹那里已經演示了trapper方式的使用。
#主要是主機添加Host name那里一定要是一個唯一的名稱,客戶端配置文件里面Host name那里定義的一定要和zabbix server端定義的Host name相一致。不然無法獲取trapper方式發送的數據。Type of information(信息類型)這里也一定要跟key所上傳數據類型一致,不然也是會失敗的。
在這種形式下,zabbix-server不會主動連接客戶端的IP,而是Trapper主動連接zabbix-server。
被動方式
Passive(被動模式),zabbix-server和zabbix-agent之間的通信是zabbix的專用協議,數據格式為JSON。默認情況下,zabbix-agent工作在被動模式下,工作的模式是由Key和zabbix_agentd.conf參數配置決定的。
被動模式的流程如下:
Server打開一個TCP連接。
Server發送一個key為agent.ping\n。
Agent接收到這個請求,然后響應數據<HEADER><DATALEN>1.
Server對接收到的數據進行處理。
TCP連接關閉。
主動方式
Active(主動模式),主動模式由於是Agent將采集到的數據主動發送給Server,而不需要Server每次連接Agent等待采集,所以采用主動模式會使Zabbix-Server具有最好的性能。在大型環境下,一定要將工作模式設置為主動模式,並盡可能采用更多的proxy以降低Server的負擔,一般多機房,每個機房肯定都要設置proxy的。
主動方式設置
客戶端的配置:/etc/zabbix/zabbix_agentd.conf配置文件中設置ServerActive=192.168.1.103(這個IP可以是server也可以是proxy的IP地址),然后重啟zabbix_agentd服務。
服務端的配置:服務器端items的檢測方式(Type)修改為Zabbix agent(active)
主動方式的請求周期
Agent向Server建立一個TCP的連接。
Agent請求需要檢測的數據列表。
Server響應Agent,發送一個Items列表(item key、delay)。
Agent響應請求。
TCP連接完成本次會話后關閉。
Agent開始周期性的收集數據。
#下面是Agent要向Server發送數據了:
Agent向Server建立一個TCP連接。
Agent發送在采集周期內,需要采集數據給Server.
Server處理Agent發送的數據。
TCP連接關閉。
二、zabbix-proxy搭建
2.1概述
官網鏈接:https://www.zabbix.com/documentation/3.2/manual/distributed_monitoring/proxies
zabbix proxy可以代替zabbix server檢索客戶端的數據,然后把數據匯報給zabbix server,並且在一定程度上分擔了zabbix server的壓力.zabbix proxy可以非常簡便的實現了集中式、分布式監控.
zabbix proxy使用場景:
監控遠程區域設備 監控本地網絡不穩定區域 當zabbix監控上千設備時,使用它來減輕server的壓力 簡化zabbix的維護
#代理需要Zabbix服務器只有一個TCP連接。 這種方式更容易繞過防火牆,你只需要配置一個防火牆規則。Zabbix代理必須使用一個單獨的數據庫。 代理服務器收集的所有數據都會在本地存儲,然后再發送到服務器。 這樣就不會因為服務器的任何臨時通信問題而丟失數據。 代理配置文件中的ProxyLocalBuffer和ProxyOfflineBuffer參數控制數據在本地保存多長時間。
proxy的配置文件參數:https://www.zabbix.com/documentation/3.2/manual/appendix/config/zabbix_proxy
Zabbix代理是一個數據收集器。 它不計算觸發,處理事件或發送警報。
2.2zabbix-proxy的安裝配置
zabbix-proxy環境准備
systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
zabbix-server准備環境:
1、server搭建完成,並可正常監控
2、保證telnet server的10050和10051端口正常(默認zabbix-server的ListenIP=127.0.0.1,這種情況下telnet 10051是失敗的,需要在后面加上服務器的IP地址)
zabbix-proxy操作
安裝必要的插件
yum install -y lrzsz wget gcc gcc-c++ vim
yum install mysql-connector-odbc mysql-devel libdbi-dbd-mysql net-snmp-devel curl-devel unixODBC-devel OpenIPMI-devel java-devel libssh2-devel -y
創建用戶和組
groupadd zabbix -g 201 useradd -g zabbix -u 201 -m zabbix
下載安裝包
wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.2.6/zabbix-3.2.6.tar.gz
安裝
#tar zxf zabbix-3.2.6.tar.gz #./configure --prefix=/usr/local/zabbix-3.2.6 --sysconfdir=/etc/zabbix --enable-proxy --enable-agent --enable-ipv6 --with-mysql=/usr/bin/mysql_config --with-net-snmp --with-libcurl --with-openipmi --with-unixodbc --with-ssh2 --enable-java #make #make install
#ln -s /usr/local/zabbix-3.2.6 /usr/local/zabbix_proxy
安裝mariadb或者msyql數據庫
yum install -y mariadb mariadb-server mariadb-devel
啟動數據庫,並設置為開機自啟動。
# systemctl start mariadb # systemctl enable mariadb
配置數據庫
mysqladmin -uroot password '123456' mysql -uroot -p123456 -e 'create database zabbix_proxy character set utf8;' mysql -uroot -p123456 -e "grant all privileges on zabbix_proxy.* to zabbix@localhost identified by 'zabbix';" mysql -uroot -p123456 -e "flush privileges;" mysql -uzabbix -pzabbix zabbix_proxy </root/zabbix-3.2.6/database/mysql/schema.sql
zabbix-proxy配置文件
#cd /etc/zabbix/ #cp zabbix_proxy.conf zabbix_proxy.conf.bak vim /etc/zabbix/zabbix_proxy.conf
配置文件內容(配置文件中不能有漢字)
erver=172.16.5.238 Hostname=zabbix_proxy_172.16.5.239 LogFile=/tmp/zabbix_proxy.log DBHost=localhost DBName=zabbix_proxy DBUser=zabbix DBPassword=zabbix ConfigFrequency=120 #主動去server端去拉去配置更新的頻率120秒一次 DataSenderFrequency=60 #發送采集的監控數據到服務器端,默認是1秒,我們一分鍾發送一次
啟動服務
/usr/local/zabbix_proxy/sbin/zabbix_proxy
zabbix-server端配置
下面是上圖中參數的介紹:
Proxy name : 輸入代理名稱。 它必須與代理配置文件中的Hostname參數中的名稱相同。 Proxy mode : 選擇代理模式。Active(主動模式) - 代理將連接到Zabbix服務器並請求配置數據.Passive(被動模式) - Zabbix服務器連接到代理。請注意,在使用活動代理時,沒有加密通信(敏感)代理配置數據可能可用於訪問Zabbix服務器陷阱端口的各方。 這是可能的,因為任何人都可以偽裝成活動代理,並且如果不發生身份驗證,則請求配置數據。 Hosts : 添加要由代理監視的主機。已經由另一個代理監視的主機在其他主機選項中顯示為灰色。 Description: 輸入代理描述。
下面是上圖中參數的介紹:
Connections to proxy:服務器如何連接到被動代理:無加密(默認),使用PSK(預共享密鑰)或證書。 Connections from proxy:從活動代理中選擇允許的連接類型。 可以同時選擇幾種連接類型(用於測試和切換到其他連接類型)。 默認為“無加密”。 #點擊Certificate之后又兩個參數: Issuer:允許頒發證書。 證書首先通過CA(認證機構)驗證。 如果CA有效,則由CA簽名,則可以使用Issuer字段來進一步限制允許的CA。 該字段是可選的,如果您的Zabbix安裝使用多個CA的證書,則使用該字段。 Subject:允許的證書。 證書首先通過CA驗證。 如果它有效,由CA簽名,則主題字段可用於僅允許Subject字符串的一個值。 如果此字段為空,則接受由配置的CA簽名的任何有效證書。 #點擊PSK之后又兩個參數: PSK identity:預共享密鑰身份字符串。 PSK : 預共享密鑰(hex-string)。 如果Zabbix使用mbed TLS(PolarSSL)庫,Zabbix將使用GnuTLS或OpenSSL庫,64位十六進制(32字節PSK),最大長度為512位十六進制數(256字節PSK)。 示例:1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952
客戶端配置
# vim /etc/zabbix/zabbix_agentd.conf #下面是要修改的地方
Server=172.16.5.239 #agentd被動模式下的server或者proxy的IP地址 ServerActive=172.16.5.239 #如果agentd端是被動模式的話,此條和下面那條並不非用配置,但是如果agentd端是主動模式的話,此條一定要配置上。 Hostname=172.16.5.240
# /etc/init.d/zabbix_agentd restart #重啟zabbix_agentd服務
proxy端測試一下:
/usr/local/zabbix-3.2.6/bin/zabbix_get -s 172.16.5.240 -k agent.ping
主動模式的使用
1、前面我們說了被動模式適合小型的監控模式,如果成百上千的話,我們盡量使用主動模式。但是怎么用呢?手動模式下只需要配置zabbix-agentd配置文件里面的Server=192.168.1.58參數即可,ServerActive=和Hostname=對zabbix來說不是很重要。但如果服務器要使用zabbix主動模式的話,必須這里要啟用ServerActive和Hostname,並且Hostname必須要和
2、就算是這樣也並沒有完全啟用主動模式,我們還需要修改windows和linux以及zabbix-agent模板的監控模式。這里我們之說linux,把監控項和自動發現里面的模板全都改成Zabbix客戶端(主動式)
ping檢測
1、我們知道zabbix-server已經有了fping的功能,不會的同學可以看https://www.cnblogs.com/lei0213/p/8859326.html這邊帖子。那只限於zabbix-server有了。這里zabbix-proxy並沒有這個功能。所以我們要單獨給proxy安裝fping,方法看也是這個帖子。
2、但是會報兩個錯誤。
錯誤一
At least one of '/usr/sbin/fping', '/usr/sbin/fping6' must exist. Both are missing in the system
他的意思你說你沒有安裝fping,我們安裝即可。但是proxy上沒有zabbix-server配置文件,所以這里我們只需要做軟連接到/usr/sbin/fping下就行。
錯誤二
fping failed: (null): can't create socket (must run as root?) : Permission denied
他的意思是說你的fping文件沒有權限,所以需要給他權限。
chmod 4755 /usr/sbin/fping或者chmod u+s /usr/sbin/fping
如下狀態都是已啟用就行。錯誤一和錯誤二都是在這里提醒的。
參考地址:http://www.51niux.com/?id=156