【監控體系】最全面系統的Zabbix講解 | 含原始碼&監控型別整理

語言: CN / TW / HK

 

主講人:王鴻傑,雲智慧/企業效能部/架構師

講師簡介:雲智慧架構師,PHP/PECL 開發組成員,PECL/SeasClick、PECL/SeasLog Maintainer。6 年研發經驗,2018 年加入透視寶團隊,致力於 APM 產品的架構與研發,專注於服務的效能分析與優化。2021 年加入效能工程團隊,為高效而生,立足於使用最少的資源來解決最大的問題,研究各種不同的 bot 技術,讓整個團隊更高效運轉。

 

公司簡介:雲智慧集團成立於2009年,是國內領先的全棧智慧業務運維解決方案服務商。經過多年自主研發,公司形成了從IT運維、電力運維到IoT運維的產業佈局,覆蓋ITOM、ITOA、ITSM、DevOps以及IoT幾大領域,為金融、政府、運營商、能源、交通、製造等上百家行業的客戶,提供了數字化運維體系建設及全生命週期運維管理解決方案。雲智慧秉承Make Digital Online的使命,致力於通過先進的產品技術,為企業數字化轉型和提升IT運營效率持續賦能。

從本篇內容你能得到:

1. Zabbix是什麼、能做到什麼

2. Zabbix元件詳解、架構和處理工作流程

3. Zabbix各監控項型別的採集實現(SNMP、ICMP、Ping、簡單檢查等)

4. Zabbix 模板組成結構與實現

5. Zabbix Agent原始碼結構與實現分析

6. Zabbix 自動發現邏輯的原始碼結構與實現詳解

全棧監控是什麼?

監控一切需要監控的東西,只要能夠想到,能夠用命令實現的都能用來監控。

基礎層:主要偏硬體,監控主機和底層資源。比如cpu、 記憶體、網路吞吐、硬碟I/O、硬碟使用等

中間層:包括nginx、Redis、MQ、MySQL、 Tomcat等

應用層: HTTP訪問的吞吐量、響應時間、 返回碼、呼叫鏈路分析、效能瓶頸, 還包括使用者端的監控等

日誌:syslog、nginx log、mysql log等

為什麼使用Zabbix?

目前開源的解決方案中,Zabbix和Prometheus是使用較多的兩個方案,這兩個方案的區別和優勢是什麼?

對於偏傳統的行業,雲環境較少的場景下,是比較適合於Zabbix的使用,當然Prometheus是未來發展的方向。

Zabbix是什麼?

Zabbix原始碼主要組成:

frontends:php,主要負責前端的業務操作

Zabbix agent:採集資料

Zabbx server:同步配置,處理資料,分析告警等。

Zabbix處理流程:

主要由四部分組成:

Portal-DB-Server-Agent

詳細的工作流程如下:

詳細流程可檢視下圖:

Zabbix是怎麼做的?

Zabbix Process

  1. 當新增(自動發現)一個 host,並且為 host 新增對應的模板的時候,Portal 會解析出來對應的 item, preprocess,trigger 然後放在對應的 Db 表裡面。

  2. Server 的 dbconfig_thread 會從 Db 拿到對應的資料放在共享記憶體中,然後poller_thread 程序讀取到對應的 items,開啟與 Agent 建立連線,遍歷 items 從 Agent(snmp,簡單檢查 等) 獲取到對應的指標資料

  3. 然後將 指標資料給 preprocessing_manager_thread 程序,preprocessing_manager_thread 程序會安排對應的preprocessing_worker 程序對資料進行 preprocess

  4. 最後由 dbsyncer_thread 程序將資料放入 Db 中,Portal 介面從 Db 拿到對應的資料資訊繪製和顯示

  5. dbsyncer_thread 同步資料到DB,遍歷資料 並計算 expression 表示式計算指標,最後觸發 escalator_thread 和 alerter_thread 做出相應的動作。

  6. 對於可監控指標,Agent 自帶多種可監控指標 cmd,Agent 只能監控內建的監控指標,可以通過外掛拓展 可監控指標。

Zabbix Server

  • dbconfig_thread: 配置同步到共享記憶體,保證所有程序都可讀

  • poller_thread: 主動監控,解析 items 呼叫 Agent

  • *trapper_thread: 收集 Agent 上報上來的資料

  • pinger_thread: 定期 ping 所有監控主機,簡單檢查 ICMP

  • *alerter_thread: 告警訊息處理程序從 IPC 讀出需要發動的訊息,發出告警

  • housekeeper_thread: 管家程序,過期資料清理

  • discoverer_thread: 主機、服務的自動發現

  • escalator_thread: 根據觸發器的值判斷是否告警,具體執行什麼動作

  • dbsyncer_thread:同步資料到 db,並計算觸發器值也同步到db

  • selfmon_thread: 自監控

  • preprocessing_worker_thread: 資料預處理程序,資料從 poller 和 trapper 程序過來

Zabbix Agent

  • collector_thread 週期採集基礎資訊,主要是記憶體和 CPU,儲存於共享記憶體中

  • listener_thread 用於接收 server 或者 proxy 分配的的採集任務,被動采采集

  • active_checks_thread 主動採集上報

指標型別

按程序(處理方式)劃分指標型別

Poller 程序(被動)

  1. 1. snmp|SNMP代理檢查

  2. simple_checks|簡單檢查(應用層狀態檢查)

  3. calculated|計算監控項

  4. internal|Zabbix內部檢查

  5. ssh_checks|SSH檢查

  6. telnet_checks|Telnet檢查

  7. external|外部檢查

  8. aggregate|彙總檢查

  9. odbc_checks|ODBC監控

httppoller 程序(被動)

  • http|HTTP 檢查

ipmi_poller_thread 程序(被動)

  • ipmi|IPMI檢查

icmp pinger 程序(被動)

  • simple_checks|簡單檢查(icmp 檢查)

trapper 程序(主動)

  1. trapper|捕捉器監控項

  2. log_items|日誌檔案監控

  3. snmptrap|SNMP traps

preprocess 程序(Follow me)

  • dependent_items|相關專案(從屬監控項)

按客戶端依賴劃分指標型別

無依賴

  1. snmp|SNMP代理檢查

  2. ipmi|IPMI檢查

  3. simple_checks|簡單檢查

  4. external|外部檢查

  5. odbc_checks|ODBC監控

依賴其他監控項

  1. calculated|計算監控項

  2. aggregate|彙總檢查

依賴第三方

  1. zabbix_agent|Zabbix代理檢查 (Agent)

  2. snmptrap|SNMP traps (snmptrap)

  3. log_items|日誌檔案監控 (Agent)

  4. ssh_checks|SSH檢查 (ssh 祕鑰或密碼)

  5. telnet_checks|Telnet檢查 (Telnet Server和 Telnet 密碼)

  6. trapper|捕捉器監控項 (Zabbix Sender)

  7. http|HTTP 檢查 (http 介面)

IDEA

被動監控對 Zabbix Server 來說會有大的壓力

從監控型別來看,Zabbix 更多的是被動監控,主動監控只有 Agent Active、SnmpTrap,Sender,但是由於 Zabbix Agent 的強大,很多場景下主動監控的指標覆蓋度完全能跟被動監控硬懟。

所以要根據具體監控場景,主動和被動互相搭配,耗時的指標更加傾向於主動監控。

Zabbix監控項型別梳理

附件:

請您新增:xiaoyuerwise,備註“附件”獲取,或從本文底部掃碼獲取。

 

Zabbix的自動發現

自動發現是伴隨著指標監控來的,當發現能有采集到預設的指標時,這臺主機就會被標記為可用,然後觸發預設的Action,通知或者自動新增監控模板等。

自動發現分類

  1. 簡單檢查類

  2. Agent 型別

  3. snmp 型別

  4. ICMP (ping) 型別

自動發現流程

  1. 配置 IP 段

  2. 配置自動發現指標

  3. 配置發現動作 Action

  4. 發現主機後新增 event

  5. escalator_thread 程序處理對應的 event

Zabbix的模板結構

模板結構

從屬指標

計算指標

Agent原始碼

附件:

請您新增:xiaoyuerwise,備註“附件”獲取,或從本文底部掃碼獲取。

 

 

寫在最後

近年來,在AIOps領域極速發展的背景下,IT工具、平臺能力、解決方案、AI場景及可用資料集的迫切需求在各行業迸發。基於此,雲智慧在2021年8月釋出了AIOps社群,旨在樹起一面開源旗幟,為各行業客戶、使用者、研究者和開發者們構建活躍的使用者及開發者社群,共同貢獻及解決行業難題、促進該領域技術發展。

成立近半年,社群先後開源了資料視覺化編排平臺-FlyFish、運維管理平臺OMP、雲服務管理平臺-摩爾平臺、Hours演算法等產品。其中FlyFish斬獲中國開源雲聯盟2021優秀開源專案獎。OMP運維管理平臺入選2021 年度 OSC 中國開源專案「最受歡迎專案」榜單。並在業內首次開源了智慧運維開源資料集-GAIA資料集,填補了AIOps開源集資料領域的空白。

2021年11月,雲智慧正式成為中國開源雲聯盟成員單位,2022年1月,雲智慧入選SegmentFault 思否「2021 中國技術品牌影響力企業榜單」,這一切都代表著開發者和社群對我們的認可,這也更加堅定了雲智慧開源戰略的決心。

如果您對雲智慧AIOps感興趣,可以通過下方連結瞭解我們,也可以新增小助手微信,申請加入開發者交流群,可與大咖進行1V1交流!

雲智慧AIOps社群:https://www.cloudwise.ai/

Github地址: https://github.com/CloudWise-OpenSource/FlyFish

Gitee地址: https://gitee.com/CloudWise/fly-fish