您好,登錄后才能下訂單哦!
一 問題描述
隨著Zabbix監控的主機和監控項目增多,Zabbix的歷史數據會越來越多,MySQL數據庫磁盤空間很容易就爆滿,同時Zabbix前端查詢數據會變得越來越慢。特別是通過Zabbix的API生成自定義Screen的情況下,打開每個Screen非常慢
查看Zabbix數據庫目錄文件
# ls -lh|grep G total 248G -rw-rw---- 1 mysql mysql 4.7G May 5 21:34 alerts.ibd -rw-rw---- 1 mysql mysql 3.4G May 5 21:34 events.ibd -rw-rw---- 1 mysql mysql 95G May 5 21:34 history.ibd -rw-rw---- 1 mysql mysql 25G May 5 21:34 history_text.ibd -rw-rw---- 1 mysql mysql 112G May 5 21:34 history_uint.ibd -rw-rw---- 1 mysql mysql 2.9G May 5 21:34 trends.ibd -rw-rw---- 1 mysql mysql 4.3G May 5 21:34 trends_uint.ibd
整個Zabbix數據庫目錄大小為248G,history和history_text以及history_uint幾張表就占用了大部分磁盤空間
二 解決辦法
如果不想保留太長時間的歷史數據,例如只保留一個月的歷史數據可以使用以下方法
1.停掉zabbix server
service zabbix-server stop
這里需要特別注意一下,在部署Zabbix架構的時候最好選擇Zabbix server ---- Zabbix proxy --- Zabbix --- agent的架構。即使只有幾臺主機最好也部署一個proxy,根據不同應用或者不同的機房可以部署多個proxy。部署zabbix有以下幾個好處:
proxy專門收集和暫存agent發來的數據,可以減輕server端的壓力
使用proxy可以實現分布式監控,例如監控不同網絡互相不通的服務器
增強安全性,不直接暴露zabbix server的信息
維護的時候很方便,例如清理zabbix的歷史數據,zabbix停掉后的監控數據可以設置在proxy端保留時間長些,等維護好后proxy會同步數據到server端,盡量減少數據丟失。
在停掉zabbix server之前需要注意zabbix proxy的兩個參數
ProxyLocalBuffer=3
設置zabbix proxy暫存在本地mysql的監控數據的時間。默認是0,不暫存。即使zabbix proxy已經把數據發送給了zabbix server,還是會暫存數據在本地設置的時間。取值范圍是0~720小時
ProxyOfflineBuffer=5
設置當zabbix proxy與zabbix server無法連接時保留監控數據的時間間隔。默認是1小時,取值是1~720小時。這個參數特別有用,我就是在之前的幾次維護中,停掉zabbix server后沒有設置zabbix proxy的這個參數,所以當維護結束后啟動zabbix server,會發現有段時間內的數據沒有。這是因zabbix proxy按照默認的保留時間執行housekeeper把過期的數據刪除了。
這個時間根據最好根據要維護的時間來設定,比如要維護10個小時,那么就要設置ProxyOfflineBuffer=10
這樣就不至于這10個小時之間的數據都丟失了。也有一個問題,如果時間間隔太大的話,zabbix proxy重新推送數據到zabbix server會導致雙方的服務器壓力都會增大。
2.創建新表
create table history_new like history;
create table history_uint_new like history_uint;
create table history_text_new like history_text;
3.將近期(一個月)的數據插入到新的表中
insert into history_new select * from history where clock > '1459785600';
insert into history_text_new SELECT * FROM history_text WHERE clock > '1461945600';
insert into history_uint_new SELECT * FROM history_uint WHERE clock > '1461945600';
這里的clock是UNIX時間戳
這里根據數據量的大小可以能會花費好幾個小時的時間
4.重新更改表名
alter table history rename history_old;
alter table history_new rename history;
alter table history_uint rename history_uint_old;
alter table history_uint_new rename history_uint;
alter table history_text rename history_text_old;
alter table history_text_new rename history_text;
5.重新啟動zabbix server
重新啟動zabbix后,有段時間會不停地報zabbix agent不可用的報警信息,過段時間就會恢復正常。
6.刪除舊表
drop table history_old;
drop table history_text_old;
drop table history_uint_old;
另外可以更改items表的history字段
UPDATE items SET history = '15' WHERE history > '30'
這樣就將每個item的history保留時間設置為15天。但是這樣設置的話如果想看幾個月之前的數據就看不到了。
這種方法處理起來效率非常低,必須要停掉zabbix server,然后導入一個月內的數據到新的表,如果數據量很大會很花時間。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。