企業級分佈式監控zabbix實戰——zabbix-proxy分佈式監控配置
1. Zabbix架構中的組件
2. 監控流程
一個監控系統運行的大概的流程是這樣的:
agentd需要安裝到被監控的主機上,它負責定期收集各項數據,併發送到zabbix server端,zabbix server將數據存儲到數據庫中,
zabbix web根據數據在前端進行展現和繪圖。這裏agentd收集數據分爲主動和被動兩種模式:
主動:agent請求server獲取主動的監控項列表,並主動將監控項內需要檢測的數據提交給server/proxy
被動:server向agent請求獲取監控項的數據,agent返回數據。
【主動監測】通信過程如下:
zabbix首先向ServerActive配置的IP請求獲取active items,獲取並提交active tiems數據值server或者proxy。
很多人會提出疑問:zabbix多久獲取一次active items?它會根據配置文件中的RefreshActiveChecks的頻率進行,
如果獲取失敗,那麼將會在60秒之後重試。分兩個部分:
*(1)獲取ACTIVE ITEMS列表
- Agent打開TCP連接(主動檢測變成Agent打開)
- Agent請求items檢測列表
- Server返回items列表
- Agent 處理響應
- 關閉TCP連接
- Agent開始收集數據
【被動監測】通信過程如下:
- (2)主動檢測提交數據過程如下
- Agent建立TCP連接
- Agent提交items列表收集的數據
- Server處理數據,並返回響應狀態
- 關閉TCP連接
【被動監測】通信過程如下:
-
Server打開一個TCP連接
-
Server發送請求agent.ping\n
-
Agent接收到請求並且響應
-
Server處理接收到的數據
-
關閉TCP連接
這裏,被動模式每次都需要打開一個tcp連接,這樣當監控項越來越多時,就會出現server端性能問題了。
那實際監控中是用主動的還是被動的呢?這裏主要涉及兩個地方:
1、新建監控項目時,選擇的是zabbix代理還是zabbix端點代理程式(主動式),前者是被動模式,後者是主動模式。
2、agentd配置文件中StartAgents參數的設置,如果爲0,表示禁止被動模式,否則開啓。 一般建議不要設置爲0,因爲監控項目很多時,可以部分使用主動,部分使用被動模式。
3. Zabbix邏輯架構
定義一個template模板,裏面包括多個items,trigger,graphs套用給host或者hostgroups。
server監控項目items通過zabbix poller進程(可以有多個進程實現併發處理)包括snmp,agent協議收集被監控主機信息。
如果閾值超過triggers觸發器規定,就是形成一個events事件,然後actions處理動作
(包括運行預先定製的腳本,不成功發送email或SMS)。
在服務器升級的時候提前設定maintenance維護模式不對服務器產生告警通知。
4. 常用的監控架構平臺
1、server-agentd模式:
這個是最簡單的架構了,常用於監控主機比較少的情況下。
2、server-proxy-agentd模式:
這個常用於比較多的機器,使用proxy進行分佈式監控,有效的減輕server端的壓力。
當需要監控的agent很多的時候,並且每個agent上面有很多的數據項被監控,這對於zabbix-server來說無疑是一種壓力
因此zabbix-server不再主動去找agent,而是由zabbix-proxy去主動找agent拿監控的數據,然後再發送給zabbix-server
這樣就可以緩解監控方zabbix-server的壓力
5. 搭建實驗環境
首先,刪除server3主機,因爲打算使用server3主機作爲zabbix-proxy
主機名(IP) | 服務名稱 |
---|---|
server1(172.25.60.1) | zabbix-server監控方 |
server2(172.25.60.2) | zabbix-agent被監控方 |
server3(172.25.60.3) | zabbix-proxy代理 |
5.1 在server3(zabbix-proxy代理)上進行配置
zabbix-server<----------zabbix-proxy------------>zabbix-agent
proxy主動去採集被監控方agent的數據然後再主動發給server
關閉agent服務,因爲要用server3作zabbix-proxy代理
在server3上面安裝zabbix-proxy
注意:使用yum源來安裝zabbix-proxy時會產生依賴性的問題,需要fping,因此將這兩個安裝包一起安裝
修改server3的主機名爲proxy,給三個節點添加地址解析
安裝數據庫,這裏的數據庫用來存放監控項模板
zabbix-server會告訴zabbix-proxy應該去拿哪些數據,因此zabbix-proxy也要有數據庫
開啓數據庫,進行數據庫的安全初始化
[root@proxy ~]# systemctl start mariadb.service
[root@proxy ~]# systemctl enable mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@proxy ~]# mysql_secure_installation
登陸數據庫,創建數據庫,用戶授權
[root@proxy ~]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 5.5.52-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix_proxy.* to zabbix@localhost identified by 'redhat';
Query OK, 0 rows affected (0.00 sec)
導入數據庫
編輯配置文件,開啓服務
vim /etc/zabbix/zabbix_proxy.conf
修改server爲server1的ip
主機名字改爲proxy, 端口號改爲10051
修改數據庫密碼
2.在web界面設置
管理—> agent代理程序 —>創建代理 —> 填寫信息 —>添加
在proxy上面設置
開啓proxy服務
查看日誌
cat /var/log/zabbix/zabbix_proxy.log
在server1上進行設置
查看日誌,發現報錯
在web界面設置
配置—> 主機 —> server2—> agent代理程序接口—> agent代理程序檢測 —> 更新
發現此時的server2前面會出現proxy
在agent(server2)上設置——server2 將server指向proxy
也就是server2和proxy通信
重新啓動服務,看日誌
在server1上重新加載,使得server1和proxy數據同步
查看日誌
重啓proxy,查看日誌
發現proxy可以收到server發給它的數據項模板
在agent上 server2 重啓服務,查看日誌
發現agent正常啓動
在web頁面刷新
發現agent的zabbix監控正常,但是jmx是灰色的
因爲agent是指向proxy的,但是proxy上面沒有javagateway服務
編輯proxy的配置文件,開啓proxy中的javagateway並且指向server端
重啓proxy查看日誌
再次刷新web JMX