性能优化:zabbix性能优化
Zabbix性能优化概述
造成zabbix性能下降的因素如表所示
因素 |
慢 |
快 |
数据库大小 |
巨大 |
适应内存大小 |
触发器表达式的复杂程度 |
Max()min()avg() |
Last()nodata() |
数据收集方法 |
轮询 |
Trapping |
数据类型 |
文本,字符串 |
数值 |
前端用户数量 |
多 |
少 |
主机数量也是影响性能的主要因素
|
主机数量(台) |
性能(NVPS) |
每个主机有60个items 每分钟更新一次 |
10 |
10 |
100 |
100 |
|
1000 |
1000 |
|
每个主机有600个items 每分钟更新一次 |
10 |
10 |
100 |
1000 |
|
1000 |
10000 |
zabbix性能低下的表现
1. zabbix队列有太多被延迟的item,可以通过administration-queue查看
2. zabbix绘图中经常出现断图,一些item没有数据
3. 带有nodata()函数的触发器出现flase
4. 前端页面无响应,或者响应慢
解决办法如下:
1. 不要使用默认的模板,应该自己定制模板
2. 数据库调优
3. 架构优化,如果使用分布式,各服务器功能独立
4. Items、trigger调优
5. 更换更好的硬件
Zabbix性能优化的原则
1、确保zabbix内部组件性能处于被监控状态(调优的基础!)
2、使用硬件性能足够好的服务器
3、不同角色分开,使用各自独立的服务器
4、使用分布式部署
5、调整MySQL性能
6、调整Zabbix自身配置
Zabbix性能优化的依据
对xxx进行的监控,选择xxx的监控模板,如图
看到如图所示的内部监控情况
查看等待队列
查看详情
等待队列越来越多,说明性能越来越差
NVPS计算方法
NVPS
是PHP语言实现的,文件位于include/func.inc.php
SELECT
round(SUM(1.0/i.delay),2) AS
qps FROM
items i,hosts h WHERE
i.status='0'
AND
i.hostid=h.hostid AND
h.status='0'
AND
i.delay<>0;
配置文件的参数优化
调整zabbix参数(/etc/zabbix/zabbix_server.conf)
StartPollers=160 StartPollersUnreacheable=80 StartTrappers=20 StartPingers=100 StartDiscoverers=120 Cachesize=1024M startDBSyncers=16 HistoryCacheSize-1024M TrendCacheSize=1024M HIstoryTextCacheSize-512M 重启zabbix_server
Zabbix的架构优化
Zabbix的架构分为三种
Server/agent
Server/node/agent
Server/proxy/agent
Item工作模式及trigger优化
Zabbix中的item默认工作是被动模式,可以通过设置主动模式来提高server的性能
Tigger中正则表达式函数last()nodata()的速度是最快的,Min(),max().avg()是最慢的,尽量使用速度快的函数
Zabbix数据库优化
Zabbix数据库优化
1. 对数据库软件本身的优化,采用更高性能的数据库版本
2. 对数据库本身的参数进行调优
3. 对zabbix数据库结构进行优化,进行分表操作,会最大程度提高zabbix的数据库性能,在分表的时候,需要关闭housekeeper
4. 在zabbix_server.conf中的logshowqueries参数是关于慢查询的设置,将其设置为1000,开启这个参数对慢查询继续记录,方便调优配置
5. 对zabbix的工作机制和各种process的作用要了解,对zabbix的数据库表结构也要有比较好的理解。
6. 对数据库优化(在32G内存的服务器中)
[client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock server-id = 1 表示是本机的序号为1 max_allowed_packet = 32M 接受的数据包大小; max_heap_table_size =128 8M 定义了用户可以创建的内存表(memory table)的大小。 read_rnd_buffer_size = 512K MySQL的随机读缓冲区大小。 sort_buffer_size = 16 MySQL执行排序使用的缓冲大小。 join_buffer_size = 16 联合查询操作所能使用的缓冲区大小 query_cache_size = 4096M MySQL的查询缓冲大小 query_cache_limit = 4M 指定单个查询能够使用的缓冲区大小,默认1M innodb_open_files =2048 nnodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300 innodb_buffer_pool_size = 10G nnoDB使用一个缓冲池来保存索引和原始数据 innodb_thread_concurrency = 16 默认设置为 0,表示不限制并发数, [mysqldump] quick max_allowed_packet = 16M #服务器发送和接受的最大包长度 [myisamchk] key_buffer_size = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M