我的编程空间,编程开发者的网络收藏夹
学习永远不晚

处理Zabbix历史数据库办法一

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

处理Zabbix历史数据库办法一

一 问题描述

随着Zabbix监控的主机和监控项目增多,Zabbix的历史数据会越来越多,MySQL数据库磁盘空间很容易就爆满,同时Zabbix前端查询数据会变得越来越慢。特别是通过Zabbix的API生成自定义Screen的情况下,打开每个Screen非常慢

查看Zabbix数据库目录文件

# ls -lh|grep G
total 248G
-rw-rw---- 1 mysql mysql 4.7G May  5 21:34 alerts.ibd
-rw-rw---- 1 mysql mysql 3.4G May  5 21:34 events.ibd
-rw-rw---- 1 mysql mysql  95G May  5 21:34 history.ibd
-rw-rw---- 1 mysql mysql  25G May  5 21:34 history_text.ibd
-rw-rw---- 1 mysql mysql 112G May  5 21:34 history_uint.ibd
-rw-rw---- 1 mysql mysql 2.9G May  5 21:34 trends.ibd
-rw-rw---- 1 mysql mysql 4.3G May  5 21:34 trends_uint.ibd


整个Zabbix数据库目录大小为248G,history和history_text以及history_uint几张表就占用了大部分磁盘空间



二 解决办法

如果不想保留太长时间的历史数据,例如只保留一个月的历史数据可以使用以下方法

1.停掉zabbix server

service zabbix-server stop


这里需要特别注意一下,在部署Zabbix架构的时候最好选择Zabbix server ---- Zabbix proxy --- Zabbix --- agent的架构。即使只有几台主机最好也部署一个proxy,根据不同应用或者不同的机房可以部署多个proxy。部署zabbix有以下几个好处:

proxy专门收集和暂存agent发来的数据,可以减轻server端的压力

使用proxy可以实现分布式监控,例如监控不同网络互相不通的服务器

增强安全性,不直接暴露zabbix server的信息

维护的时候很方便,例如清理zabbix的历史数据,zabbix停掉后的监控数据可以设置在proxy端保留时间长些,等维护好后proxy会同步数据到server端,尽量减少数据丢失。


处理Zabbix历史数据库办法一


在停掉zabbix server之前需要注意zabbix proxy的两个参数

ProxyLocalBuffer=3

设置zabbix proxy暂存在本地mysql的监控数据的时间。默认是0,不暂存。即使zabbix proxy已经把数据发送给了zabbix server,还是会暂存数据在本地设置的时间。取值范围是0~720小时


ProxyOfflineBuffer=5

设置当zabbix proxy与zabbix server无法连接时保留监控数据的时间间隔。默认是1小时,取值是1~720小时。这个参数特别有用,我就是在之前的几次维护中,停掉zabbix server后没有设置zabbix proxy的这个参数,所以当维护结束后启动zabbix server,会发现有段时间内的数据没有。这是因zabbix proxy按照默认的保留时间执行housekeeper把过期的数据删除了。

这个时间根据最好根据要维护的时间来设定,比如要维护10个小时,那么就要设置ProxyOfflineBuffer=10

这样就不至于这10个小时之间的数据都丢失了。也有一个问题,如果时间间隔太大的话,zabbix proxy重新推送数据到zabbix server会导致双方的服务器压力都会增大。








2.创建新表

create table history_new like history;

create table history_uint_new like history_uint;

create table history_text_new like history_text;


3.将近期(一个月)的数据插入到新的表中

insert into history_new select * from history where clock > '1459785600';

insert into history_text_new SELECT * FROM history_text WHERE clock > '1461945600';

insert into history_uint_new SELECT * FROM history_uint WHERE clock > '1461945600';


这里的clock是UNIX时间戳



这里根据数据量的大小可以能会花费好几个小时的时间




4.重新更改表名

alter table history rename history_old;

alter table history_new rename  history;


alter table history_uint rename history_uint_old;

alter table history_uint_new rename history_uint;


alter table history_text rename  history_text_old;

alter table history_text_new rename  history_text;


5.重新启动zabbix server

重新启动zabbix后,有段时间会不停地报zabbix agent不可用的报警信息,过段时间就会恢复正常。


6.删除旧表

drop table history_old;

drop table history_text_old;

drop table history_uint_old;



另外可以更改items表的history字段

UPDATE items SET history = '15' WHERE history > '30'


这样就将每个item的history保留时间设置为15天。但是这样设置的话如果想看几个月之前的数据就看不到了。




这种方法处理起来效率非常低,必须要停掉zabbix server,然后导入一个月内的数据到新的表,如果数据量很大会很花时间。



免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

处理Zabbix历史数据库办法一

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

索引在Oracle中处理历史数据的优化

在Oracle中处理历史数据的优化可以通过以下几种方式实现:创建合适的索引:为历史数据表中经常被查询的字段创建合适的索引,可以加快查询速度。在创建索引时应考虑查询的频率和字段的选择性。分区表:将历史数据表按时间范围进行分区,可以提高查询性能
索引在Oracle中处理历史数据的优化
2024-08-15

Prometheus如何处理历史数据和时序数据的存储

Prometheus 是一个开源的监控系统和时间序列数据库,主要用于收集、存储和查询监控数据。在 Prometheus 中处理历史数据和时序数据的存储的方式如下:存储历史数据:Prometheus 使用本地存储来存储历史数据。当 Prome
Prometheus如何处理历史数据和时序数据的存储
2024-04-09

Prometheus如何处理长期存储和历史数据查询

Prometheus本身并不是设计用来处理长期存储和历史数据查询的。它主要用于监控和警报,对于长期存储和历史数据查询,可以通过与其他工具结合来实现。一种常见的做法是将Prometheus与类似Thanos或VictoriaMetrics等
Prometheus如何处理长期存储和历史数据查询
2024-03-04

Oracle数据库重复数据处理方法:只提取一条

在实际数据库管理的过程中,经常会遇到重复数据的情况,这些重复数据不仅会占用数据库空间,还会影响查询和分析的效率。针对Oracle数据库中重复数据的处理,本文将介绍一种方法:只提取一条重复数据,并提供具体的SQL代码示例。首先,假设我们有一
Oracle数据库重复数据处理方法:只提取一条
2024-03-08

Oracle数据库中如何处理重复数据仅取一条?

在Oracle数据库中,处理重复数据仅保留一条是一个常见的需求。这种情况通常发生在数据表中存在重复数据,但我们只需要保留其中一条,而去除其余重复数据。Oracle提供了一些方法来实现这一功能,包括使用ROWID和ROW_NUMBER函数等方
Oracle数据库中如何处理重复数据仅取一条?
2024-03-08

【已解决】Java 中使用 ES 高级客户端库 RestHighLevelClient 清理百万级规模历史数据

🎉工作中遇到这样一个需求场景:由于ES数据库中历史数据过多,占用太多的磁盘空间,需要定期地进行清理,在一定程度上可以释放磁盘空间,减轻磁盘空间压力。 🎈在经过调研之后发现,某服务项目每周产生的数据量已经
2023-08-22

编程热搜

目录