Zabbix Proxy 分布式監控



簡介:

Zabbix 是一個分布式監控系統,它可以以一個中心點、多個分節點的模式運行,使用 proxy 能降低 Zabbix Server 的壓力,當然也帶來了成本~

適用范圍:跨機房、跨地域的網絡監控系統,可以監控擁有不可靠網絡連接的區域,簡化分布式監控的維護,分擔 Zabbix Server 壓力

例子:

公司有個項目或多個項目,在不同地域都有大批量的服務器需要被監控

總不能一個地域搭建一個 Zabbix Server 吧,這樣即不方便管理、也浪費資源,如果就一台 Zabbix Server 監控所有機器,又需要該機器有很好的性能 ( 機器量大,一台基本不可能實現 )

這時就可以使用 Proxy ,將 Zabbix Server 架設在公司內部或某個地方,每個地域放一台 Proxy 來收集該地域 Agent 的數據,然后傳給 Zabbix Server 。這樣是不是很方便 ?

一、Zabbix Proxy 主動模式 ( 可以用在 Proxy 沒有公網 IP ,但是可以訪問公網的情況下 )

Zabbix Server <- Zabbix Proxy -> Zabbix Agent

## 這次做的是 Proxy 的主動模式,所以是 Proxy 去請求 Zabbix Server,由於 Zabbix Agent 用的是被動模式,所以也是由 Zabbix Proxy 去請求 Zabbix Agent

Zabbix Server:192.168.214.40
Zabbix Proxy :192.168.214.10
Zabbix Agent :192.168.214.20

1、安裝 Zabbix Server ( 傳送門:http://www.cnblogs.com/wangxiaoqiangs/p/5336210.html )

2、安裝 Zabbix Proxy

# 需要安裝 Mysql ( 傳送門:http://www.cnblogs.com/wangxiaoqiangs/p/5336048.html )

下載地址:http://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.5/zabbix-2.4.5.tar.gz

shell > useradd -r -s /sbin/nologin zabbix # 創建 Zabbix 運行用戶

shell > wget http://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.5/zabbix-2.4.5.tar.gz

shell > tar zxf zabbix-2.4.5.tar.gz
shell > cd zabbix-2.4.5
shell > ./configure --prefix=/usr/local/zabbix --enable-agent --enable-proxy --with-mysql # --enable-agent 不是必須的 ( 如果不想監控 Proxy 的話 )
shell > make install

shell > cp /usr/local/src/zabbix-2.4.5/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/ # 復制 Agent 啟動腳本
shell > sed -i 's#BASEDIR=/usr/local#BASEDIR=/usr/local/zabbix#' /etc/init.d/zabbix_agentd # 修改 Zabbix 安裝路徑

shell > mysql

mysql> create database proxydb character set utf8; # 創建數據庫
mysql> grant all on proxydb.* to proxy@localhost identified by 'proxypass'; # 創建授權用戶
mysql> flush privileges; # 刷新授權表,雖然不需要~
mysql> use proxydb;
mysql> source /usr/local/src/zabbix-2.4.5/database/mysql/schema.sql # 導入數據,只導入這一個就可以了

shell > grep -vP '^$|#' /usr/local/zabbix/etc/zabbix_proxy.conf # 修改完后的配置文件如下 ( 當然還有一些性能方面的參數,這里沒有列出 )

ProxyMode=0                    # 0 代表 Proxy 處於主動模式,即:Proxy 主動去請求 Zabbix Server 獲取監控項;1 代表被動模式
Server=192.168.214.40          # Zabbix Server 地址,當 Proxy 處於被動模式時,不需要設置該項 ( 想想也能明白 )
ServerPort=10051               # Zabbix Server 監聽端口,同上只在 Proxy 為主動模式時生效
Hostname=my_proxy              # 這個很重要啦,跟 Agent 的 Hostname 一樣重要,待會要用
LogFile=/tmp/zabbix_proxy.log  # Proxy 日志文件位置
DBHost=localhost               # 連接哪里的數據庫
DBName=proxydb                 # 數據庫名
DBUser=proxy                   # 連接用戶
DBPassword=proxypass           # 用戶密碼
ConfigFrequency=60             # Proxy 向 Zabbix Server 請求監控項間隔,單位為 秒
DataSenderFrequency=60         # Proxy 向 Zabbix Server 發送監控數據間隔,單位為 秒

shell > /usr/local/zabbix/sbin/zabbix_proxy # 啟動 zabbix_proxy
shell > echo "/usr/local/zabbix/sbin/zabbix_proxy" >> /etc/rc.local # 加入開機啟動

shell > netstat -lnpt | grep zabbix_proxy
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 16073/zabbix_proxy

## 以上部分,Zabbix_proxy 就全部配置完了

shell > grep -vP '^$|#' /usr/local/zabbix/etc/zabbix_agentd.conf # 這是 Zabbix Proxy 上的 Agent 修改完后的配置文件
LogFile=/tmp/zabbix_agentd.log # Agent 日志文件位置
Server=192.168.214.10 # Zabbix Proxy 主機地址 ( 如果不使用 Proxy,就寫 Zabbix Server 主機地址 ),這里是被動模式,即:Agent 等待連接
Hostname=proxy_agent  # 同樣很重要,標識自己的,一會用到

shell > service zabbix_agentd start # 啟動 Agent

shell > netstat -lnpt | grep zabbix_agentd
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 16148/zabbix_agentd

shell > chkconfig --add zabbix_agentd # 加入開機啟動
shell > chkconfig --level 35 zabbix_agentd on

## 這上面這段是對 Agent 的配置

3、安裝 Zabbix Agent

shell > useradd -r -s /sbin/nologin zabbix # 創建 Zabbix 運行用戶

shell > wget http://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.5/zabbix-2.4.5.tar.gz

shell > tar zxf zabbix-2.4.5.tar.gz
shell > cd zabbix-2.4.5
shell > ./configure --prefix=/usr/local/zabbix --enable-agent # 安裝 Agent
shell > make install

shell > cp /usr/local/src/zabbix-2.4.5/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/ # 復制 Agent 啟動腳本
shell > sed -i 's#BASEDIR=/usr/local#BASEDIR=/usr/local/zabbix#' /etc/init.d/zabbix_agentd # 修改 Zabbix 安裝路徑

shell > grep -vP '^$|#' /usr/local/zabbix/etc/zabbix_agentd.conf # 這是 Zabbix Proxy 上的 Agent 修改完后的配置文件
LogFile=/tmp/zabbix_agentd.log # Agent 日志文件位置
Server=192.168.214.10 # Zabbix Proxy 主機地址 ( 如果不使用 Proxy,就寫 Zabbix Server 主機地址 ),這里是被動模式,即:Agent 等待連接
Hostname=node1_agent  # 同樣很重要,標識自己的,一會用到

shell > service zabbix_agentd start # 啟動 Agent

shell > netstat -lnpt | grep zabbix_agentd
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 16148/zabbix_agentd

shell > chkconfig --add zabbix_agentd # 加入開機啟動
shell > chkconfig --level 35 zabbix_agentd on

shell > iptables -A INPUT -p tcp --dport 10050 -j ACCEPT # 由於 Agent 使用被動模式,所以要開啟 TCP 10050 端口等待 Server 或 Proxy 連接
shell > service iptables save

## 以上部分就對 Zabbix Proxy , Zabbix Agent 全部做完了,剩下的部分在 Zabbix Server 的 Web 界面完成!

> Administration -> Proxies -> Create proxy

Proxy name : my_proxy             # 這里寫的是 Zabbix Proxy 配置文件中的 Hostname,必須要寫對
Proxy mode : Active                  # 這里選擇主動模式,因為 Zabbix Proxy 的配置文件中定義的是 0 ,主動模式

> Update                                 # 直接 Update 就可以了,如果主機已經事先添加好了,這里可以將對應的主機加入 Proxy hosts !其實都一樣

> Configuration -> Hosts -> Create host

Host name : node1_agent   # 這里寫的是 Zabbix Agent 配置文件中的 Hostname,必須寫對
Visible name :                    # 可寫可不寫,就是個顯示的名稱
Groups In groups :             # 將該主機放入哪個分組,可以通過下面的 New group 自定義一個分組
New group : Proxy              # 自定義的分組
Agent interfaces : 192.168.214.20 # Agent 主機 IP,監控哪台主機,寫哪台主機的地址
Monitored by proxy : my_proxy      # 選擇之前創建的代理

> Templates                                 # 第二個選項卡,選擇一個模板鏈接到主機
> Update

## 這樣就添加好了一個主機,並且使用了 my_proxy 代理模式

## 現在就可以去經過 Proxy 代理的 Agent 狀態了! 一切正常

二、Zabbix Proxy 被動模式 ( 可以用在 Zabbix Server 沒有公網 IP ,但是可以訪問公網的情況下 )

Zabbix Server -> Zabbix Proxy -> Zabbix Agent

## 這次做的是 Proxy 的被動模式,所以是 Zabbix Server 主動向 Proxy 發送監控項,Proxy 被動接收數據,由於 Zabbix Agent 用的是被動模式,所以由 Zabbix Proxy 去請求 Zabbix Agent

Zabbix Server:192.168.214.40
Zabbix Proxy :192.168.214.10
Zabbix Agent :192.168.214.20

## 環境還是這個環境,下面給出一些有變動、注意的地方

1、Zabbix Proxy 的配置文件

shell > grep -vP '^$|#' /usr/local/zabbix/etc/zabbix_proxy.conf
ProxyMode=1                      # 1 代表被動模式,即:Proxy 被動接收 Zabbix Server 發來的監控項
Hostname=my_proxy
LogFile=/tmp/zabbix_proxy.log
DBHost=localhost
DBName=proxydb
DBUser=proxy
DBPassword=proxypass

## 由於是被動模式,所以不需要知道 Zabbix Server 的 IP

2、Zabbix Agent 還使用原來的配置文件即可

3、Zabbix Server 中 Web 界面添加 Proxy 時需要注意

> Administration -> Proxies -> Create proxy

Proxy name : my_proxy       # 這里寫的是 Zabbix Proxy 配置文件中的 Hostname,必須要寫對
Proxy mode : Passive           # 這里選擇被動模式,因為 Zabbix Proxy 的配置文件中定義的是 1 ,被動模式

## 其余的都可以不變,就完成了 Proxy 的被動模式代理

## Proxy 的主、被動模式,跟將要被代理的 Agent 沒有關系,Zabbix Server 能不能直接訪問到 Agent 都不重要,只要 Proxy 能訪問到 Agent ,Server 能訪問到 Proxy 就可以 !

三、再來模擬一種情況

Zabbix Server <-> Route <-> Zabbix Proxy -> Zabbix Agent

## 這種情況:Proxy 跟 Agent 處於一個網段,並只有一個 IP ,Zabbix Server 又處於另一個地域的監控
## 這里的 <-> 指 Proxy 的不同模式,可以忽略

例子:Zabbix Server 安裝在了公司內部,Proxy 跟 Agent 在外省的某個機房中,並且處於局域網中,它們通過路由連接外網

Zabbix Server:192.168.214.40
Zabbix Proxy :172.16.0.10
Zabbix Agent :172.16.0.20

Route : 192.168.214.30 ( 外 )
: 172.16.0.50 ( 內 )

1、假定我已經將 Zabbix Server 映射到了公司的公網 IP ( 這個很好實現對吧 ) ,我現在的 Zabbix Server 的 IP 為 192.168.214.40

2、模擬路由

shell > ifconfig eth0:0 172.16.0.50/16 up # 添加一個模擬的內網地址

shell > vim /etc/sysctl.conf # 開啟路由轉發功能

net.ipv4.ip_forward = 1

shell > sysctl -p # 使改變生效

shell > iptables -t nat -A PREROUTING -d 192.168.214.30 -j DNAT --to 172.16.0.10
shell > iptables -t nat -A POSTROUTING -d 172.16.0.10 -j SNAT --to 172.16.0.50

# 添加兩條防火牆規則

## 測試:可以用一個比較笨,但是又很有效的方法來測試,Proxy 上裝個 httpd ,然后用 curl 或直接瀏覽器訪問 214.30 看能不能訪問到 0.10 上的 httpd ;或用 nmap 掃描端口

3、Zabbix Proxy 配置文件 ( 這里使用被動模式,主動也可以哦 )

shell > grep -vP '^$|#' /usr/local/zabbix/etc/zabbix_proxy.conf
ProxyMode=1                       # 1 代表被動模式,即:Proxy 被動接收 Zabbix Server 發來的監控項
Hostname=my_proxy
LogFile=/tmp/zabbix_proxy.log
DBHost=localhost
DBName=proxydb
DBUser=proxy
DBPassword=proxypass

4、Zabbix Agent 配置文件

shell > grep -vP '^$|#' /usr/local/zabbix/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
Server=172.16.0.10                # Zabbix Proxy 主機 IP
Hostname=node1_agent

5、Zabbix Server 中 Web 界面的配置

關於主機添加:

Agent interfaces : 172.16.0.20        # 被監控的主機 IP 、端口,其實都跟正常添加一樣

關於 Proxy:

Proxy mode : Passive                      # 被動模式
Interface : 192.168.214.30             # Route 的公網 IP ,因為對這個地址的請求已經轉到了實際的 Proxy 主機

## OK ,有路由的這種兩邊局域網的環境也用 Proxy 解決了監控問題了 !

四、沒有路由,但是 Proxy 有兩個 IP 地址,Zabbix Server 無法直接訪問到 Agent

Zabbix Server <-> Zabbix Proxy -> Zabbix Agent

## 來看看這種情況:Proxy 與 Agent 處於同一局域網,同時 Proxy 自身有公網 IP 能與 Zabbix Server 通信,但是 Server 無法直接訪問到 Agent

Zabbix Server:192.168.214.40
Zabbix Proxy :192.168.214.10 ( 外 )
172.16.0.10 ( 內 )
Zabbix Agent :172.16.0.20

1、Proxy 主機設置

shell > grep -vP '^$|#' /usr/local/zabbix/etc/zabbix_proxy.conf ( 這里使用主動模式,被動模式也可以哦 )

ProxyMode=0               # 0 代表 Proxy 處於主動模式,即:Proxy 主動去請求 Zabbix Server 獲取監控項
Server=192.168.214.40     # Zabbix Server 地址,當 Proxy 處於被動模式時,不需要設置該項 ( 想想也能明白 )
ServerPort=10051          # Zabbix Server 監聽端口,同上只在 Proxy 為主動模式時生效
Hostname=my_proxy         # 這個很重要啦,跟 Agent 的 Hostname 一樣重要,待會要用
LogFile=/tmp/zabbix_proxy.log # Proxy 日志文件位置
DBHost=localhost              # 連接哪里的數據庫
DBName=proxydb                # 數據庫名
DBUser=proxy                  # 連接用戶
DBPassword=proxypass          # 用戶密碼
ConfigFrequency=60            # Proxy 向 Zabbix Server 請求監控項間隔,單位為 秒
DataSenderFrequency=60        # Proxy 向 Zabbix Server 發送監控數據間隔,單位為 秒

shell > route add -net 172.16.0.0/16 gw 172.16.0.10 # 添加一條路由,否則會監控失敗 ( 注意啦 !)

2、Zabbix Agent 配置文件

shell > grep -vP '^$|#' /usr/local/zabbix/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
Server=172.16.0.10              # Zabbix Proxy 主機 IP ( 這里是內網 IP ,因為 Agent 是訪問不到外網的 )
Hostname=node1_agent

3、Zabbix Server 中 Web 界面的配置

關於主機添加:

Agent interfaces : 172.16.0.20    # 被監控的主機 IP 、端口,其實都跟正常添加一樣

關於 Proxy:

Proxy mode : Active                   # 主動模式,配置文件中定義 ( 如果使用被動模式,下面寫的 IP 就是 Proxy 的公網 IP )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM