如何衡量zabbix的性能情況?一臺基礎配置的zabbix到底能監控多少主機,能使用監控多少監控項?性能瓶頸出在哪裏?如何優化配置?
參考官方手冊https://www.zabbix.com/documentation/4.0/zh/manual/appendix/performance_tuning
一、NVPS
在完成zabbix搭建後,zabbix首先監控的第一個主機就是自身。可以在儀表盤中看到這些。
每秒寫入的新值數量 (簡稱NVPS),是衡量zabbix主機性能的一個很重要的指標。
影響NVPS指標的主要是以下幾個因素
• 監控項類型, 數據類型, SNMPv3, triggers的數量和複雜度。
• Housekeeper 設置和數據庫大小。
• 同時在線WEB界面的用戶數量
說明:
1、更新頻率會直接影響到 NVPS的值.
2、計算時考慮來自監控設備的數據。
3、“Zabbix trapper” 和 “SNMP trap” 都是不在計算裏的.
關於zabbix中NVPS的大致估算,可以以此來衡量性能消耗
1)每個主機60個監控項,更新頻率一分鐘一次,100個主機產生的NVPS大致爲100
2)每個主機300個監控項,更新頻率一分鐘一次,100個主機產生的NVPS大致爲500
歷史數據分析也會影響zabbix性能,但是不會消耗太多
二、如何判斷zabbix性能下降
如果zabbix性能下降,會有如下現象
• Zabbix 隊列裏面太多的延遲的監控項 Administration->Queue
• 數據圖形裏經常出現的間隙斷層, 甚至有些監控項沒有數據。
• 觸發器包含nodata()表達式的誤報
• 無響應和響應遲鈍的WEB請求。
• 沒有告警或者是數以千計的告警
最明顯的就是列隊中,有很多主機延遲大於30秒甚至超過1分鐘
2.1一些很重要分析工具
top工具
使用top命令可以很直觀的看到cpu,內存的消耗和一些進程信息
iostat工具
iostat是查看Linux系統io是否存在瓶頸頂好用的一個命令
vmstat工具
Virtual Memory Statistics 虛擬內存統計 命令用來顯示Linux系統虛擬內存狀態,也可以報告關於進程、內存、I/O等系統整體運行狀態。
sar工具
sar 是非常強大性能分析命令,通過 sar 命令可以全面的獲取系統的 CPU、運行隊列、磁盤 I/O、交換區、內存、 cpu 中斷、網絡等性能數據。
watch工具
watch可以幫你監測一個命令的運行結果,來監測你想要的一切命令的結果變化,而且官方推薦使用這個工具
watch -tn 0.2 'ps -o cmd -C zabbix_server -C zabbix_proxy -C zabbix_agentd'
2.2 查看進程
可以查看zabbix-server進程,觀察子進程響應時延
ps aux |grep zabbix_server
也可以查看zabbix-server history同步的時延
ps aux |grep sync
3.3 查看zabbix自身監控圖形
對zabbix完成配置後,會對自己作爲第一個主機進行監控,最直接的方式就是查看監控圖形
三、問題分析
3.1打開日誌調試開關
當出現異常時,需要打開 zabbix日誌debug模式,通過日誌來判斷故障原因
zabbix_server -R log_level_increase=alerter #增加所有進程日誌級別 tail -f /var/log/zabbix/zabbix_server.log #查看最新日誌
3.2 mysql數據庫分析
zabbix推薦後端使用mysql,可以簡單對mysql進行分析。
首先在zabbix_server.conf配置文件中修改 LogSlowQueries=3000
使用innotop命令查詢
innotop是一個mysql數據庫實時監控工具,其功能強大,信息種類繁多,很能體現數據庫的狀態.它實際上是一個perl腳本,整合show status/show variables/show engine innodb status輸出結果並進行統計格式化輸出.
yum install innotop
然後可以簡單分析數據庫慢查詢日誌
grep slow /var/log/zabbix/zabbix_server.log
當數據庫出慢查詢時,會出現如下問題
四、web debug
可以在web前端開啓web debug模式,更加直接的分析問題
在用戶羣組下,找到“Enabled debug mode",開啓即可
然後隨意在"Enabled debug mode"羣組下創建一個用,如debug,可以將權限設置爲超級管理員然後登陸
登陸後,可以看到在每個頁面都有一個”調試“小按鈕,點擊可以看到測試腳本結果
按鈕將在頁面內容下方打開一個新窗口,其中包含頁面的SQL統計信息,以及API調用和各個SQL語句的列表,如果頁面出現性能問題,可以使用此窗口搜索問題的根本原因。
如果數據查詢有異常,可以看到明顯的查詢時間過長
五、優化性能
5.1 配置文件zabbix_server.conf優化
建議按照如下方式調整zabbix_server.conf配置文件進行優化
#調整zabbix_server進程數量 StartPollers=80 StartPingers=10 StartPollersUnreachable=80 StartIPMIPollers=10 StartTrappers=20 StartDBSyncers=6
#調整內存大小 VMwareCacheSize=64M CacheSize=32M HistoryCacheSize=256M TrendCacheSize=64M HistoryIndexCacheSize = 32M ValueCacheSize=64M
5.2mysql數據庫調優
zabbix推薦使用innodb引擎的mysql數據庫,所以要針對數據庫配置文件進行優化
mysqladmin status / variables #檢查數據庫配置狀態
#調整數據庫innodb innodb_file_per_table = 1 innodb_buffer_pool_size=<large> (~75% of total RAM) innodb_buffer_pool_instances = 4 (MySQL 5.6 - 8) innodb_flush_log_at_trx_commit = 2 innodb_flush_method = O_DIRECT innodb_log_file_size = 256M
5.3進一步優化
1)數據庫使用分區表
通過這種方式可以將一張大的表分成很多區.
只對那些數據量大的有歷史意義的表操作:
history_log,history_str,history_text,history_uint
trends,trends_uint
好處:
更快刪除過期數據
DB將擁有更好的性能
當zabbix-server頻繁出現“Zabbix housekeeper processes more than 75% busy”的告警時,此時housekeeper的性能正在下降
則需要使用分區表
2)web服務器使用nginx
nginx服務器的響應速度要明顯優於apache服務器
3)使用Zabbix Proxy
當監控主機過多,可以使用多個zabbix Proxy進行分佈式監控
Zabbix Proxy "轉換" 被動檢查成主動。
負載分佈在Zabbix Proxy代理之間如果一個Proxy高負載, 網絡節點可以切換到其他的Proxy上
簡單易維護當
Zabbix server出現故障時Proxy可以緩存數據保證數據不丟
4)數據庫分離或採用硬件
可以採用數據庫與 zabbix分離,zabbix-server和前端一臺服務器,數據庫一臺服務器,且數據庫服務的性能要高於前者,使用硬件服務器部署要優於使用虛擬機部署