Zabbix工作原理
什么是Zabbix?
zabbix 是一個基於 WEB 界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。(LAMP架構)
zabbix 能監視各種網絡參數,保證服務器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。
監控功能
主機的性能監控、網絡設備性能監控、數據庫性能監控、多種告警方式、詳細的報表圖表繪制;
可監控對象:
- 設備:服務器、路由器、交換機等
- 軟件:OS、網絡、應用程序等
- 主機性能指標監控
- 故障監控:宕機,服務器不可用,主機不可達
為什么需要對各類系統進行監控?
在系統構建時的正常流程中,通常是不允許未被監控的系統或應用上線的,因為未被監控的系統存在不可預知性、故障未知性等不穩定因素,
且無法及時被發現並排除。這對整個架構或系統來說都是很大的風險隱患。所以我們原則上是需要對整個架構或系統進行監控,
隨時監測系統各方面的指標是否正常,以提高整個系統的穩定性。
Zabbix是如何實現系統監控的?
一個完整的監控系統所需指標:
1.采樣:周期性的獲取某個被監測指標的相關數據
2.存儲:將采集到的數據存儲在指定的存儲系統中,Zabbix默認是MySQL
3.展示:采集完數據后,為了使數據能更直觀的展現在用戶面前,可將采集到的數據做二次處理,做成各類圖形。
Zabbix就是使用的PHP程序將采集的數據通過Web GUI直觀的展示給用戶。
4.報警:當監控的指標出現異常時需要監控系統能自動的發出告警信息,甚至在出現報警后能自動完成修復。
Zabbix支持的數據采集協議:
1.SNMP:(Simple Network Management Protocol),簡單網絡管理協議。這是一個非常古老的且通用的監控協議,
幾乎任何設備都支持用此方式進行系統監控。
2.Agent:在被監控端安裝專門的監控程序,將數據采集后通過Agent發送至Server。
3.IPMI:智能平台管理接口。可在常用的服務器上看到類似以太網口的接口。
4.JMX:Java Management Extensions
Zabbix的常用組件:
1.Zabbix Web GUI:提供Web界面
2.Zabbix Database:提供數據存儲功能,專用於存儲配置信息,以及采集到的數據
3.Zabbix Server:接收Agent采集數據的核心組件。
4.Zabbix Agent:部署在被監控主機上,用於采集本地數據。
5.Zabbix Proxy:當被監控節點較多時,用於減輕Server壓力的組件,也用於分布式監控系統。由Proxy接收數據后統一發送至Server。
zabbix架構圖:
Zabbix邏輯組件:
主機組(host groups):主機組通常在給用戶或用戶組指派監控權限時使用
主機(hosts):要監控的網絡設備,可由IP或DNS名稱指定
應用(application):一組item的集合(mysql,redis,nginx,等)
監控項(items):一個特定監控指標(比如mysql主從狀態)的相關的數據;這些數據來自於被監控對象;item是zabbix進行數據收集的核心,相對某個監控對象,每個item都由"key"標識
觸發器(triggers)一個表達式,用於評估某監控對象的特定item內接收到的數據是否在合理范圍內,也就是閾值;接收的數據量大於閾值時,觸發器狀態將從"OK"轉變為"Problem",當數據再次恢復到合理范圍,又轉變為"OK";
事件(events):觸發一個值得關注的事情,比如觸發器狀態轉變,新的agent或重新上線的agent的自動注冊等;
動作(actions):指對於特定事件事先定義的處理方法,如發送通知,何時執行操作
媒介(media):發送通知的通道,短信,郵件等
通知(notiflcations):通過選定的媒介向用戶發送的有關某事件的信息
遠程命令(remote command):預定義的命令,可在被監控主機處於某特定條件下時自動執行
報警升級(escalation):發送警報或者執行遠程命令的自定義方案,如每隔5分鍾發送一次警報,共發送5次等
模板(template):用於快速定義被監控主機的預設條目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接鏈接至某個主機
Zabbix實現監控的兩種模式:
簡單的講,主動模式和被動模式都是將Agent作為參照的
主動模式:由Agent主動建立TCP鏈接並向Server端發送請求。
被動模式:由Server建立TCP鏈接並向Agent端發送請求。
zabbix工作進程
默認情況下 zabbix 包含6個進程:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一個zabbix_java_gateway是可選的,這個需要單獨安裝。
zabbix_agentd
客戶端守護進程,此進程收集客戶端數據,例如cpu負載、內存、硬盤使用情況等。
zabbix_get
zabbix 工具,單獨使用的命令,通常在 server 或者 proxy 端執行獲取遠程客戶端信息的命令。通常用於排錯。例如在 server 端獲取不到客戶端的內存數據,可以使用 zabbix_get 獲取客戶端的內容的方式來做故障排查。
zabbix_sender
zabbix 工具,用於發送數據給 server 或者 proxy,通常用於耗時比較長的檢查。很多檢查非常耗時間,導致 zabbix 超時。於是在腳本執行完畢之后,使用 sender 主動提價數據。
zabbix_server
zabbix 服務端守護進程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的數據最終都是提交到server(說明:當然不是數據都是主動提交給zabbix_server,也有的是 server 主動去取數據)
zabbix_proxy
zabbix 代理守護進程。功能類似server,唯一不同的是它只是一個中轉站,它需要把收集到的數據提交/被提交到 server 里。
zabbix_java_gateway
zabbix2.0之后引入的一個功能。顧名思義:Java網絡,類似agentd,但是只用於 Java 方面。需要特別注意的是,它只能主動去獲取數據,而不能被動獲取數據。它的數據最終會給到 server 或者proxy。
歡迎進群討論:QQ群294668383(有意向可以添加)