主講人:王鴻杰,云智慧/企業效能部/架構師
講師簡介:云智慧架構師,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
- 當添加(自動發現)一個 host,并且為 host 添加對應的模板的時候,Portal 會解析出來對應的 item, preprocess,trigger 然后放在對應的 Db 表里面。
- Server 的 dbconfig_thread 會從 Db 拿到對應的數據放在共享內存中,然后poller_thread 進程讀取到對應的 items,開啟與 Agent 建立連接,遍歷 items 從 Agent(snmp,簡單檢查 等) 獲取到對應的指標數據
- 然后將 指標數據給 preprocessing_manager_thread 進程,preprocessing_manager_thread 進程會安排對應的preprocessing_worker 進程對數據進行 preprocess
- 最后由 dbsyncer_thread 進程將數據放入 Db 中,Portal 界面從 Db 拿到對應的數據信息繪制和顯示
- dbsyncer_thread 同步數據到DB,遍歷數據 并計算 expression 表達式計算指標,最后觸發 escalator_thread 和 alerter_thread 做出相應的動作。
- 對于可監控指標,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 進程(被動)
- snmp|SNMP代理檢查
- simple_checks|簡單檢查(應用層狀態檢查)
- calculated|計算監控項
- internal|Zabbix內部檢查
- ssh_checks|SSH檢查
- telnet_checks|Telnet檢查
- external|外部檢查
- aggregate|匯總檢查
- odbc_checks|ODBC監控
httppoller 進程(被動)
- http|HTTP 檢查
ipmi_poller_thread 進程(被動)
- ipmi|IPMI檢查
icmp pinger 進程(被動)
- simple_checks|簡單檢查(icmp 檢查)
trapper 進程(主動)
- trapper|捕捉器監控項
- log_items|日志文件監控
- snmptrap|SNMP traps
preprocess 進程(Follow me)
- dependent_items|相關項目(從屬監控項)
按客戶端依賴劃分指標類型
無依賴
- snmp|SNMP代理檢查
- ipmi|IPMI檢查
- simple_checks|簡單檢查
- external|外部檢查
- odbc_checks|ODBC監控
依賴其他監控項
- calculated|計算監控項
- aggregate|匯總檢查
依賴第三方
- zabbix_agent|Zabbix代理檢查 (Agent)
- snmptrap|SNMP traps (snmptrap)
- log_items|日志文件監控 (Agent)
- ssh_checks|SSH檢查 (ssh 秘鑰或密碼)
- telnet_checks|Telnet檢查 (Telnet Server和 Telnet 密碼)
- trapper|捕捉器監控項 (Zabbix Sender)
- http|HTTP 檢查 (http 接口)
IDEA
被動監控對 Zabbix Server 來說會有大的壓力
從監控類型來看,Zabbix 更多的是被動監控,主動監控只有 Agent Active、SnmpTrap,Sender,但是由于 Zabbix Agent 的強大,很多場景下主動監控的指標覆蓋度完全能跟被動監控硬懟。
所以要根據具體監控場景,主動和被動互相搭配,耗時的指標更加傾向于主動監控。
Zabbix監控項類型梳理
Zabbix的自動發現
自動發現是伴隨著指標監控來的,當發現能有采集到預設的指標時,這臺主機就會被標記為可用,然后觸發預設的Action,通知或者自動添加監控模板等。
自動發現分類
- 簡單檢查類
- Agent 類型
- snmp 類型
- ICMP (ping) 類型
自動發現流程
- 配置 IP 段
- 配置自動發現指標
- 配置發現動作 Action
- 發現主機后添加 event
- escalator_thread 進程處理對應的 event
Zabbix的模板結構
模板結構
從屬指標
計算指標
Agent源碼
寫在最后
近年來,在AIOps領域極速發展的背景下,IT工具、平臺能力、解決方案、AI場景及可用數據集的迫切需求在各行業迸發?;诖?,云智慧在2021年8月發布了AIOps社區,旨在樹起一面開源旗幟,為各行業客戶、用戶、研究者和開發者們構建活躍的用戶及開發者社區,共同貢獻及解決行業難題、促進該領域技術發展。
成立近半年,社區先后開源了數據可視化編排平臺-FlyFish、運維管理平臺OMP、云服務管理平臺-摩爾平臺、Hours算法等產品。其中FlyFish斬獲中國開源云聯盟2021優秀開源項目獎。OMP運維管理平臺入選2021 年度 OSC 中國開源項目「最受歡迎項目」榜單。并在業內首次開源了智能運維開源數據集-GAIA數據集,填補了AIOps開源集數據領域的空白。
本文鏈接:http://m.abandonstatusquo.com/40816.html
網友評論comments