想要用好zabbix進行監控,那么我們首要需要了解下zabbix這個軟件的實現原理及它的架構。建議多閱讀官方文檔。
一、總體上zabbix的整體架構如下圖所示:
重要組件說明:
1)zabbix server:負責接收agent發送的報告信息的核心組件,所有配置、統計數據及操作數據都由它組織進行;
2)database storage:專用於存儲所有配置信息,以及由zabbix收集的數據;
3)web interface:zabbix的GUI接口;
4)proxy:可選組件,常用於監控節點很多的分布式環境中,代理server收集部分數據轉發到server,可以減輕server的壓力;
5)agent:部署在被監控的主機上,負責收集主機本地數據如cpu、內存、數據庫等數據發往server端或proxy端;
另外,zabbix server、proxy、agent都有自己的配置文件以及log文件,重要的參數需要在這里配置,后面會詳細說明。
一個監控系統運行的大概的流程是這樣的:
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秒之后重試。分兩個部分:
獲取ACTIVE ITEMS列表
- Agent打開TCP連接(主動檢測變成Agent打開)
- Agent請求items檢測列表
- Server返回items列表
- Agent 處理響應
- 關閉TCP連接
- Agent開始收集數據
主動檢測提交數據過程如下:
- Agent建立TCP連接
- Agent提交items列表收集的數據
- Server處理數據,並返回響應狀態
- 關閉TCP連接
【被動監測】通信過程如下:
- Server打開一個TCP連接
- Server發送請求agent.ping\n
- Agent接收到請求並且響應<HEADER><DATALEN>1
- Server處理接收到的數據1
- 關閉TCP連接
這里,有人可以看出來,被動模式每次都需要打開一個tcp連接,這樣當監控項越來越多時,就會出現server端性能問題了。
還有人會問,那實際監控中是用主動的還是被動的呢?這里主要涉及兩個地方:
1、新建監控項目時,選擇的是zabbix代理還是zabbix端點代理程式(主動式),前者是被動模式,后者是主動模式。
2、agentd配置文件中StartAgents參數的設置,如果為0,表示禁止被動模式,否則開啟。一般建議不要設置為0,因為監控項目很多時,可以部分使用主動,部分使用被動模式。
二、常用的監控架構平台
1、server-agentd模式:
這個是最簡單的架構了,常用於監控主機比較少的情況下。
2、server-proxy-agentd模式:
這個常用於比較多的機器,使用proxy進行分布式監控,有效的減輕server端的壓力。