Zabbix性能優化概述
造成zabbix性能下降的因素如表所示
因素 |
慢 |
快 |
數據庫大小 |
巨大 |
適應內存大小 |
觸發器表達式的復雜程度 |
Max()min()avg() |
Last()nodata() |
數據收集方法 |
輪詢 |
Trapping |
數據類型 |
文本,字符串 |
數值 |
前端用戶數量 |
多 |
少 |
主機數量也是影響性能的主要因素
|
主機數量(台) |
性能(NVPS) |
每個主機有60個items 每分鍾更新一次 |
10 |
10 |
100 |
100 |
|
1000 |
1000 |
|
每個主機有600個items 每分鍾更新一次 |
10 |
10 |
100 |
1000 |
|
1000 |
10000 |
zabbix性能低下的表現
1. zabbix隊列有太多被延遲的item,可以通過administration-queue查看
2. zabbix繪圖中經常出現斷圖,一些item沒有數據
3. 帶有nodata()函數的觸發器出現flase
4. 前端頁面無響應,或者響應慢
解決辦法如下:
1. 不要使用默認的模板,應該自己定制模板
2. 數據庫調優
3. 架構優化,如果使用分布式,各服務器功能獨立
4. Items、trigger調優
5. 更換更好的硬件
Zabbix性能優化的原則
1、確保zabbix內部組件性能處於被監控狀態(調優的基礎!)
2、使用硬件性能足夠好的服務器
3、不同角色分開,使用各自獨立的服務器
4、使用分布式部署
5、調整MySQL性能
6、調整Zabbix自身配置
Zabbix性能優化的依據
對xxx進行的監控,選擇xxx的監控模板,如圖
看到如圖所示的內部監控情況
查看等待隊列
查看詳情
等待隊列越來越多,說明性能越來越差
NVPS計算方法
NVPS
是PHP語言實現的,文件位於include/func.inc.php
SELECT
round(SUM(1.0/i.delay),2) AS
qps FROM
items i,hosts h WHERE
i.status='0'
AND
i.hostid=h.hostid AND
h.status='0'
AND
i.delay<>0;
配置文件的參數優化
調整zabbix參數(/etc/zabbix/zabbix_server.conf)
StartPollers=160 StartPollersUnreacheable=80 StartTrappers=20 StartPingers=100 StartDiscoverers=120 Cachesize=1024M startDBSyncers=16 HistoryCacheSize-1024M TrendCacheSize=1024M HIstoryTextCacheSize-512M 重啟zabbix_server
Zabbix的架構優化
Zabbix的架構分為三種
Server/agent
Server/node/agent
Server/proxy/agent
Item工作模式及trigger優化
Zabbix中的item默認工作是被動模式,可以通過設置主動模式來提高server的性能
Tigger中正則表達式函數last()nodata()的速度是最快的,Min(),max().avg()是最慢的,盡量使用速度快的函數
Zabbix數據庫優化
Zabbix數據庫優化
1. 對數據庫軟件本身的優化,采用更高性能的數據庫版本
2. 對數據庫本身的參數進行調優
3. 對zabbix數據庫結構進行優化,進行分表操作,會最大程度提高zabbix的數據庫性能,在分表的時候,需要關閉housekeeper
4. 在zabbix_server.conf中的logshowqueries參數是關於慢查詢的設置,將其設置為1000,開啟這個參數對慢查詢繼續記錄,方便調優配置
5. 對zabbix的工作機制和各種process的作用要了解,對zabbix的數據庫表結構也要有比較好的理解。
6. 對數據庫優化(在32G內存的服務器中)
[client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock server-id = 1 表示是本機的序號為1 max_allowed_packet = 32M 接受的數據包大小; max_heap_table_size =128 8M 定義了用戶可以創建的內存表(memory table)的大小。 read_rnd_buffer_size = 512K MySQL的隨機讀緩沖區大小。 sort_buffer_size = 16 MySQL執行排序使用的緩沖大小。 join_buffer_size = 16 聯合查詢操作所能使用的緩沖區大小 query_cache_size = 4096M MySQL的查詢緩沖大小 query_cache_limit = 4M 指定單個查詢能夠使用的緩沖區大小,默認1M innodb_open_files =2048 nnodb能打開的表的數據,如果庫里的表特別多的情況,請增加這個。這個值默認是300 innodb_buffer_pool_size = 10G nnoDB使用一個緩沖池來保存索引和原始數據 innodb_thread_concurrency = 16 默認設置為 0,表示不限制並發數, [mysqldump] quick max_allowed_packet = 16M #服務器發送和接受的最大包長度 [myisamchk] key_buffer_size = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M