一杯茶的時(shí)間,上手Zabbix
原創(chuàng)【51CTO.com原創(chuàng)稿件】 IT 運(yùn)維離不開系統(tǒng)監(jiān)控,就好像魚兒離不開水一樣。一款強(qiáng)大的監(jiān)控系統(tǒng)可以有力保證設(shè)備和業(yè)務(wù)的穩(wěn)定。
圖片來自 Pexels
在監(jiān)控系統(tǒng)層出不窮的今天,作為老牌監(jiān)控系統(tǒng)的 Zabbix 依然屹立在監(jiān)控系統(tǒng)之林。今天,我們來看看 Zabbix 的系統(tǒng)架構(gòu)以及運(yùn)作方式。
Zabbix 系統(tǒng)架構(gòu)
眾所周知,Zabbix 是一款優(yōu)秀的監(jiān)控系統(tǒng),可以針對互聯(lián)網(wǎng)中的設(shè)備和應(yīng)用進(jìn)行監(jiān)控。
在詳細(xì)介紹其實(shí)現(xiàn)方式之前,先來看看它的結(jié)構(gòu)圖:
Zabbix 架構(gòu)圖
從上圖可以看出,綠色的部分就是被監(jiān)控的設(shè)備,這個(gè)設(shè)備的類型可以是服務(wù)器,交換機(jī)或者是網(wǎng)絡(luò)打印機(jī)。
這些被監(jiān)控的設(shè)備被稱作為 Host,設(shè)備的分組稱作 Host Group,分組可以根據(jù)地域,機(jī)房,應(yīng)用來劃分。
從橙色部分-監(jiān)控方式可以看出,針對每個(gè) Host,Zabbix 會安裝 Zabbix Agent。
它是 Zabbix 在 Host 上的客戶端,負(fù)責(zé)將 Zabbix 需要監(jiān)控的信息上傳到 Zabbix Server 進(jìn)行分析和處理。
但并不是所有的網(wǎng)絡(luò)設(shè)備都可以安裝 Zabbix Agent,針對無法安裝的設(shè)備,只要支持 SNMP(Simple Network Management Protocol,簡單網(wǎng)絡(luò)管理協(xié)議)或者 IPMI(Intelligent Platform Management Interface,智能平臺管理接口)也是可以被監(jiān)控到的。
另外,如果需要監(jiān)控 Java 應(yīng)用程序,也可以通過 JMX 來實(shí)現(xiàn)。
同樣從橙色部分監(jiān)控內(nèi)容可以看出,Zabbix 通過 JMX 支持 Java 應(yīng)用程序監(jiān)控;通過 IPMI 支持硬件設(shè)備監(jiān)控;通過 SNMP 支持網(wǎng)絡(luò)設(shè)備。
綠色區(qū)域與藍(lán)色的 Zabbix Server 之間有一個(gè)雙向的箭頭,由 Zabbix Agent 直接到 Zabbix Server 的方式被稱為通用結(jié)構(gòu),類似常說的 C/S 架構(gòu)。
但在實(shí)際應(yīng)用中更多的使用分布式架構(gòu),也就是通過綠色區(qū)域先連接到黃色的 Zabbix Proxy,然后再連接到藍(lán)色 Zabbix Server 的這條路徑。
在圖右邊橙色的區(qū)域,是Zabbix的監(jiān)控服務(wù)器,其中 Zabbix Server 主要負(fù)責(zé)配置和接受/發(fā)送監(jiān)控信息(更多詳細(xì)功能后面介紹)。
處理完畢的信息會存儲到 Database 中,這里的 Database 可以指定 MySQL 或者 Oracle 以及其他數(shù)據(jù)庫源。
另外,還會提供 Zabbix UI 展示配置和監(jiān)控信息。不僅如此,還為第三方應(yīng)用提供了 Zabbix API,通過它來客制化 Zabbix 規(guī)則。
當(dāng)然從穩(wěn)定性考慮,可以通過 Keepalive 之類的軟件建立 Master,Slave 的 HA 機(jī)制。
Zabbix 構(gòu)建監(jiān)控系統(tǒng)過程
前面通過一張大圖介紹了 Zabbix 的體系結(jié)構(gòu),詳細(xì)對 Zabbix 的基本工作原理有了了解。
順著這個(gè)思路再來看看,Zabbix 架構(gòu)安裝和配置步驟:
Zabbix 架構(gòu)部署和配置示意圖
PS:下面會介紹 Zabbix 的整個(gè)部署和配置過程,涉及到安裝和配置的部分,都沒有標(biāo)注具體的命令。
如果有需要安裝和配置過程的同學(xué),可以下載 Zabbix 用戶手冊,這里因?yàn)槠脑虿徽归_描述。
Zabbix Server/Agent/UI 安裝配置
在 Zabbix 監(jiān)控服務(wù)器上,安裝 Zabbix Server 和 Zabbix UI(Web)。
Zabbix Server 用來接受和發(fā)送監(jiān)控詳細(xì),Zabbix UI(Web)用來對 Zabbix Server 的各項(xiàng)功能進(jìn)行配置。
同時(shí)在被監(jiān)控設(shè)備上,安裝 Zabbix Agent。在其安裝完畢以后,需要通過 zabbix_agenttd.conf 文件,對 Server 和 ServerActive 兩個(gè)參數(shù)進(jìn)行配置。
由于 Zabbix Agent 有被動(dòng)模式和主動(dòng)模式。被動(dòng)模式,是 Zabbix Server 從 Zabbix Agent 上獲取數(shù)據(jù)。
而主動(dòng)模式,是 Zabbix Agent 主動(dòng)將信息上傳到 Zabbix Server。因此,這兩個(gè)參數(shù)的內(nèi)容都指的是 Zabbix Server 的 IP 地址。
Server 配置的是被動(dòng)模式 Zabbix Server 的 IP,ServerActive 配置的是主動(dòng)模式 Zabbix Server 的 IP。
當(dāng)然,除此之外還需要更新防火墻配置,并打開 Zabbix 的訪問端口(10050 和 10051)。
最后,給這個(gè)被監(jiān)控的設(shè)備(Host),起一個(gè) Hostname,這個(gè)名字會在 Zabbix Server 端配置的時(shí)候用到。
Server 和 ServerActive 配置項(xiàng)
Host Groups/Hosts 配置
搞定 Zabbix Agent 以后,回到 Zabbix Server 上進(jìn)行配置。前提是 Zabbix Server 和 Zabbix UI(Web)已經(jīng)安裝完畢,可以通過 Zabbix UI(Web)訪問配置界面。
上文提到,每個(gè)被監(jiān)控的設(shè)備,都是一個(gè) Host,那么將多個(gè) Host 按照某種方式分組,這個(gè)分組就是 Host Groups。這里的分組方式有地理位置,業(yè)務(wù)單位,機(jī)器用途,系統(tǒng)版本等等。
建立一個(gè) Host Groups,然后在其中建立一個(gè) Host,這個(gè) Host 就是剛才安裝 Zabbix Agent 的設(shè)備在 Zabbix Server 上的概念設(shè)備。
在配置 Host 的時(shí)候,需要注意這里的 HostName 和被監(jiān)控設(shè)備中定義的 HostName 保持一致,方便辨識。配置的 IP 就是被監(jiān)控設(shè)備的 IP,端口號是 10050。
在 Zabbix Server 創(chuàng)建 Host 配置
Items 配置
配置完 Host 之后,就需要告訴 Zabbix 監(jiān)控 Host 中的什么數(shù)據(jù)。這個(gè)要監(jiān)控的數(shù)據(jù)就是監(jiān)控項(xiàng),也叫 Items。
Items 配置包括監(jiān)控?cái)?shù)據(jù)的方式,取值的數(shù)據(jù)類型,獲取數(shù)值的間隔,歷史數(shù)據(jù)保存時(shí)間,趨勢數(shù)據(jù)保存時(shí)間,監(jiān)控 Key 的分組等信息。
首選,需要選擇 Type,它是要監(jiān)聽的 Zabbix 客戶端的類型。一般來說,在安裝 Zabbix Agent 以后,這個(gè)類型就是 Zabbix Agent。也可以選擇 SNMP,IMPI 或者其他類型。
其次,需要注意 Key 的選擇,Key 是來確定具體監(jiān)控項(xiàng)的,對于同一個(gè) Host 來說它是唯一的。
Zabbix 默認(rèn)就帶有一些 Key 可供選擇,例如:vm.memory.size[total],就是獲取內(nèi)存大小的 Key。
由于是針對 Host 進(jìn)行配置的,所以也會指定對應(yīng)的 Host IP 和 Port。另外,還有一些其他的數(shù)據(jù)需要配置。
例如:數(shù)據(jù)更新間隔,更新周期,歷史數(shù)據(jù)保存天數(shù),趨勢數(shù)據(jù)保存天數(shù)等等。
Items 配置示例圖
細(xì)心的同學(xué)會發(fā)現(xiàn)上圖中還有一個(gè) Applications 的選項(xiàng)。它實(shí)際上是對 Items 的一個(gè)集合,例如:要監(jiān)控 MySQL,可以定義一個(gè) MySQL 的 Application。
把相關(guān)的 Items 包括 availability of MySQL,disk space,processor load,transactions per second,number of slow queries 全部放到這個(gè) Application 中方便選擇和管理。
Trigger 配置
前面提到,Items 是用來配置監(jiān)控什么數(shù)據(jù)的,而不判斷數(shù)據(jù)是否正常。那么,Trigger 的作用就是對采集的數(shù)據(jù)進(jìn)行判斷。
通常會設(shè)置判斷規(guī)則或者閥值,一旦滿足某種規(guī)則或者超過對應(yīng)的閥值就會產(chǎn)生一個(gè)事件。
同時(shí),Action 會對滿足條件的 Trigger 執(zhí)行操作。這些規(guī)則通過正則表達(dá)式來定義。
從接收消息到觸發(fā)動(dòng)作示意圖
信息經(jīng)過表達(dá)式判斷,會產(chǎn)生兩類 Trigger 狀態(tài),OK(正常)和 PROBLEM(異常)。
每個(gè) Trigger 會對應(yīng)一個(gè) Items,每個(gè) Items 會對應(yīng)多個(gè) Trigger。同時(shí),Trigger 又可以設(shè)置不同的事件級別,可以根據(jù)這些級別設(shè)置多重告警。
Trigger 事件級別示意圖
在配置 Trigger 的時(shí)候主要是添加正則表達(dá)式。Zabbix 會根據(jù)對應(yīng) Item 的 Function 生成對應(yīng)的正則表達(dá)式。
Trigger 會根據(jù)監(jiān)控的內(nèi)容(Item)來配置,例如:Item 是檢測 Linux 的登陸人數(shù)。選擇 Item 為“Template OS linux:Number of logged in users”。
對應(yīng)的 Function 是 Last(most recent) T value is = N。意思是獲取最近登陸的人數(shù) T,當(dāng) T 等于 N 的時(shí)候觸發(fā) Trigger。
這個(gè) N 就是需要我們配置的值,比如填寫 2。也就是登陸人數(shù)等于 2 的時(shí)候觸發(fā) Trigger。
當(dāng)你配置完畢以后就會生成類似如下圖正則表達(dá)式了,{Template OS Linux:system.users.num.last()}>2。
整個(gè)過程不需要你輸入表達(dá)式,只要通過選擇和配置就可以完成。
Trigger 配置示例圖,內(nèi)容和文中描述有差異,表達(dá)的意思相同
上圖有一個(gè) Tab 項(xiàng)叫做 Dependencies,這個(gè)是 Trigger 的告警依賴,在實(shí)際場景中非常有用。
它會針對特殊場景使用,例如:整個(gè) IDC 機(jī)房的路由出現(xiàn)故障,那么機(jī)房所有的機(jī)器的網(wǎng)絡(luò)狀態(tài)都會出現(xiàn)異常,此時(shí) Zabbix Server 會收到大量異常報(bào)警。運(yùn)維人員會被報(bào)警信息淹沒,不知道故障的真正原因。
此時(shí),就可以在 Dependencies 中選擇對應(yīng)規(guī)則,并且勾選 Multiple PROBLEM events generation 選項(xiàng)。
之后,就會收到一條報(bào)警信息,“某某 IDC 機(jī)房路由器 X 發(fā)生故障”,對其他的報(bào)警信息做了聚合操作。
Action 配置
如果說 Trigger 定義觸發(fā)事件的規(guī)則,那么 Action 就是事件觸發(fā)后的動(dòng)作。即當(dāng) Trigger 條件被滿足以后,Action 會執(zhí)行一些操作。
比如:發(fā)送事件通知(短信,釘釘,郵件),遠(yuǎn)程執(zhí)行命令(重啟服務(wù))。
Action 的配置需要遵從下圖幾個(gè)步驟:
Zabbix 中有多種事件類型,Trigger 只是其中一種,例如:自動(dòng)發(fā)現(xiàn)監(jiān)控設(shè)備,自動(dòng)注冊監(jiān)控設(shè)備等等。因此,先要選擇事件的來源,當(dāng)然這里我們選擇 Trigger 作為來源。
Action 選擇事件來源
然后,填寫 Action 的基本信息。例如:名字,主題,默認(rèn)發(fā)送的信息內(nèi)容,異常恢復(fù)主題,以及對應(yīng)的信息內(nèi)容。這里的填寫可以是字符串,但是更多的會使用宏。
其實(shí)就是替換字符,比如{TRIGGER.STATUS} 表示觸發(fā)器的狀態(tài),{ITEM.NAME} 表示監(jiān)控項(xiàng)的名字。通過這些宏和字符串的拼接形成最終的信息。
如下圖顯示:
Action 基本信息
接下來,就是對條件的配置(Condition)。由于 Action 可以面對一個(gè)或者多個(gè) Trigger,每日每個(gè) Trigger 又有一個(gè)或者多個(gè)條件。
為了保證其靈活性,可以針對 AND,OR,AND/OR,對條件進(jìn)行組合。
例如:可以用“AND”條件,將 Maintenance status not in maintenance (機(jī)器不在維護(hù)狀態(tài))和 Trigger value = PROBLEM(觸發(fā)器異常)兩個(gè)條件(Condition)組合起來,意思是當(dāng)兩個(gè)條件同時(shí)滿足時(shí)觸發(fā)后續(xù)操作。
Conditions 是配置示例圖
最后,就是操作(Operation)的配置。包括執(zhí)行操作的時(shí)間間隔,執(zhí)行次數(shù),每次執(zhí)行的間隔,操作類型(發(fā)送消息,執(zhí)行命令),發(fā)送給哪些用戶/用戶組等等。
Operation 配置示例圖
Template 配置
如果有很多監(jiān)控設(shè)備需要配置,是有工作量的。于是,Zabbix 會將有相同 Item,Trigger,Application 等規(guī)則項(xiàng)放到一起,于是就有了模版(Template)。
當(dāng)對同類型的設(shè)備需要配置監(jiān)控項(xiàng)時(shí),就可以選擇現(xiàn)成的模版。從而,減少運(yùn)維工程師的工作量。在創(chuàng)建模版的時(shí)候,需要輸入模版名字,以及對應(yīng)的分組。
模版基本信息
如果需要繼承模版,可以在 Linked template 中進(jìn)行配置。模版繼承可以理解為模板嵌套。
例如,事先定義了一個(gè)基礎(chǔ)模板,Item 配置好了 CPU、內(nèi)存、硬盤、網(wǎng)卡等信息。
如果需要在這個(gè)基礎(chǔ)模版上擴(kuò)展其他模版,比如:MySQL 監(jiān)控模版或者 Web 監(jiān)控模板。那么在配置模板的時(shí)候,就可以繼承于基礎(chǔ)模板,而不需要重新定義模版。
模版創(chuàng)建完畢后,就可以添加 Item,Trigger,Application 等信息,具體的方式類似 Item,Trigger 配置。
上面大段的文字講述了 Zabbix 構(gòu)建監(jiān)控系統(tǒng)的過程。為了方便記憶,這里做個(gè)總結(jié)。
Zabbix 構(gòu)建監(jiān)控系統(tǒng),先安裝 Zabbix Agent 到 Host 收集信息,Zabbix Server 用來獲取信息,Zabbix UI(Web)用來展示和配置信息。
Zabbix Agent 在 Host 中配置好監(jiān)控服務(wù)器的 IP 和 Port 之后,回到 Zabbix Server 上,通過 Zabbix UI(Web)對要監(jiān)控的 Host(被監(jiān)控設(shè)備)進(jìn)行配置。
依次配置:Item(監(jiān)控什么數(shù)據(jù)),Trigger(故障觸發(fā)條件),Action(故障觸發(fā)動(dòng)作)。
Zabbix 監(jiān)控方式
了解完了 Zabbix 的架構(gòu)和 Zabbix 構(gòu)建的過程,再來看看 Zabbix 的監(jiān)控方式。前面談到的 Zabbix Agent 監(jiān)控,只是 Zabbix 監(jiān)控方式的一種。
針對不同情況,Zabbix 還提供了 SNMP,IPMI,JMX 等多種方式。即使是 Zabbix Agent 的方式,也分為主動(dòng)和被動(dòng)兩種。
下圖描述了 Zabbix 的幾種監(jiān)控方式與 Zabbix Server 之間的關(guān)系:
Zabbix 監(jiān)控方式邏輯圖
Zabbix Agent 監(jiān)控方式
該方式有 Active(主動(dòng)模式)和 Passive(被動(dòng)模式)。Zabbix Server 和 Zabbix Agent 之間的通信是通過 Zabbix 專用協(xié)議完成的,數(shù)據(jù)格式為 JSON。
①Zabbix Agent 被動(dòng)模式
默認(rèn)情況下,Zabbix Agent 工作在被動(dòng)模式下,是由 Zabbix Server 向 Zabbix Agent 獲取信息。
在安裝完 Zabbix Agent 以后,通過 zabbix_agentd.conf 文件中的 Server 參數(shù),設(shè)置被動(dòng)數(shù)據(jù)采集的 IP。
被動(dòng)模式流程圖
Zabbix Agent 與 Zabbix Server 通訊流程如上圖:
- Zabbix Server 打開一個(gè) TCP 連接。
- Server 發(fā)送一個(gè) Key(agent.ping\n)給 Zabbix Agent。
- Zabbix Agent 接收到請求,并且響應(yīng)請求,發(fā)送內(nèi)容為
- 的信息給 Zabbix Server。
- Server 接收返回的數(shù)據(jù),并且進(jìn)行處理。
- Server 關(guān)閉 TCP 連接。
②Zabbix Agent 主動(dòng)模式 這種模式 Zabbix Agent 會主動(dòng)上報(bào)監(jiān)控信息到 Zabbix Server??梢酝ㄟ^ zabbix_agentd.conf 文件中的 ActiveServer 參數(shù)配置 Zabbix Server 的 IP。 同時(shí)需要配置 Zabbix Server 上 Items 的 Type,設(shè)置為 Zabbix agent(active)即可。 主動(dòng)模式流程圖 依舊來看看主動(dòng)流程圖: SNMP 監(jiān)控方式 它是一個(gè)標(biāo)準(zhǔn)的用于管理基于 IP 網(wǎng)絡(luò)設(shè)備的協(xié)議,包括:路由器,交換機(jī),UPS,打印機(jī)。特別是當(dāng)被監(jiān)控設(shè)備無法安裝 Zabbix Agent 的時(shí)候。 先一起來看看 SNMP 的架構(gòu),如下圖: SNMP 架構(gòu)圖 NMS 是 Network Management System(網(wǎng)絡(luò)管理系統(tǒng),又名網(wǎng)絡(luò)管理站),這部分被集成到了 Zabbix Server 中了。 Agent 是 SNMP 訪問的代理,為設(shè)備提供 SNMP 的能力,負(fù)責(zé)設(shè)備與 NMS 進(jìn)行通訊。 MIB(Management Information Base)是一個(gè)數(shù)據(jù)庫,包含了被管理設(shè)備維護(hù)的變量。例如:內(nèi)存空間,磁盤大小。 它通常是以一個(gè)樹形結(jié)構(gòu)存在的,每個(gè)葉子結(jié)點(diǎn)都保存一條數(shù)據(jù),通過 OID(Object Identifier)唯一標(biāo)識一條記錄。 MIB 樹形結(jié)構(gòu)圖 例如上圖,想表示通用中的 System 參數(shù),就通過 1.3.6.1.2.1.1。如果是私人企業(yè)的記錄,就是在 1.3.6.1.4.1 下面。 NMS 通過 SNMP 與設(shè)備上的 Agent 進(jìn)行通信,獲取/修改 MIB 上面的信息。目前 SNMP 有三個(gè)版本,每個(gè)版本都在之前版本的基礎(chǔ)上逐步升級。 SNMP 版本示例圖 以第三個(gè)版本為例,在原來請求和響應(yīng)的基礎(chǔ)上,加入 PDU 算法對報(bào)文進(jìn)行了加密和解密操作。 SNMPv3 版本傳輸示意圖 IPMI 監(jiān)控方式 IPMI(Intelligent Platform Management Interface)即智能平臺管理接口,原本是 Intel 架構(gòu)中企業(yè)系統(tǒng)的周邊設(shè)備采用的一種工業(yè)標(biāo)準(zhǔn),后來成為業(yè)界的通用標(biāo)準(zhǔn)。 用戶可以通過 IPMI 監(jiān)視服務(wù)器的物理特征,例如:溫度,電壓,電風(fēng)扇工作狀態(tài),電源供應(yīng)等。 IPMI 獨(dú)立于 CPU BIOS 和操作系統(tǒng),也就是在缺少操作系統(tǒng)和管理軟件的情況下,依舊可以對硬件信息進(jìn)行監(jiān)控。在 Zabbix 中的具體配置,這里不展開描述。 JMX 監(jiān)控方式 JMX(Java Management Extensions)是為 Java 應(yīng)用程序植入管理功能的框架。也是一套標(biāo)準(zhǔn)的代理和服務(wù),用戶可以在任何 Java 應(yīng)用程序中使用它。 在 Zabbix 中,JMX 監(jiān)控?cái)?shù)據(jù)的獲取由專門的代理程序來實(shí)現(xiàn),即 Zabbix Java Gateway 負(fù)責(zé)采集數(shù)據(jù),它和 JMX 的 Java 程序之間通信獲取數(shù)據(jù)。 Zabbix-Server 和 Zabbix Java Gateway 如下圖所示: JMX 示意圖 這里需要幾個(gè)步驟部署 JMX,如下: 總結(jié) 作為老牌的監(jiān)控系統(tǒng),Zabbix 的架構(gòu)包括了被監(jiān)控設(shè)備和 Zabbix 監(jiān)控服務(wù)器兩大部分。 Zabbix Agent 運(yùn)行在被監(jiān)控設(shè)備上,負(fù)責(zé)和 Zabbix Server 通信獲取和控制被監(jiān)控設(shè)備,它有主動(dòng)和被動(dòng)兩種工作模式。 Zabbix Server 作為監(jiān)控核心,可以直接與 Zabbix Agent 連接也可以通過 Zabbix Proxy 進(jìn)行連接,再由 Zabbix Proxy 連接 Zabbix Agent。后面這種方式用在分布式監(jiān)控的場景。 Zabbix Server 獲取的數(shù)據(jù)存放到 Zabbix Server 的數(shù)據(jù)庫中,Zabbix UI(Web)可以讀取服務(wù)器中的數(shù)據(jù),通過圖表的方式展示出來。 Zabbix 構(gòu)建過程,分為安裝 Zabbix Agent/Server/UI,Host 配置,Item 配置,Trigger 配置,Action 配置。 這個(gè)配置過程完美地回答了,“監(jiān)控誰?監(jiān)控什么?出現(xiàn)異常以后如何處理?”的問題。 最后,針對不同應(yīng)用場景,Zabbix 還支持多種監(jiān)控方式,有 Zabbix Agent,SNMP,IPMI 以及 JMX。 作者:崔皓 簡介:十六年開發(fā)和架構(gòu)經(jīng)驗(yàn),曾擔(dān)任過惠普武漢交付中心技術(shù)專家,需求分析師,項(xiàng)目經(jīng)理,后在創(chuàng)業(yè)公司擔(dān)任技術(shù)/產(chǎn)品經(jīng)理。善于學(xué)習(xí),樂于分享。目前專注于技術(shù)架構(gòu)與研發(fā)管理。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請注明原文作者和出處為51CTO.com】