ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

带你由浅入深学习Zabbix 【性能优化】

2020-05-13 13:03:55  阅读:304  来源: 互联网

标签:由浅入深 缓存 数据库 zabbix server Zabbix mysql 优化


带你由浅入深学习Zabbix

 

在zabbix的使用过程中,随着监控对象的增多,历史数据量逐日相应的增加,zabbix-server服务器性能方面会出现瓶颈,从而让zabbix工程师面临管理的难题。因此,本章将从性能优化方面探讨一些简单、高效的优化方案。

1. Zabbix性能概述

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

如何判断zabbix-server性能

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

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

可以通过zabbix本机自带模版监控查看性能变化图,其中左侧纵坐标代表通过zabbix服务器每秒处理的值,图形中用绿色表示;右侧纵坐标代表需要处理写入数据库的列队值,图形中用红色表示。等待列队逐渐增多,说明性能越来越差。

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

多使用ps和top系统命令查看zabbix进程性能,用watch结合ps一起使用观察zabbix工作。例:

[root@localhost /]# watch –n 0.2 ps –fu zabbix

#每0.2秒运行ps一次查看zabbix进程活动

//////////

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 %##不可达的轮询进程占比

Zabbix配置文件可以调整大部分进程与缓存,以获得最佳的工作性能。编辑zabbix-server配置文件

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

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

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

### Option: StartPollers

# Number of pre-forked instances of pollers.

#

# Mandatory: no

# Range: 0-1000

# Default:

StartPollers=5

#填写范围0-1000,默认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进程。加载新配置生效

//////////

3. Zabbix数据库优化

数据库可以说是zabbix调优中最重要的部分,zabbix在很大程度上取决于数据库引擎的可用性和性能。使用最快的数据库引擎,即MySQL或PostgreSQL,使用InnoDB表结构。将数据库表保留在不同的硬盘上,或者做数据库分表,根据mysql的存储引擎,一般采用日期(range)类型的方式将几张大表(见下图)进行表分区。图中可见history表已经有6.5亿条数据,占用了50G左右空间。可见查询某一条数据时的压力。

调用mysql存储过程,使用外部脚本来管理分区。定期按日期创建新的表分区删除旧的数据表,操作均由mysql独立完成,关闭HouerKeeper,减轻zabbix负担。建议需求量还没达到特别大,对MySQL也不精通的朋友,不要进行zabbix分表。zabbix表与表之间关联关系很大,随时可以因为删掉某一条数据,造成数据库无法启动的状况,此篇文章不对数据库分表做事例。

对于数据库本身的参数进行优化,修改my.cnf调整数据库配置。下面列举比较重要的几个参数作为参考,重中之重用红色标识:

[root@localhost /]# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

max_connections = 600

#最大并发连接数。增加太大会影响数据库本身性能,根据业务选择适当范围即可

max_allowed_packet = 32M

#接受的数据包大小

max_heap_table_size =128M

#定义了用户可以创建的内存表的大小

read_rnd_buffer_size = 512K

# MySQL的随机读缓冲区大小

sort_buffer_size = 1M

MySQL执行排序使用的缓冲大小

join_buffer_size = 1M

# 批量查询操作使用的缓冲区大小

query_cache_size = 2048M

#MySQL的查询缓冲大小

query_cache_limit = 32M

#指定单个查询能够使用的缓冲区大小

innodb_open_files =2048

#nnodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300

innodb_buffer_pool_size = 10G

#nnoDB使用一个缓冲池来保存索引和原始数据

innodb_thread_concurrency = 32

#默认设置为 0,表示不限制并发数,

thread_cache_size = 10

#线程缓存

table-cache = 5000

#所有线程打开的表的数目。增大该值可以增加mysql需要的文件描述符的数量

back_log = 300

#接收队列,对于没建立tcp连接的请求队列放入缓存中

数据库当然还有其他调优部分:如日志大小,日志缓存,慢查询日志等。均能对zabbix-server造成不同程度的提升。

//////////

4. Zabbix前端优化

减少history的保存时间,减少item的获取间隔时间,大部分的item是不需要间隔时间太短的,尽量减少无意义的监控项。将Items的检测方式修改为主动模式(默认为被动模式)。为了提高性能或者环境需要,可将所有的Items都设置为主动模式。主动模式由于是Agent将采集到的数据主动发送给Server,而不需要Server每次连接Agent等待采集,所以采用主动模式会使Zabbix-Server具有更好的性能。

Trigger中正则表达式函数last()、nodata()的速度是传输最快的,min()、manx()、avg()是传输最慢的,尽量使用速度快的函数。在Trigger的配置中,很可能出现由于一个函数的逻辑错误导致数据库查询较慢从而影响Server性能的现象。以及一些模版的优化,自动发现处理的优化。

//////////

5. 其他

选用更好的硬件配置和快速的磁盘配置等工作应该是在规划之前进行的,如选用快速的RAID存储、SSD固态硬盘、多核CPU、大容量内存等硬件优化。通常,在优化软件无效的情况下,换更好的硬件会有非常明显的效果,但大多情况下,我们还是以优化软件为主。

使用最新的操作系统,定制化操作系统内核,排除内核中不必要的功能。应该有些作用,但是效果肯定不明显。

可能由于zabbix本身对某些方面的性能并未满足我们的需求,需要从代码级别进行二次开发优化。这需要根据自身需求来改进。

//////////

6. 常见故障问题

zabbix-server报错提示Error connection to database :Too many connections错误。原因是数据库连接太多,大部分是mysql最大连接数问题。编辑vim /etc/my.cnf文件调整max_connections=参数。

报错是这样时;Error connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) /var/lib/mysql/mysql.sock 文件不存在。编辑 vim /etc/my.cnf

socket = /var/lib/mysql/mysql.sock 更改此处,重启数据库。

当前端web提示如下图中zabbix server is not running the information displayed may not be current服务器报错信息时,此时报错并没有相关提示,不清楚到底哪里出现了问题,查看server日志,日志中会记录有关zabbix工作的一切内容,查看/var/log/zabbix/zabbix_server.log, 根据日志提示得出无法连接到数据库,连接进程太多。修改配置文件各项参数即可,修改后依然报错也有可能是防火墙的问题。请结合自身业务性能瓶颈查找问题原因。

//////////

 

- END -

标签:由浅入深,缓存,数据库,zabbix,server,Zabbix,mysql,优化
来源: https://www.cnblogs.com/magita/p/12881738.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有