随着zabbix的广泛应用,少数人的zabbix服务器在性能上出现瓶颈,或者在未来会出现性能方面的瓶颈,接下来讨论几个有效并且简单的优化方案。

服务器硬件

想通过几个简单的配置让服务器提高成倍的性能,想法很好,但是基本不太现实。简单的说,你需要搭配更好的CPU、更大的内存,更快的硬盘:条件允许的花,可以考虑购买SSD,它比更大的cpu和更大的内存带来的效果更好,或者考虑使用SAS 15K硬盘,组raid等等,总之一句话,配置优化不动的情况,增加硬件投入,别绞尽脑汁搜索:zabbix如何优化之类的文章,你在浪费时间。

操作系统

使用最新的操作系统,优化、定制化操作系统内核。应该会有些作用,但是肯定不大。

数据库优化

DBsock优化

如果MySQL和zabbix server在同一台服务器上,socket连接要比tcp连接要更快。

数据库分离

将数据库服务器独立,数据库和zabbix资源互相独立,例如:可以购买一台RDS

数据库引擎

使用MySQL5.6或者更高版本,自从MySQL被Oracle收购了,它的性能确实有不少的提升。请一定选择innodb,别选择myisam,因为zabbix在innodb的性能比在myisam快1.5倍,而且myisam不安全,zabbix监控数据量很大,一旦表坏了,那就是一个悲剧。

mysql分区,history等等表数据量较大,可以试着分区替身性能。

其他优化

1、减少history保存时间

2、减少item获取间隔时间

3、减少不必要的监控项

在条件不允许或者以上方法都无效的情况下,请一定考虑以上建议。在监控环境中,以上三点是大家都在犯的错误,大部分item是不需要保存太长的数据,有些监控项根本无意义,有些监控项的间隔时间太短。一直以来我都在犯这个错,但是因为zabbix性能一直不错,暂时不纠正,数据多点总比少点好,是不是~

1. Zabbix性能变慢的可能表现:

  • zabbix队列有太多被延迟的item,可以通过administration-queue查看
  • zabbix绘图中经常出现断图,一些item没有数据
  • 带有nodata()函数的触发器出现flase
  • 前端页面无响应,或者响应慢

    a.通过Zabbix agent采集数据的设备处于moniting的状态但是此时机器死机或其他原因导致zabbix agent死掉server获取不到数据,此时unreachable poller
    就会升高。
    b.通过Zabbix agent采集数据的设备处于moniting的状态但是server向agent获取数据时时间过长,经常超过server甚至的timeout时间,此时unreachable poller就会升高。

   如何度量Zabbix性能:

         通过Zabbix的NVPS(每秒处理数值数)来衡量其性能。在Zabbix的dashboard上有一个错略的估值。

2. Zabbix性能优化的几点原则:

  • 确保zabbix内部组件性能处于被监控状态(调优的基础!)
  • 使用硬件性能足够好的服务器
  • 不同角色分开,使用各自独立的服务器
  • 使用分布式部署
  • 调整MySQL性能
  • 调整Zabbix自身配置

3. Zabbix变慢的几个原因总结如下:

  • Zabbix server硬件配置,建议更好的CPU、更大的内存,更快的硬盘
  • Zabbix架构,若整体架构过大,建议使用分布式proxy,各服务器功能独立
  • 数据量太大,vps太高,zabbix来不及处理
  • Housekeeper设置不当,数据库体积变大
  • 前端主机太多,查询过多的数据
  • Item工作模式及Triggers优化,Triggers太过复杂

3.1 了解Zabbix目前的工作状态

获得zabbix内部状态

zabbix[wcache,values,all]

zabbix[queue,1m]   ----延迟超过1分钟的item

获得zabbix内部组件工作状态(该组件处于BUSY状态的时间百分比)

zabbix[process,type,mode,state]

其中可用的参数为:

  • type: trapper,discoverer,escalator,alerter,etc
  • mode: avg,count,min,max
  • state: busy,idel


     

3.2 Zabbix性能优化---Item工作模式及Triggers优化

  • 添加proxy节点,减少了server端的负荷。(下面方法无用,再使用此办法)
  • Zabbix中的item默认工作是被动模式,可以通过设置主动模式来提高server的性能。

主要讲讲采用主动模式,若采用active checks模式:

①zabbix_agentd.conf配置调整

1
2
3
4
5
6
7
8
LogFile=/tmp/zabbix_agentd.log
Server=xxx.xxx.xxx.xxx    server端ip
ServerActive=xxx.xxx.xxx.xx   指定Agentd收集的数据往哪里发送
Hostname=yyy.yyy.yyy.yyy   agent的hostname ,必须要和Server端添加主机时的主机名对应
RefreshActiveChecks=60
BufferSize=10000
MaxLinesPerSecond=200
Timeout=30

比较重要的参数是ServerActive和Hostname,ServerActive是指定Agentd收集的数据往哪里发送,Hostname是必须要和Server端添加主机时的主机名对应起来,这样Server端接收到数据才能找到对应关系,这里为了兼容被动模式,没有把StartAgents设为0,如果一开始就是使用主动模式的话建议把StartAgents设为0,关闭被动模式。
  ②zabbix_server.conf 配置调整

StartPollers=100     减少主动收集数据进程,由原来的500---100,减小
    StartTrappers=200    负责处理Agentd推送过来的数据的进程,由原来的50---100 ,变大

③模板调整

a. 以任何一个现有模板为例,clone并重命名,假如重命名模板为TEST
    b. 将模板TEST里所有items和discovery rules里的items都变更type为atvice agent

至此active-checks模式的agent部署完毕,可以在overview中查看模板中的监控项。

Tigger中正则表达式函数last()、nodata()的速度是最快的。。。Min()、max()、avg()是最慢的。。。尽量使用速度快的函数

3.3  数据量太大,vps太高,zabbix来不及处理

通过以下图,可看出哪个item导致慢:     若more than 10 min 有数据则表示对应的Item数据量过大。

解决办法:

  • 修改监控项
  • 调整Item的时间间隔(主要办法)       将zabbix agent监控 timeout时间增大

备注:

调整unsupport items检查时间的方法是:在Adiministration里选择General然后在右侧下拉菜单里选择Other,然后修改Refresh unsupported items (in sec)的值,表示“每多少秒去重新检查一下那些not_supported的值”。

3.4 调整MySQL性能

采用分布式架构,性能瓶颈的最大可能出现在数据库中。

    • 关闭housekeeper, 将history分区
    • 将zabbix_server.conf中的StartDBSyncers参数上调,表示将数据从zabbix写入数据库的进程是多少
      • 起因:近几日zabbix报警的恢复时间变得很长,页面有卡顿的现象。抓包查看发现,确实是收到了最近正常的值,但是面板不更新,重新zabbix_server进程,才能完成面板更新。

        1. Zabbix性能概述

        当zabbix性能低时会出现多种状况,Zabbix前端页面出现无响应、卡顿、列队无法更新,zabbix图形中经常出现断图,无图。一些item获取不到数据。列队中出现大多被延迟的item

        如何判断zabbix-server性能

        首页导航中通过zabbix状态可以看到zabbix的主机数量、监控项的数目、触发器的数目。并通过zabbix的NVPS(每秒处理数值数)衡量性能标准,NVPS是通过PHP代码编写实现的计算,从总体上反映出了zabbix-server的处理速度。

        NVPS与History的保留时间和Trends的保留时间都有直接关系。如下图中zabbix状态性能提升空间还很大,可以调整主机模版、修改被禁用和不支持的监控项及触发器。

        我这里因为服务器比较老,再加上zabbix,mysql都是比较老的所以数字会很低

        可以通过看zabbix对于本身server列队的监控,来确定是什么类型的监控项造成的性能问题,见下图。等待的列队越多、时间越长,说明zabbix-server性能越差。可以针对受影响的监控类型做调整,比如调整监控项的时间间隔,或者根据监控类型定制模版,将模版写到最简。如果以上方法还是没有效果,那么就说明zabbix server压力过大,采用搭建proxy分布式架构,将server的压力分担给proxy

        上图是我调整后的

        调整前

        从上图可以看出有几个监控项延迟达到3年。。。。。

        先将这几个延迟超长的监控项禁用掉,完事看看队列是否有变化

        2. Zabbix配置文件优化

        Zabbix自带模版还会监控各工作进程的状态,可对数据收集过程中的性能做分析,见下图,数据采集过程和使用缓存的空间容量。需要特别注意的有:

        Zabbix busy housekeeper processes,in %##管家处理数据占缓存的百分比

        Zabbix busy history syncer processes,in %##写入数据库的同步程序占缓存的百分比

        Zabbix busy poller processes,in % ## zabbix轮询进程占比

        Zabbix busy unreachable poller processes in %##不可达的轮询进程占比

        root@localhost ~]# vim /etc/zabbix/zabbix_server.conf

        #配置文件前面内容为初始安装zabbix时需要配置的基本参数。找到高级配置这一行开始,涉及优化内容用红色标识填充

        ############ ADVANCED PARAMETERS #################

        ### Option: StartPollers

        # Number of pre-forked instances of pollers.

        #

        # Mandatory: no

        # Range: 0-100

        # Default:

        StartPollers=5

        #填写范围0-100,默认5 。轮询处理监控项的进程数,增加太大会影响服务器本身性能,保持此参数的值尽可能低,20000个监控项大概控制在80左右即可。

        StartIPMIPollers=0

        #IPMI轮询进程实例个数,服务器使用IPMI协议监控时需要更改此项,默认0为关闭

        StartPollersUnreachable=10

        #不可达主机轮询数量。此值特别耗费性能,设置在10-20之间即可,默认1

        StartTrappers=5

        #负责处理agents和proxy推送过来的数据的进程数,默认为5,如果zabbix-agent监控类型较多需要加大此参数

        StartPingers=1

        # ICMP- ping进程轮询实例数,默认为1.,建议更改为20-50之间,根据业务填写即可。

        StartDiscoverers=1

        #自动发现子进程实例数,默认为1,范围0-250

        StartHTTPPollers=1

        #HTTP进程轮询实例个数,默认1,范围0-1000,web监控不多选择默认即可

        HousekeepingFrequency=1

        #zabbix执行管家的频率,从数据库中删除过期的数据。为了防止 housekeeper 过载 (例如, 当历史和趋势周期大大减小时), 对于每一个item,不会在一个housek周期内删除超过4倍HousekeepingFrequency 的过时信息. 因此, 如果 HousekeepingFrequency 是 1, 一个周期内不会删除超过4小时的过时信息,为了降低server压力,kousekeeping延后server启动30分钟,默认为1,最大24,为0时关闭使用。

        MaxHousekeeperDelete=5000

        #执行一个Housekeeping周期时,默认删除的数据条目数。默认5000条。如果设置为0,不限制删除的行数,这种情况数据库多数会崩溃。

        CacheSize=8M

        #缓存大小,单位字节。用于存储主机、监控项、触发器数据的共享内存大小,默认8M最大8G。根据自身zabbix业务需求配置合理的参数。

        CacheUpdateFrequency=60

        #zabbix缓存更新频率,单位秒。设置范围1-3600

        HistoryCacheSize=1024M

        #历史数据缓存大小,单位字节

        TrendCacheSize=256M

        #趋势数据缓存大小,单位字节。用于存储趋势数据的共享内存大小

        ValueCacheSize=1024M

        #历史数据缓存大小, 单位bytes.缓存item历史数据请求的共享内存大小.0即禁止缓存(不建议这么做)

        Timeout=3

        #agent, SNMP 设备或外部检查的超时时长(单位秒),填写范围1-30

        以上为配置优化主要参数,其他内容配置文件中均有简要说明,可根据业务需求更改优化。对配置参数进行合理的设置会使zabbix处于正常的工作状态。值越大,越高消耗的CPU和内存越多。修改配置文件后,需要重启zabbix-server进程。加载新配置生效
        当以上方法不能有效时,建议清楚一下趋势数据。当然如果有保存的需求,那就只能做分片了(本文不涉及分片)。

        truncate table history;
        truncate table history_str;
        truncate table history_uint;
        truncate table trends;
        truncate table trends_uint;

023-zabbix性能优化中的几个中肯建议的更多相关文章

  1. (80)zabbix性能优化中的几个建议

    随着zabbix的广泛应用,少数人的zabbix服务器在性能上出现瓶颈,或者在未来会出现性能方面的瓶颈,接下来讨论几个有效并且简单的优化方案. 服务器硬件 想通过几个简单的配置让服务器提高成倍的性能, ...

  2. zabbix性能优化记

    以前用zabbix,都是简简单单的把服务端.客户端一搭,模板监控项一弄就完了.没怎么真正去弄过优化啊之类的.现在有个场景就是获取zabbix的数据贼慢,得对zabbix进行优化,开始动手分析一下.   ...

  3. zabbix 性能优化

    Zabbix 安装好就放在那不管了,以为不需要调优.直到最近出现了如下一堆告警. 描述下我们的环境 硬件:8核 32G 软件:Centos7.6 Zabbix4.0.Httpd2.4.PHP7.3.M ...

  4. SET STATISTICS IO和SET STATISTICS TIME 在SQL Server查询性能优化中的作用

    近段时间以来,一直在探究SQL Server查询性能的问题,当然也漫无目的的查找了很多资料,也从网上的大神们的文章中学到了很多,在这里,向各位大神致敬.正是受大神们无私奉献精神的影响,所以小弟也作为回 ...

  5. (转)Db2 数据库性能优化中,十个共性问题及难点的处理经验

    (转)https://mp.weixin.qq.com/s?__biz=MjM5NTk0MTM1Mw==&mid=2650629396&idx=1&sn=3ec17927b3d ...

  6. SQL Server性能优化(6)查询语句建议

    1. 如果对数据不是工业级的访问(允许脏读),在select里添加 with(nolock) ID FROM Measure_heat WITH (nolock) 2. 限制结果集的数据量,如使用TO ...

  7. Zabbix性能优化

    前言 如果不做表分区和删除历史数据规则设置的话,随着时间的推移zabbix的查询性能会变得很低 查看zabbix的性能 通过zabbix的NVPS(每秒处理数值数)来衡量其性能,在zabbix的das ...

  8. 【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖

    系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...

  9. iOS性能优化中的离屏渲染

    GPU屏幕渲染有以下两种方式: On-Screen Rendering意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行. Off-Screen Rendering意为离屏渲染 ...

随机推荐

  1. 布尔 kotlin(4)

    布尔布尔用 Boolean 类型表示,它有两个值: true 和 false .若需要可空引用布尔会被装箱.内置的布尔运算有:||       – 短路逻辑或&&     – 短路逻辑 ...

  2. leetcode-easy-string-242. Valid Anagram

    mycode   71.97% class Solution(object): def isAnagram(self, s, t): """ :type s: str : ...

  3. 清空mysql数据

    delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内 ...

  4. JavaScript日常学习5

    JavaScript字符串属性和方法 eg :var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";      var sln = txt.length; ...

  5. MJRefresh实现请求数据列表不满一页,或者请求数据为空时,不显示footer文字

    最近自己负责的项目测试要求: 列表的数据不满一页的话就自动隐藏下面的“上拉加载更多”或是“到底了,没有更多数据”. 百度了一下,看了一篇博客的介绍实现: http://blog.csdn.net/gx ...

  6. GET 和 POST 区别?网上多数答案都是错的!

    最近在看<HTTP权威指南>这本书,对HTTP协议有了更深一层的了解. 在我们面试过程中关于HTTP协议有两个经典的面试题: 1. 谈谈HTTP中GET与POST的区别. 2. 在浏览器中 ...

  7. Postman接口测试动态传参——动态获取token值

    上午刚学会jmeter动态传参,下午研究了下postman也知道怎么动态获取token了. 主要就是第1行和第2行代码,第3行加上是希望Test Results有个返回值,如果不加第3行运行成功后也看 ...

  8. LeetCode.922-按奇偶排序数组 II(Sort Array By Parity II)

    这是悦乐书的第354次更新,第379篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第216题(顺位题号是922).给定非负整数的数组A,A中的一半整数是奇数,而剩下的一半 ...

  9. Autumn is deep, alas! I stand on the grass in the shadow of the evergreen trees.

    essence. n. 本质 flush.n. 脸红 v. 刷洗 initiate.v.开始 intrinsic.固执的 mainfest.a.显然的 intuition.n.直觉上的 refrain ...

  10. Python Basics with Numpy

    Welcome to your first assignment. This exercise gives you a brief introduction to Python. Even if yo ...