1. Zabbix分佈式監控系統概述
Zabbix有三種監控架構,分別是Server-Agent、Server-Node-Agent和Server-Proxy-Agent。在大型環境中Zabbix有兩種解決方案,使用節點(Node)和使用代理(Proxy)
。使用節點和代理是有區別的:
① Proxy用於 本區域數據收集並將數據發送給Zabbix Server
,它不做分析監控以及數據展示。Proxy只有一個proxy的daemon進程,Proxy也有自己的數據庫(不完整的),但是它的數據庫只會保存一定時間的數據,它與Master通信是將一批信息打包後發送到Master。Master將這些數據merger到Master數據庫。
② Node提供完整的Zabbix Server用於 建立分佈式監控的層級
。Node本身是一臺Zabbix Server,它有 完整的Web頁面和完整的數據庫,它會將數據源源不斷地傳給Master
。
節點是重量級應用,而代理是輕量級的應用
。Master-Proxy相比Master-Node的優點有:Proxy壓力小,數據庫只存儲一定時間的數據;Master壓力變小,數據不是源源不斷獲取,減小IO壓力(Node是收集數據就發數據,Proxy是保存一定時間然後一次性發送
);架構更清晰,容易維護
(在Master的Zabbix Server集中統一配置)。
2. Server-Node-Agent架構特性
Server-Node-Agent架構是用來 解決主機過多時單臺Server面臨性能瓶頸
的問題。方案有使用多個實例,沒有實例是獨立的一套Zabbix,有數據庫和前臺(可選)。該架構支持熱插拔,Node和Server的連接可以隨時斷開,但不會影響Node的正常運行。Node定時向Server發送Configuration,History,Event等。Server定時給Node發送Configuration。所有的配置變更只能在Node節點操作
,不能在Server操作。支持樹狀結構,Node又可以是個Server。
3. Server-Proxy-Agent架構特性
Proxy不會向Server同步Configuration,只會接收。Proxy的數據庫會 定時將數據傳送給Server,本地數據庫只保存最近沒有發送的數據。
其實,Proxy僅僅是 數據收集器
,它不具有觸發器、生成事件或發送警報等功能。Zabbix Server的功能有:監控遠程區域;監控不可靠通信的位置;減輕Zabbix Server的壓力;簡化分佈式監控的維護;與Zabbix Server是單TCP連接的,這種方式很容易繞過防火牆,只需要配置一條防火牆規則。
注意:Zabbix Proxy必須使用一個單獨的數據庫,不可以於Server使用同一個數據庫。也不建議放到同一個物理服務器上
。
Zabbix的特性:
特性項 | 是否支持 |
---|---|
Zabbix agent checks | Yes |
Zabbix agent checks(active) | Yes |
Simple checks | Yes |
Trapper items | Yes |
SNMP checks | Yes |
SNMP traps | Yes |
IPMI checks | Yes |
JMX checks | Yes |
Log file monitoring | Yes |
Internal checks |
No |
SSH checks | Yes |
Telnet checks | Yes |
External checks | Yes |
Buit-in web monitering | Yes |
Network discovery | Yes |
Low-level discovery | Yes |
Calculating triggers |
No |
Processing events |
No |
Sending alerts |
No |
Remote commands |
No |
4. 分佈式監控的實現
準備3臺服務器,一臺做=作Zabbix Server,另外一臺作Zabbix Proxy,剩下一臺作Zabbix Proxy的Agent。這三臺服務器分別對應10.0.0.2、10.0.0.5和10.0.0.6。Zabbix Server和Zabbix Agent已經在前面介紹過,這裏不贅述。爲了測試方便,這裏把MySQL和Zabbix Proxy放在統一臺服務器上,首先安裝與配置數據庫:
# 安裝MySQL數據庫
[root@zabbix-proxy ~]# yum install mariadb-server
# 初始化數據庫
[root@zabbix-proxy ~]# mysql_secure_installation
# 設置開機自啓
[root@zabbix-proxy ~]# chkconfig mariadb on
# 創建zabbix_proxy數據庫
MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin;
# 創建新用戶並且授予權限
MariaDB [(none)]> grant all on zabbix_proxy.* to zbxuser@'%' identified by '123456';
# 刷新權限
MariaDB [(none)]> flush privileges;
安裝完成之後開始安裝Zabbix Proxy:
# 下載包含數據庫插件的Zabbix Proxy包
[root@zabbix-proxy ~]# wget https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-proxy-mysql-4.0.21-2.el7.x86_64.rpm
# 下載epel源
[root@zabbix-proxy ~]# wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm
# 安裝epel源(也可以使用rpm)
[root@zabbix-proxy ~]# yum install epel-release-7-12.noarch.rpm
# 安裝Zabbix Proxy。使用yum安裝會自動解決依賴問題,自動安裝依賴的fping等
[root@zabbix-proxy ~]# yum localinstall -y zabbix-proxy-mysql-4.0.21-2.el7.x86_64.rpm
# 設置Zabbix Proxy開機自啓
[root@zabbix-proxy ~]# chkconfig zabbix-proxy on
# 查看Zabbix Proxy是否啓動,以及佔用的端口
[root@zabbix-proxy ~]# netstat -tunlp|grep zabbix
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 1543/zabbix_proxy
tcp6 0 0 :::10051 :::* LISTEN 1543/zabbix_proxy
配置Zabbix Proxy連接Zabbix Server和MySQL:
# 查詢Zabbix Proxy初始數據
[root@zabbix-proxy ~]# rpm -ql zabbix-proxy-mysql
...
/usr/share/doc/zabbix-proxy-mysql-4.0.21/schema.sql.gz
...
# 解壓sql文件
[root@zabbix-proxy zabbix-proxy-mysql-4.0.21]# gunzip schema.sql.gz
# 把sql文件導入到數據庫
[root@zabbix-proxy zabbix-proxy-mysql-4.0.21]# mysql -uzbxuser -p zabbix_proxy<schema.sql
# 編輯Zabbix Proxy配置文件
[root@zabbix-proxy ~]# vim /etc/zabbix/zabbix_proxy.conf
# 查看需要已經修改過的記錄
[root@zabbix-proxy ~]# grep -Ev '^$|#' /etc/zabbix/zabbix_proxy.conf
Server=10.0.0.2 # Zabbix Server的地址
Hostname=Zabbix proxy # 主機名,Web頁面上添加代理的時候代理程序名要和這裏一致
...
DBHost=localhost # 數據庫的地址(我這裏在本地)
DBName=zabbix_proxy # 數據庫名
DBUser=zbxuser # 數據庫用戶名
DBPassword=123456 # 數據庫的密碼
...
# 修改完成後重啓Proxy
[root@zabbix-proxy ~]# systemctl restart zabbix-proxy
# 如果出問題了可以檢查日誌
[root@zabbix-proxy ~]# tailf /var/log/zabbix/zabbix_proxy.log
配置Zabbix Proxy的Agent:
# 編輯配置文件
[root@proxy-agent ~]# vim /etc/zabbix/zabbix_agentd.conf
# 查看需要已經修改過的記錄
[root@proxy-agent ~]# grep -Ev '^$|#' /etc/zabbix/zabbix_agentd.conf
...
Server=10.0.0.5
ServerActive=10.0.0.5 # 這裏不建議配置,否則日誌會報:failed to accept an incoming connection: connection from "10.0.0.2" rejected, allowed hosts: "10.0.0.5",實際上是沒有問題的
Hostname=Zabbix agent # 主機名。Web界面添加監控主機時,主機名稱一定與這裏完全一致
...
# 如果出問題了可以檢查日誌
[root@proxy-agent ~]# tailf /var/log/zabbix/zabbix_agentd.log
5. 分佈式監控性能調優
提高Zabbix Server和Zabbix Proxy同步數據的效率,可以減小Proxy向Server請求同步配置文件的時間,配置參數是ConfigFrequency,默認3600s同步一次配置。Zabbix Proxy向主服務器打包發一次數據的時間間隔減小,配置參數是DataSenderFrequency,當然系統默認就是1s:
[root@zabbix-proxy zabbix]# grep -Ev '^$|#' zabbix_proxy.conf
...
ConfigFrequency=3600
DataSenderFrequency=1
...
ProxyLocalBuffer是本地數據保存多久,Proxy收集來自各個Agent的數據要先保存在本地,然後打包發給主服務器,打包發給服務器後還要再保存多久
,如果設置了0就表示不保存。如果 Proxy聯繫不到主服務器
,也就是Zabbix Server,那麼 數據在本地保存的時間
由ProxyOfflineBuffer來配置,默認是1,表示1h:
[root@zabbix-proxy zabbix]# grep -Ev '^$|#' zabbix_proxy.conf
...
ProxyLocalBuffer=0
ProxyOfflineBuffer=1
...