zoukankan      html  css  js  c++  java
  • 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;
    "

     

      

     
    另外历史数据过多是由于我们保存的历史数据的时间所致,我们可以根据需求设置历史数据的保留时长,例如一些相对不太重要的数据,我们可以将该值设置的更短一些,这样数据量也就随着减少了。
     
  • 相关阅读:
    pandas DataFrame(5)-合并DataFrame与Series
    pandas Series的sort_values()方法
    np.corrcoef()方法计算数据皮尔逊积矩相关系数(Pearson's r)
    switch case 多个处理方式涉及到销售优惠折扣方案处理
    标量函数取规则名称
    调用企业微信接口发送消息
    C#中NameValueCollection类用法 读取配置信息
    .NET Datable分解数据表
    触发器批量业务操作实现方式 update触发器用游标处理
    Lamda OrderBy 排序问题
  • 原文地址:https://www.cnblogs.com/xuewenlong/p/13540165.html
Copyright © 2011-2022 走看看