12 性能调优

这是一个正在进行的工作.

概述

在使用过程中,正确的调整Zabbix系统,使之保持高性能是非常重要的。

硬件

关于硬件的一般建议:

  • 使用最快的处理器

  • SCSI或SAS都优于IDE(使用实用程序hdparm可以显着提高IDE磁盘的性能)或SATA

  • 15K RPM优于10K RPM,10K RPM优于7200RPM

  • 使用快速RAID存储

  • 使用快速以太网适配器

  • 内存总是越多越好

操作系统

  • 使用最新(稳定版!)版本的操作系统

  • 从内核中排除不必要的功能

  • 调整内核参数

Zabbix参数配置

许多参数都可调节以获得最佳性能。

zabbix_server

StartPollers

一般规则 - 尽可能地保持低参数值。 zabbix_server的每个附加实例都会添加已知的系统开销, 同时增加并行性。当队列平均包含最小参数数量(理想情况下,在任何给定时刻为0)时,实现最佳实例数。可以通过使用内部检查zabbix[queue]来监视此值。

参见文末 “See also” 以了解如何配置Zabbix进程的最佳数量。

DebugLevel

最佳值为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’ 是使用最多的表格。

  • 对于大型安装,建议在tmpfs中保留MySQL临时文件:

GUI调试

与前端性能相关的问题可以使用前端诊断功能debug mode

一般建议

  • 仅监控所需参数。

  • 调整所有项目的’更新间隔’。 保持较小的更新间隔能较好的获得漂亮的图形,但这可能会使Zabbix超载。

  • 调整默认模板的参数。

  • 调整housekeeping参数。

  • 不监视返回相同信息的参数。

  • 避免使用长期给出的触发器作为函数参数。 例如,max(3600)的计算速度明显比max(60)慢。

使用”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 [processed 3 triggers, 0 events in 0.007867 sec, 0 maint.periods in 0.005677 sec, idle 30 sec]
  6. zabbix22 4609 4584 0 14:55 ? 00:00:00 zabbix_server: timer #2 [processed 2 triggers, 0 events in 0.004209 sec, idle 30 sec]
  7. zabbix22 4637 4584 0 14:55 ? 00:00:01 zabbix_server: history syncer #4 [synced 35 items in 0.166198 sec, idle 5 sec]
  8. 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]
  9. zabbix22 4670 1 0 14:55 ? 00:00:00 zabbix_proxy -c /home/zabbix22/zabbix_proxy.conf
  10. zabbix22 4673 4670 0 14:55 ? 00:00:00 zabbix_proxy: configuration syncer [synced config 15251 bytes in 0.111861 sec, idle 60 sec]
  11. zabbix22 4674 4670 0 14:55 ? 00:00:00 zabbix_proxy: heartbeat sender [sending heartbeat message success in 0.013643 sec, idle 30 sec]
  12. zabbix22 4688 4670 0 14:55 ? 00:00:00 zabbix_proxy: icmp pinger #1 [got 1 values in 1.811128 sec, idle 5 sec]
  13. zabbix22 4690 4670 0 14:55 ? 00:00:00 zabbix_proxy: housekeeper [deleted 9870 records in 0.233491 sec, idle 3599 sec]
  14. zabbix22 4701 4670 0 14:55 ? 00:00:08 zabbix_proxy: http poller #2 [got 1 values in 0.024105 sec, idle 1 sec]
  15. zabbix22 4707 4670 0 14:55 ? 00:00:00 zabbix_proxy: history syncer #4 [synced 22 items in 0.008565 sec, idle 5 sec]
  16. zabbix22 4738 1 0 14:55 ? 00:00:00 zabbix_agentd -c /home/zabbix22/zabbix_agentd.conf
  17. zabbix22 4739 4738 0 14:55 ? 00:00:00 zabbix_agentd: collector [idle 1 sec]
  18. zabbix22 4740 4738 0 14:55 ? 00:00:00 zabbix_agentd: listener #1 [waiting for connection]
  19. 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 命令5次以查看进程活动:

  1. watch -n 0.2 ps -fu zabbix

仅显示Zabbix代理和代理进程:

  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的性能。 在 top中按’c’键显示其命令行的进程。在我们对Linux topatop的测试中,正确显示了Zabbix进程的变化活动, 但是 htop 不显示不断变化的活动。

BSD systems

如果没有安装 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

On Solaris 11:

  • /usr/ucb/ps默认情况下未安装. 你可能需要 ucb 安装包, 例如 pkg install compatibility/ucb

  • 如果Zabbix守护进程已由特权用户启动,则其活动不会显示给非特权用户。

  • sleep 命令不仅接受整秒钟 b而且接受第二秒的分数 (例如 sleep 0.2)。

参阅

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