您好,登錄后才能下訂單哦!
一 問題描述
隨著Zabbix監(jiān)控的主機和監(jiān)控項目增多,Zabbix的歷史數(shù)據(jù)會越來越多,MySQL數(shù)據(jù)庫磁盤空間很容易就爆滿,同時Zabbix前端查詢數(shù)據(jù)會變得越來越慢。特別是通過Zabbix的API生成自定義Screen的情況下,打開每個Screen非常慢
查看Zabbix數(shù)據(jù)庫目錄文件
# 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數(shù)據(jù)庫目錄大小為248G,history和history_text以及history_uint幾張表就占用了大部分磁盤空間
二 解決辦法
如果不想保留太長時間的歷史數(shù)據(jù),例如只保留一個月的歷史數(shù)據(jù)可以使用以下方法
1.停掉zabbix server
service zabbix-server stop
這里需要特別注意一下,在部署Zabbix架構(gòu)的時候最好選擇Zabbix server ---- Zabbix proxy --- Zabbix --- agent的架構(gòu)。即使只有幾臺主機最好也部署一個proxy,根據(jù)不同應(yīng)用或者不同的機房可以部署多個proxy。部署zabbix有以下幾個好處:
proxy專門收集和暫存agent發(fā)來的數(shù)據(jù),可以減輕server端的壓力
使用proxy可以實現(xiàn)分布式監(jiān)控,例如監(jiān)控不同網(wǎng)絡(luò)互相不通的服務(wù)器
增強安全性,不直接暴露zabbix server的信息
維護的時候很方便,例如清理zabbix的歷史數(shù)據(jù),zabbix停掉后的監(jiān)控數(shù)據(jù)可以設(shè)置在proxy端保留時間長些,等維護好后proxy會同步數(shù)據(jù)到server端,盡量減少數(shù)據(jù)丟失。
在停掉zabbix server之前需要注意zabbix proxy的兩個參數(shù)
ProxyLocalBuffer=3
設(shè)置zabbix proxy暫存在本地mysql的監(jiān)控數(shù)據(jù)的時間。默認是0,不暫存。即使zabbix proxy已經(jīng)把數(shù)據(jù)發(fā)送給了zabbix server,還是會暫存數(shù)據(jù)在本地設(shè)置的時間。取值范圍是0~720小時
ProxyOfflineBuffer=5
設(shè)置當zabbix proxy與zabbix server無法連接時保留監(jiān)控數(shù)據(jù)的時間間隔。默認是1小時,取值是1~720小時。這個參數(shù)特別有用,我就是在之前的幾次維護中,停掉zabbix server后沒有設(shè)置zabbix proxy的這個參數(shù),所以當維護結(jié)束后啟動zabbix server,會發(fā)現(xiàn)有段時間內(nèi)的數(shù)據(jù)沒有。這是因zabbix proxy按照默認的保留時間執(zhí)行housekeeper把過期的數(shù)據(jù)刪除了。
這個時間根據(jù)最好根據(jù)要維護的時間來設(shè)定,比如要維護10個小時,那么就要設(shè)置ProxyOfflineBuffer=10
這樣就不至于這10個小時之間的數(shù)據(jù)都丟失了。也有一個問題,如果時間間隔太大的話,zabbix proxy重新推送數(shù)據(jù)到zabbix server會導(dǎo)致雙方的服務(wù)器壓力都會增大。
2.創(chuàng)建新表
create table history_new like history;
create table history_uint_new like history_uint;
create table history_text_new like history_text;
3.將近期(一個月)的數(shù)據(jù)插入到新的表中
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時間戳
這里根據(jù)數(shù)據(jù)量的大小可以能會花費好幾個小時的時間
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不可用的報警信息,過段時間就會恢復(fù)正常。
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保留時間設(shè)置為15天。但是這樣設(shè)置的話如果想看幾個月之前的數(shù)據(jù)就看不到了。
這種方法處理起來效率非常低,必須要停掉zabbix server,然后導(dǎo)入一個月內(nèi)的數(shù)據(jù)到新的表,如果數(shù)據(jù)量很大會很花時間。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。