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 中的大型安装是:

图形用户界面调试

与前端性能相关的问题可以使用前端[ 调试模式

一般建议

  • 仅监控所需参数
  • 调整所有监控项的“更新间隔”。保持较小的更新间隔可能获得更好的图表展示,但是,这可能会使 Zabbix 过载
  • 调整默认模板的参数
  • 调整管家参数
  • 不要监控返回相同信息的参数
  • 避免使用作为函数参数给出的长周期触发器。例如, max(/host/key,1h) 的计算速度将明显慢于max(/host/key,1m)。

用“ps”和“top”查看Zabbix进程性能

从Zabbix 2.2 开始进程更改了它们的命令行以显示当前活动和有意义的统计信息,例如:

  1. UID PID PPID C STIME TTY TIME CMD
  2. zabbix22 4584 1 0 14:55 ? 00:00:00 zabbix_server -c /home/zabbix22/zabbix_server.conf
  3. zabbix22 4587 4584 0 14:55 ? 00:00:00 zabbix_server: configuration syncer [synced configuration in 0.041169 sec, idle 60 sec]
  4. zabbix22 4588 4584 0 14:55 ? 00:00:00 zabbix_server: db watchdog [synced alerts config in 0.018748 sec, idle 60 sec]
  5. 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]
  6. 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]
  7. 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]
  8. zabbix22 4670 1 0 14:55 ? 00:00:00 zabbix_proxy -c /home/zabbix22/zabbix_proxy.conf
  9. zabbix22 4673 4670 0 14:55 ? 00:00:00 zabbix_proxy: configuration syncer [synced config 15251 bytes in 0.111861 sec, idle 60 sec]
  10. zabbix22 4674 4670 0 14:55 ? 00:00:00 zabbix_proxy: heartbeat sender [sending heartbeat message success in 0.013643 sec, idle 30 sec]
  11. zabbix22 4688 4670 0 14:55 ? 00:00:00 zabbix_proxy: icmp pinger #1 [got 1 values in 1.811128 sec, idle 5 sec]
  12. zabbix22 4690 4670 0 14:55 ? 00:00:00 zabbix_proxy: housekeeper [deleted 9870 records in 0.233491 sec, idle 3599 sec]
  13. zabbix22 4701 4670 0 14:55 ? 00:00:08 zabbix_proxy: http poller #2 [got 1 values in 0.024105 sec, idle 1 sec]
  14. 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]
  15. zabbix22 4738 1 0 14:55 ? 00:00:00 zabbix_agentd -c /home/zabbix22/zabbix_agentd.conf
  16. zabbix22 4739 4738 0 14:55 ? 00:00:00 zabbix_agentd: collector [idle 1 sec]
  17. zabbix22 4740 4738 0 14:55 ? 00:00:00 zabbix_agentd: listener #1 [waiting for connection]
  18. 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 次命令以查看进程活动:

  1. watch -n 0.2 ps -fu zabbix

仅显示Zabbix proxy 和 agent 进程:

  1. watch -tn 0.2 'ps -f -C zabbix_proxy -C zabbix_agentd'

仅显示历史同步器进程:

  1. watch -tn 0.2 'ps -fC zabbix_server | grep history'

由于某些活动消息很长,因此该 ps 命令会产生很宽的输出(大约 190 列)。如果您的终端的文本少于 190 列,您可以尝试

  1. 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 命令 ,可以达到类似的效果

  1. while [ 1 ]; do ps x; sleep 0.2; clear; done
AIX, HP-UX

如果watch 命令不可用,可以尝试

  1. while [ 1 ]; do ps -fu zabbix; sleep 1; clear; done
Solaris

默认情况下,该 ps 命令不显示变化的活动。一种选择是/usr/ucb/ps 来替代。 如果没有安装 watch命令,则可以显示定期更新的进程列表

  1. 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)。

另请参阅

  1. 如何配置zabbix进程的最佳数量