zabbix调优

   网上搜了半天zabbix调优,最后结果都是一样的复制粘贴,主要都是1.8的,在这个2.0的时代,很让人难受。

   在13年年末,zabbix推出了性能提升一倍的2.2版本。本�沤�线上zabbix数据库的备份导出在测试环境升级到2.2,在升级数据库这个环节,耗时近一周,因此本�畔衷谙呱嫌玫幕故�2.0

   zabbix2.0哥们是去年7月份开始正式使用的,在这小半年的时间里,history和history_uint两张表加起来存了50亿条数据,这不得不让我对zabbix的性能表示五体投地的佩服。

   说道调优,就得说说现在运行的状态:哥们部署的这套环境目前监控着1000多台机器,3w个活跃的监控项,每秒采集800个数据(这个值最高到过900+),用了三台服务器(一台server,一对mysql主从库)目前运行良好。

   在这我仅将本�耪馕⒉蛔愕赖木�验陈列下,喷子们请见谅,恕小弟无知,谢谢。


我认为优化zabbix其实就是优化这几部分:架构、模板、server配置、数据库、用新版本

架构:用分布式。

   虽然本�呕姑徽�式在线上用proxy,但我还是心仪已久,没啥经验,只是感觉和大牛们都这么认为,所以我也潜意识的这么想,分布式应该比cs性能强。

模板:一定要自定义监控项,尽量减少没用的以及设置合理的监控周期。

   监控项我想说,第一点用不到或者功能重复的一定要去掉,最好是自己定制自己的模板,在定制过程中,削减监控项的个数是一点,第二点是一定要根据自己的实际情况,配置监控周期,我这点就没做好,现在都是30s采集一次,其实对于很多监控项而言,这么频繁没必要;第三点就是收集数据以及展示数据的方法,我就一个想法(能用zabbix自带的就别用自定义的)其他的官方总结的很到位,我就引用下:

因素
数据库大小 特别大 适应内存大小
触发器表达式复杂程度
min(),max(),avg() last(),nodata()
数据收集方法
Polling(SNMP,No Proxy,被动式Agent) Trapping(主动式Agent)
存储数据类型
文本,字符串
数字

服务器端配置:就像其他帖子说的,优化进程数,角色分离等等。

我的前端是tengine+php,这里的优化工作我认为不是主要的,webserver用在zabbix上,基本没有瓶颈,可以在网上搜搜,做些简单的优化就行了。

   重头戏在zabbixserver的配置上,默认的,server起的进程非常少,而且事实证明,数据级到了亿这个级别的时候,hoursekeeper的作用可以忽略不急了,所以我炒了他。我贴下我的配置吧:

LogFile=/tmp/zabbix_server_2.0.log
PidFile=/tmp/zabbix_server_2.0.pid
DBHost=*******
DBName=*******
DBUser=******
DBPassword=******
DBPort=3306
ListenPort=10051
SNMPTrapperFile=/tmp/zabbix_traps_2.0.tmp
StartPollers=256
StartProxyPollers=4
StartDBSyncers=8
StartHTTPPollers=8
StartPingers=8
StartTrappers=64
StartPollersUnreachable=64
StartDiscoverers=32
HistoryCacheSize=128M
CacheSize=1024M
TrendCacheSize=32M
#MaxHousekeeperDelete=10000
DisableHousekeeping=1
UnreachableDelay=60
UnavailableDelay=60
UnreachablePeriod=60
TrapperTimeout=300
Timeout=10

这是一台8g内存的机器的配置,server对内存和cpu的要求还是挺高的,这个之前没有规划好,建议用16g以上的机器。

数据库:我只用过mysql,所以这我就说mysql。

数据库:

   mysql配置调优可以参考http://shanks.blog.51cto.com/3899909/1307636


   我要说的重点是mysql的分区表,多了不说,直接上操作:

   在create分区表时,需要对所有数据都做好分区,否则会报错,也就是说你要保证这条create的时候,该表内所有数据都能找到各自的分区。建分区的时候,实际上就是把数据导出再导入,因此这期间,该表是只读的。

   在2.0中,history、history_str、history_uint、trends、trends_uint、events这几张表大家应该比较熟悉,大量的历史数据都存在这几张表中,我们现在就对这几张表做分区:

 1、分别create

   以history为例:

CREATE TABLE `history` (`itemid` bigint(20) unsigned NOT NULL,`clock` int(11) NOT NULL DEFAULT '0',`value` double(16,4) NOT NULL DEFAULT '0.0000',`ns` int(11) NOT NULL DEFAULT '0',KEY `history_1` (`itemid`,`clock`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 partition by range (clock) (partition p201307 values less than (unix_timestamp("2013-07-01 00:00:00")),partition p201308 values less than (unix_timestamp("2013-08-01 00:00:00")));

 1.1 alter已有的表

alter table history_uint partition by RANGE (clock) (partition p201306 values less than (unix_timestamp("2013-07-01")),partition p201307 values less than (unix_timestamp("2013-08-01")),partition p201308 values less than (unix_timestamp("2013-09-01")));

 2、发现分区已经超时了,需要添加

   以history为例:

alter table history add partition (partition p201309 values less than (unix_timestamp("2013-10-01 00:00:00")));

这么做之后,你会发现当你查看近一个月的数据的时候,数据出来的比较快,同时有可能之前的图像断点问题也解决了。然后写脚本定期的去删除分区,同样可以做到删除垃圾数据的效果。



你可能感兴趣的:(优化,mysql,调优,zabbix,分区表)