zoukankan      html  css  js  c++  java
  • zabbix 存储数据清理

    故障排查

    背景调查:最近几天zabbix告警信息总是报Zabbix agent on xxxxxxxxx is unreachable for 5 minutes 错误,开始没有留意,通过两天观察,发现报警时间是有规律的,每天的凌晨12点05分、早晨6点05分、中午12点05分、下午18点05分,发现每隔6小时进行一次告警。于是第一时间想到是不是有什么计划任务执行,通过查看计划任务,发现zabbix的数据备份刚好前面定的每6小时执行一次,再一看数据库信息,发现数据如此之多,一下就反应过来,是因为备份时候占用IO太高导致zabbix—serveri连接agent超时,导致的告警,再一看为啥数据备份会占用很高的IO,通过查看数据发现,没一两个月,zabbix库占用了20多G的磁盘,故进一步排除,发现是history表和history_uint数据太多导致磁盘占用过多。

    通过上面的排除已经确定historyhistory_uint表数据过多,加之是一些不是特别重要的数据,故想着对起清理。

    history_uint
    该表存储的是监控项的无符号整型的数据。
    该数据的保存时长,取决于在监控项设置的 历史数据保留时长。

    history
    这个表保存的是浮点型的。
    history_str 等保存的是 字符型数据。这些都是我们在设置监控项的对应的信息类型决定的。
    该数据的保存时长,取决于在监控项设置的 历史数据保留时长

    解决办法

    临时解决办法

    针对这个问题,我们临时的解决办法就是,就删除 history_uinthistory 的一些历史数据。

    要删除history_uint里的数据,还需要注意一点,由于数据量比较多,建议分多个时间段进行删除,比如数据库里由2018年10月到2019年10月的数据,那么可以将里面的数据分成4个阶段进行删除,从2018年的10月份到2019年1月份,从2019年的1月份到2019年的4月份,这样可以避免一次性删除数据过多导致数据库的负载比较大。(或者可以使用limit 10000)

    这里数据量没有那么多,比如我要删除2020-05-20之前的数据,那么这个时间对应的时间戳是1589904000,可以通过如下命令进行获取时间戳

    # date -d "2020-05-20 00:00:00" +%s
    1589904000
    

    delete history_uint

    # delete from history_uint where clock < 1589904000 LIMIT 10000;
    

    delete history

    # delete from history where clock < 1589904000 LIMIT 10000;
    

    上面执行删除后,数据的存储空间是没有减少的,因为对于delete from table_name where xxx 带条件的删除,不管是innodb还是MyISAM都不会释放空间,需要进行OPTIMIZE TABLE操作,进行释放空间。

    注意:在optimize table '表名' 运行过程中,MySQL会进行锁表。

    # optimize table history_uint;
    # optimize table history;
    

    永久解决办法

    • 数据量过多是由于我们保存的历史数据的时间过长,我们可以设置 历史数据的保留时长,将该值设置的更短一些,这样数据量也就随着减少了。
    • 扩大数据库的储存空间
  • 相关阅读:
    哥哥牟:诺拉的死亡是由于寻找食物的粪便!
    Eclipse建筑物SSH(struts-2.2.3 + spring-2.5.6 + hibernate-3.6.8)相框-随着源代码
    Centos6.5下一个Ceph存储集群结构
    linux input如何固定设备event handler
    sizeof运营商
    【小言的设计模式】类之间的关系
    2015第11周五
    2015第11周四~代发公司招聘信息
    2015第11周三
    2015第11周二
  • 原文地址:https://www.cnblogs.com/yanjieli/p/13044250.html
Copyright © 2011-2022 走看看