随着主机越来越多,数据库中的历史数据越来越多了,出现了zabbix自带的housekeeper清理历史数据的时候,造成查数据慢并且触发了很多报警信息 例如Zabbix housekeeper processes more than 75% busy,housekeeper默认一小时清理一次旧的数据。
在server配置文件中这两行可以定义:
HousekeepingFrequency=1 zabbix执行Housekeeping的频率,单位为hours
MaxHousekeeperDelete=500 每次最多删除历史数据的行
但是housekeeper清理过中,会导致数据库负载增高,从而影响读写性能。
所以我们对几个历史数据表做分区表。按照时间(每天)为单位,把历史数据存到各个分区表中,这样做能加快查询速度、快速清理过去一时间的历史数据(删除分区表)
先查看每个表所占容量和行数,可以看到history的表很大
下载分区脚本
脚本默认详情数据保留30天,趋势数据保留12个月,如需修改,请修改以下内容:
daily_history_min=30
monthly_history_min=12
脚本默认连接数据库信息,更改成zabbix的:
DBHOST=localhost
DBUSER=zabbix
DBPASS=zabbix
还需要更改zabbix的安装路径和zabbix服务名称,脚本模式zabbix-server,这里我的是zabbix_server
赋予脚本执行权限chmod +x
然后备份一下zbabix的数据库
mysqldump -uroot -p zabbix>/root/zabbix_$(date +%F).sql 停止zabbix服务 service zabbix_server stop
执行脚本./partitiontables_gt_zbx34.sh
Ready to partition tables.
Ready to update permissions of Zabbix user to create routines
#mysql的root帐号和密码:
Enter root DB user: root
Enter root password: 123456
#备份数据库的操作,已经手动备份:
Do you want to backup the database (recommended) (Y/n): n
Are you certain you have a backup (y/N):
y
Ready to proceed:
Starting yearly partioning at: 2018
and ending at: 2018
With 30 days of daily history
Ready to proceed (Y/n):
y
Altering table: history
Altering table: history_log
Altering table: history_str
Altering table: history_text
Altering table: history_uint
Altering table: trends
Altering table: trends_uint
Creating monthly partitions for table: trends
Creating monthly partitions for table: trends_uint
Creating daily partitions for table: history
Creating daily partitions for table: history_log
Creating daily partitions for table: history_str
Creating daily partitions for table: history_text
Creating daily partitions for table: history_uint
Ready to apply script to database, this may take a while.(Y/n):
y
Altering tables
history
history_log
history_str
history_text
history_uint
trends
trends_uint
trends
trends_uint
history
history_log
history_str
history_text
history_uint
Installing procedures
If Zabbix Version = 2.0
Do you want to update the /etc/zabbix/zabbix_server.conf
to disable housekeeping (Y/n): n
Do you want to update the crontab (Y/n): y
The crontab entry can be either in /etc/cron.daily, or added
to the crontab for root
Do you want to add this to the /etc/cron.daily directory (Y/n): y
#设置清理报告通知邮箱:
Enter email of who should get the daily housekeeping reports:xxxx@qq.com
配置完成
上面的脚本会在/etc/cron.daily目录下生成一个名称为zabbixhousekeeping的脚本:
[root@localhost ~]# cat /etc/cron.daily/zabbixhousekeeping #!/bin/bash /usr/local/zabbix/cron.d/housekeeping.sh
上面的脚本会在/usr/local/zabbix/cron.d/目录下生成一个名称为housekeeping.sh脚本。
[root@localhost ~]# cat /usr/local/zabbix/cron.d/housekeeping.sh #!/bin/bash MAILTO=xxxx@qq.com tmpfile=/tmp/housekeeping$$date >$tmpfile /usr/bin/mysql --skip-column-names -B -h localhost -uzabbix -pzabbix zabbix -e "CALL create_zabbix_partitions();" >>$tmpfile 2>&1 /usr/bin/mail -s "Zabbix MySql Partition Housekeeping" $MAILTO <$tmpfilerm -f $tmpfile
这样的话,每天凌晨大概3点左右会执行,并且用mail程序发送执行结果到上面的你指定的邮箱。可以看到删除过期的数据分区表,并建立新的分区表。
mail需要提前配置好,保证能正常发送邮件。
执行以下SQL语句查看histroy表的分区情况:
use zabbix;
show create table history_log\G;
分区表成功,启动zabbix_server服务。
|
!评论内容需包含中文