12 性能调优
这是一项持续进行的工作。
概述
正确调整 Zabbix 系统以获得最佳性能非常重要。
硬件
关于硬件的一些建议:
- 使用最快的处理器
- SCSI 或 SAS 优于 IDE(使用实用程序 hdparm 可以显着提高 IDE 磁盘的性能)和 SATA
- 15K RPM 优于 10K RPM,10K RPM优于 7200 RPM
- 使用快速 RAID 存储
- 使用快速以太网适配器
- 内存越多越好
操作系统
- 使用最新(稳定!)版本的操作系统
- 从内核中排除不必要的功能
- 调整内核参数
Zabbix 配置参数
可以调整许多参数以获得最佳性能。
为了获得最佳性能(即当轮询器不与历史同步器竞争配置缓存中的公共资源时),建议在 Zabbix server上保留少量的历史轮询器、轮询器、不可达轮询器、Java 轮询器、ODBC 轮询器,并使它们通过将所有轮询委托给 Zabbix 代理来尽可能释放。
zabbix_server
启动轮询
一般规则 - 保持此参数的值尽可能低。每个额外的zabbix_server实例都会增加已知开销,同时增加并行度。当监控项队列平均包含最少的参数(理想情况下,在任何给定时刻为 0)时,实例数达到最佳。这个值可以通过内部检查zabbix[queue]来监控。
请参阅本页底部的 “另请参阅” 部分,了解如何配置 zabbix 进程的最佳数量。
开始历史轮询
该值应保持尽可能低,以避免不必要的数据库连接。每个历史轮询器都需要连接到数据库。
另请参阅:服务区进程类型
调试级别
最佳值为 3。
DBSocket
仅限 MySQL。推荐使用 DBSocket 连接数据库。这是最快最安全的方式。
数据库引擎
这可能是 Zabbix 调优中最重要的部分。Zabbix 很大程度上依赖于数据库引擎的可用性和性能。
- 使用最快的数据库引擎,即 MySQL 或 PostgreSQL
- 使用稳定版本的数据库引擎
- 从源代码重建 MySQL 或 PostgreSQL 以获得最佳性能
- 遵循从 MySQL 或 PostgreSQL 文档中获取的性能调整说明
- 对于 MySQL,使用 InnoDB 表结构
- 如果使用 InnoDB,ZABBIX 的运行速度至少快 1.5 倍(与 MyISAM 相比)。这是因为增加了并行性。然而,InnoDB 需要更多的 CPU算力
- 强烈建议调整数据库服务器以获得最佳性能
- 将数据库表保存在不同的硬盘上
- ‘history’, ‘history_str, ‘items’ ‘functions’, triggers’, 和’trends’ 是使用最频繁的表。
- 对于将 MySQL 临时文件保存在 tmpfs 中的大型安装是:
- MySQL >= 5.5: 不推荐 (MySQL 错误 #58421)
- MySQL < 5.5: 推荐
图形用户界面调试
与前端性能相关的问题可以使用前端[ 调试模式。
一般建议
- 仅监控所需参数
- 调整所有监控项的“更新间隔”。保持较小的更新间隔可能获得更好的图表展示,但是,这可能会使 Zabbix 过载
- 调整默认模板的参数
- 调整管家参数
- 不要监控返回相同信息的参数
- 避免使用作为函数参数给出的长周期触发器。例如, max(/host/key,1h) 的计算速度将明显慢于max(/host/key,1m)。
用“ps”和“top”查看Zabbix进程性能
从Zabbix 2.2 开始进程更改了它们的命令行以显示当前活动和有意义的统计信息,例如:
UID PID PPID C STIME TTY TIME CMD
zabbix22 4584 1 0 14:55 ? 00:00:00 zabbix_server -c /home/zabbix22/zabbix_server.conf
zabbix22 4587 4584 0 14:55 ? 00:00:00 zabbix_server: configuration syncer [synced configuration in 0.041169 sec, idle 60 sec]
zabbix22 4588 4584 0 14:55 ? 00:00:00 zabbix_server: db watchdog [synced alerts config in 0.018748 sec, idle 60 sec]
zabbix22 4608 4584 0 14:55 ? 00:00:00 zabbix_server: timer #1 [updated 0 hosts, suppressed 0 events in 0.000472 sec, idle 59 sec]
zabbix22 4637 4584 0 14:55 ? 00:00:01 zabbix_server: history syncer #3 [processed 0 values, 0 triggers in 0.000036 sec, idle 1 sec]
zabbix22 4657 4584 0 14:55 ? 00:00:00 zabbix_server: vmware collector #1 [updated 0, removed 0 VMware services in 0.000004 sec, idle 5 sec]
zabbix22 4670 1 0 14:55 ? 00:00:00 zabbix_proxy -c /home/zabbix22/zabbix_proxy.conf
zabbix22 4673 4670 0 14:55 ? 00:00:00 zabbix_proxy: configuration syncer [synced config 15251 bytes in 0.111861 sec, idle 60 sec]
zabbix22 4674 4670 0 14:55 ? 00:00:00 zabbix_proxy: heartbeat sender [sending heartbeat message success in 0.013643 sec, idle 30 sec]
zabbix22 4688 4670 0 14:55 ? 00:00:00 zabbix_proxy: icmp pinger #1 [got 1 values in 1.811128 sec, idle 5 sec]
zabbix22 4690 4670 0 14:55 ? 00:00:00 zabbix_proxy: housekeeper [deleted 9870 records in 0.233491 sec, idle 3599 sec]
zabbix22 4701 4670 0 14:55 ? 00:00:08 zabbix_proxy: http poller #2 [got 1 values in 0.024105 sec, idle 1 sec]
zabbix22 4707 4670 0 14:55 ? 00:00:00 zabbix_proxy: history syncer #4 [processed 0 values, 0 triggers in 0.000039 sec, idle 1 sec]
zabbix22 4738 1 0 14:55 ? 00:00:00 zabbix_agentd -c /home/zabbix22/zabbix_agentd.conf
zabbix22 4739 4738 0 14:55 ? 00:00:00 zabbix_agentd: collector [idle 1 sec]
zabbix22 4740 4738 0 14:55 ? 00:00:00 zabbix_agentd: listener #1 [waiting for connection]
zabbix22 4741 4738 0 14:55 ? 00:00:00 zabbix_agentd: listener #2 [processing request]
主进程例外。显示的是原始命令行,而不是当前活动。这有助于区分具有多个 Zabbix 实例的系统上的进程。
此功能不支持 Microsoft Windows 。
如果日志级别设置为 DebugLevel=4这些活动和统计信息也会写入日志文件。
Linux
在 Linux 系统上 ps
命令可以与 watch
命令一起使用,以观察 Zabbix 的运行情况。例如,ps
c每秒运行 5 次命令以查看进程活动:
watch -n 0.2 ps -fu zabbix
仅显示Zabbix proxy 和 agent 进程:
watch -tn 0.2 'ps -f -C zabbix_proxy -C zabbix_agentd'
仅显示历史同步器进程:
watch -tn 0.2 'ps -fC zabbix_server | grep history'
由于某些活动消息很长,因此该 ps
命令会产生很宽的输出(大约 190 列)。如果您的终端的文本少于 190 列,您可以尝试
watch -tn 0.2 'ps -o cmd -C zabbix_server -C zabbix_proxy -C zabbix_agentd'
仅显示没有 UID、PID、开始时间等的命令行。
top
命令也可用于观察 Zabbix 性能。按 ‘c’ 键 top
显示带有命令行的进程。在我们在 Linux 上的测试中 top
and atop
c正确显示了 Zabbix 进程的变化活动,但 htop
没有显示变化的活动。
BSD 系统
如果没有安装watch
命令 ,可以达到类似的效果
while [ 1 ]; do ps x; sleep 0.2; clear; done
AIX, HP-UX
如果watch
命令不可用,可以尝试
while [ 1 ]; do ps -fu zabbix; sleep 1; clear; done
Solaris
默认情况下,该 ps
命令不显示变化的活动。一种选择是/usr/ucb/ps
来替代。 如果没有安装 watch
命令,则可以显示定期更新的进程列表
while [ 1 ]; do /usr/ucb/ps gxww; sleep 1; clear; done
在 Solaris 11:
/usr/ucb/ps
默认情况下不安装。您可能需要安装ucb 包,例如pkg install compatibility/ucb
。- 如果 Zabbix 守护进程已由特权用户启动,则其活动不会显示给非特权用户。
sleep
命令不仅接受整秒,还接受秒的小数部分(例如sleep 0.2
)。