«

zabbix清理历史数据

指尖二进制 • 1 年前 • 1062 次点击 • ZABBIX


当zabbix数据库达到7亿多条之后会出现洪水告警。原因是,zabbix数据库压力过大,写入新的数据需要16秒左右。
解决方案:
1:优化数据库
2:清理历史数据

此篇博客只讲清理历史数据
那么针对历史数据怎么清理,delete是按记录删除,删除太慢,当监控的主机达到500台左右。每分钟采集的监控项写入到数据库和delete删除的速度差不多。那么怎么才能更快捷的删除历史数据?用truncate,truncate相当于把表清空再次建立新的表结构。但是有一个缺点,历史数据没了,所以在清空的时候需要确定是否现在删除。一定要确定好。

#!/bin/bash
#author:zhangsong
#date:2019/05/22
mysql -uroot -p123456 -e "
SET foreign_key_checks=0;   #清空具有外键约束的表需要关闭此项
use zabbix;
truncate table history;
optimize table history;
truncate table history_str;
optimize table history_str;
truncate table history_uint;
optimize table history_uint;
truncate table trends;
optimize table trends;
truncate table trends_uint;
optimize table trends_uint;
truncate table events;
optimize table events;
truncate table problem;
optimize table problem;
SET foreign_key_checks=1;"

zabbix自动删除31天前的数据
为了防止truncate把所有数据库都清空了。下面写了一个delete脚本,自动清楚31天前的数据。

#!/bin/bash
#author:zhangsong
#date:2019/05/22
HIS_Date=`date -d $(date -d "-31 day" +%Y%m%d) +%s` #取31天之前的时间戳
TRE_Date=`date -d $(date -d "-365 day" +%Y%m%d) +%s` #取365天之前的时间戳
mysql -uroot -p123456 -e "
use zabbix;
DELETE FROM history WHERE clock < $HIS_Date;
optimize table history;
DELETE FROM history_str WHERE clock < $HIS_Date;
optimize table history_str;
DELETE FROM history_uint WHERE clock < $HIS_Date;
optimize table history_uint;
DELETE FROM trends WHERE clock < $TRE_Date;
optimize table trends;
DELETE FROM trends_uint WHERE clock < $TRE_Date;
optimize table trends_uint;
DELETE FROM events WHERE clock < $TRE_Date;
optimize table events;"
还没收到回复