zabbix 歷史數據處理


問題描述

zabbix server 平穩運行有一段時間了,但是最近問題卻來了,今天早上收到zabbixserver磁盤空間不足的告警。通過查看之后發現是大部分數據是zabbix 庫的的數據 在進一步查看發現是history表和history_uint數據太多導致磁盤占用過多。

問題分析

history_uint
該表存儲的是監控項的無符號整型的數據。
該數據的保存時長,取決於在監控項設置的 歷史數據保留時長。
 
history
這個表保存的是浮點型的。
像 history_str 等保存的是 字符型數據。這些都是我們在設置監控項的對應的信息類型決定的。
該數據的保存時長,取決於在監控項設置的 歷史數據保留時長
 
針對這個問題,我打算刪除 history_uint 和 history 的一些歷史數據。
要刪除history_uint里的數據,還需要注意一點,由於數據量比較多,我建議可以分多次少量數據進行刪除,因為我一次刪除90天的時候CPU已經吃不消了...
 
 
 
 
這樣可以避免一次性刪除數據過多導致數據庫的負載比較大。(或者可以使用limit 10000)
處理過程
我這里需要刪除90天以前的數據下面是我的操作過程
獲取時間戳
#通過如下命令進行獲取90天以前的時間戳
[root@zabbix-server ~]# date -d $(date -d "-90 day" +%Y%m%d) +%s
1590105600

 

登錄數據庫操作
[root@zabbix-server ~]# mysql -uzabbix -p
Enter password:
mysql> use zabbix;
Database changed
 
#delete history_uint
mysql> delete from history_uint where clock < 1590105600 LIMIT 10000;
Query OK, 1653 rows affected (1 min 45.42 sec)
#delete history
mysql> delete from history  where clock < 1590105600 LIMIT 10000;
Query OK, 0 rows affected (24.72 sec)

 

釋放空間
上面執行刪除后,數據的存儲空間是沒有減少的,因為對於delete from table_name where xxx 帶條件的刪除,不管是innodb還是MyISAM都不會釋放空間,需要進行OPTIMIZE TABLE操作,進行釋放空間。
注意:在optimize table '表名' 運行過程中,MySQL會進行鎖表。
optimize table history_uin
mysql>  optimize table history_uint;
+---------------------+----------+----------+-------------------------------------------------------------------+
| Table               | Op       | Msg_type | Msg_text                                                          |
+---------------------+----------+----------+-------------------------------------------------------------------+
| zabbix.history_uint | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| zabbix.history_uint | optimize | status   | OK                                                                |
+---------------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (5 min 33.76 sec)

 

optimize table history
mysql>  optimize table history;
+----------------+----------+----------+-------------------------------------------------------------------+
| Table          | Op       | Msg_type | Msg_text                                                          |
+----------------+----------+----------+-------------------------------------------------------------------+
| zabbix.history | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| zabbix.history | optimize | status   | OK                                                                |
+----------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (1 min 39.51 sec)

 

問題解決

待以上步驟都完成以后,檢查磁盤可以看到問題解決。
不過想要一勞永益的話的話 還是需要寫一個腳本來處理這個問題

#!/bin/bash
User="zabbix"
Passwd="zabbix"
Date=`date -d $(date -d "-90 day" +%Y%m%d) +%s`
echo $Date
$(which mysql) -u${User} -p${Passwd} -e "
use zabbix;
DELETE FROM history WHERE 'clock' < '$Date';
optimize table history;
DELETE FROM history_str WHERE 'clock' < '$Date';
optimize table history_str;
DELETE FROM history_uint WHERE 'clock' < '$Date';
optimize table history_uint;
DELETE FROM history_text WHERE 'clock' < '$Date';
optimize table history_text;
DELETE FROM trends WHERE 'clock' < '$Date';
optimize table trends;
DELETE FROM trends_uint WHERE 'clock' < '$Date';
optimize table trends_uint;
DELETE FROM events WHERE 'clock' < '$Date';
optimize table events;
"

 

 

 

  

 
另外歷史數據過多是由於我們保存的歷史數據的時間所致,我們可以根據需求設置歷史數據的保留時長,例如一些相對不太重要的數據,我們可以將該值設置的更短一些,這樣數據量也就隨着減少了。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM