在使用Zabbix过程中,正确的调整Zabbix系统,使之保持高性能是非常重要的,能够充分利用硬件资源,监控更多主机和性能指标。

硬件

关于Zabbix Server端硬件的建议:

  • 处理器:使用最新稳定的处理器,一般同级别的处理器,新一代的往往比上一代的性能更强、功耗更低;
  • 磁盘:建议固态硬盘,或者不低于10K RPM的机械硬盘,建议做RAID;
  • 内存:通常建议不低于8G,若监控主机超过1000台,建议配置更高的内存;
  • 网卡:建议至少千兆网卡;

官网硬件配置参考:

规模 平台 CPU/内存 数据库 受监控的主机数量
小型 CentOS Virtual Appliance MySQL InnoDB 100
中型 CentOS 2 CPU cores/2GB MySQL InnoDB 500
大型 RedHat Enterprise Linux 4 CPU cores/8GB RAID10 MySQL InnoDB 或 PostgreSQL >1000
极大型 RedHat Enterprise Linux 8 CPU cores/16GB Fast RAID10 MySQL InnoDB 或 PostgreSQL >10000

Tips:实际配置应不低于官方推荐。

系统

  • 使用最新稳定版的操作系统,比如CentOS目前最新稳定版是7.9;
  • 最小化安装系统镜像,按需安装Zabbix Server需要的依赖;
  • 调整内核参数,调整open filesmax user processes等参数;
  • 应以特定用户最小权限去运行Zabbix程序和文件;
  • 时间同步,在运行 Zabbix 的服务器上拥有精确的系统日期非常重要;

数据库

  • 推荐MySQL5.7+;
  • 独立部署;
  • 推荐使用固态+Raid;
  • 足够的磁盘空间;

Zabbix 数据库大小主要取决于这些变量,这些变量决定了存储的历史数据量:

  • 每秒处理值的数量;
  • 历史数据;

Zabbix 将接收到的值保存一段固定的时间,通常为几周或几个月。 每个新值都需要一定量的磁盘空间用于数据和索引。

web服务

  • PHP:建议使用Zabbix官网推荐版本;
  • Nginx:建议使用最新稳定版本;

Zabbix Server

配置文件优化参考:

参数名称 说明
CacheSize 256M 缓存大小, 单位为字节。 用于存储主机、监控项、触发器数据的共享内存大小。 Zabbix2.2.3以前的版本最大可配置值为2GB。
CacheUpdateFrequency 60 Zabbix 配置缓存更新频率, 单位为秒. 另外参考 runtime control 选项。
DebugLevel 3 指定调试等级: 0 - Zabbix进程的起停基本信息 1 - 严重(Critical)信息 2 - 错误(Error)信息 3 - 警告(Warning)信息 4 - 调试(Debug)信息 (产生大量信息) 5 - 扩展调试 (产生更多信息) 另外可参考 runtime control 选项。
ExportFileSize 1G 每个导出文件的最大限制,单位为字节。仅当ExportDir参数设置后才使用,用于轮转生成导出的文件。 此参数从Zabbix 4.0.0开始支持。
HistoryCacheSize 128M 历史缓存数据大小, 单位为字节。
HistoryIndexCacheSize 16M 历史索引缓存大小, 单位为字节。\缓存一个item大概需要大小为100字节的空间。 该参数从Zabbix 3.0.0开始支持。
HistoryStorageDateIndex 1 启用历史数据预处理,可以将数据存储到不同的基于时间的索引: 0 - 禁止 1 - 允许
HistoryStorageURL 你的ES URL 历史数据存储 HTTP[S] URL,用于把历史数据存储到ElasticSearch。 这个参数参考 Elasticsearch进行配置。
HistoryStorageTypes uint,dbl,str,log,text 以逗号分隔的列表配置哪些类型的历史数据需要存储到Elasticsearch。 这个参数参考 Elasticsearch 进行配置。
HousekeepingFrequency 3 Zabbix 执行 housekeeping 的频率 (单位为小时)。 housekeeping负责从数据库中删除过期的信息。 注意: 为了防止 housekeeper 负载过大 (例如, 当历史和趋势周期大大减小时), 对于每一个监控项,不会在一个housekeeping周期内删除超过4倍HousekeepingFrequency 的过期数据。 因此, 如果 HousekeepingFrequency 是 1小时, 一个周期内不会删除超过4小时的过期信息 (从最旧的数据开始) 。 备注: 为降低 server压力, housekeeping将在server启动以后,延迟30分钟执行。 因此, 如果 HousekeepingFrequency 是1小时,server启动30分后执行第一次 housekeeping , 然后按1小时为周期重复执行。从Zabbix 2.4.0以后有了这种延迟行为。 从Zabbix 3.0.0开始,可以设置HousekeepingFrequency为0来禁止自动housekeeping。 此时 housekeeping 只能通过 housekeeper_execute 启动, 在一个housuekeeping周期内删除的过期信息时长为从最后一次housekeeping以来到配置周期的4倍,不少于4小时且不大于4天。 也可参见运行控制 选项。
LogFile 日志文件名称。
LogFileSize 128 日志文件大小,单位 MB。 0 - 禁止日志文件自动回滚. 注意: 如果日志文件达到限定的大小,文件回滚失败, 不管是什么原因, 现有的日志会被截断,并重新记录日志。
LogType file 日志输出类型: file - 写入LogFile 参数指定的日志文件中, system - 写入syslog, console - 控制台输出. 从Zabbix 3.0.0开始支持该参数。
LogSlowQueries 3000 数据库查询消耗时间,大于该时间将会记入日志 (毫秒)。 0 - 不记录慢查询日志。 DebugLevel=3时该选项可用。 从Zabbix 1.8.2开始支持该参数
MaxHousekeeperDelete 50000 一个housekeeping周期内,一个任务删除的最大行数 (相应的表名,字段名,值)。 如果设置为0,不限制删除的行数,这种情况,你必须清楚这样做的影响! 从Zabbix 1.8.2 开始支持该参数,仅在对已经被删除的监控项进行历史和趋势数据删除操作时有效。
ProxyConfigFrequency 180 Zabbix server 多少秒向Zabbix proxy 发送一次配置数据,用于被动模式的proxy 。 从Zabbix 1.8.3开始支持该参数。
ProxyDataFrequency 1 Zabbix server 多少秒向Zabbix proxy请求一次历史数据, 用于被动模式的proxy。\从Zabbix 1.8.3开始支持该参数。
StartDBSyncers 8 数据库进程的初始实例数量。 在版本1.8.5之前,上限是64。 这个参数从Zabbix 1.8.3开始得到了支持。
StartAlerters 12 报警进程的初始实例数量。 从Zabbix 3.4.0开始支持该参数。
StartDiscoverers 12 发现进程的初始实例数量。 在Zabbix 1.8.5版本之前,最大能设置为255。
StartEscalators 12 escalators进程的初始实例数量。 从Zabbix 3.0.0开始支持该参数。
StartHTTPPollers 6 HTTP 轮询进程的初始实例数量**1**. 在Zabbix 1.8.5版本之前,最大能设置为255。
StartIPMIPollers 3 IPMI 轮询进程的初始实例数量。 在Zabbix 1.8.5版本之前,最大能设置为255。
StartJavaPollers 6 Java 轮询子进程的初始实例数量。**1**. 从Zabbix 2.0.0开始支持该参数。
StartLLDProcessors 2 Number of pre-forked instances of low-level discovery (LLD) workers**1**. The LLD manager process is automatically started when an LLD worker is started. This parameter is supported since Zabbix 4.2.0.
StartPingers 12 ICMP pingers进程的初始实例数量**1**. 在Zabbix 1.8.5版本之前,最大能设置为255。
StartPollersUnreachable 6 不可达主机 (包括IPMI 和 Java)的轮询进程的初始实例数量。**1**. 从Zabbix 2.4.0开始,如果IPMI或Java轮询器启动,那么至少有一个针对不可访问主机的轮询进程必须运行。 在Zabbix 1.8.5版本之前,最大能设置为255。 这个参数从Zabbix 1.8.3版本缺失。
StartPollers 12 轮询进程的初始实例数量。**1**.\注意如果要内部,聚合,计算的监控项能正常工作,这个参数值必须非0。
StartPreprocessors 12 预处理工作进程的初始实例数量。\预处理管理进程将跟随预处理工作进程启动。**1**. 从Zabbix 3.4.0开始支持该参数。
StartProxyPollers 3 被动proxy的轮询进程初始实例数量。**1**.\在Zabbix 1.8.5版本之前,最大能设置为255。 从Zabbix 1.8.3开始支持该参数。
StartSNMPTrapper 0 设置为1, SNMP trapper进程将启动。 从Zabbix 2.0.0开始支持该参数。
StartTimers 1 计时器进程的初始实例数量。 计时器进程处理基于时间的触发器和维护期功能。 只有第一个计时器进程处理维护期。 从Zabbix 2.2.0开始支持该参数。
StartTrappers 12 trapper进程的初始实例数量。**1**. Trapper接收来自Zabbix发送者、主动agent和主动proxies的数据。 至少要运行一个trapper进程用于在web前端展示服务器可用性和队列视图。 在Zabbix 1.8.5版本之前,最大能设置为255。
StartVMwareCollectors 2 vmware采集器进程的初始实例数量。\从Zabbix 2.2.0开始支持该参数。
StatsAllowedIP 逗号分隔的IP地址列表,可选CIDR表示法, 或外部Zabbix实例的DNS名称. 只接受来自此处列出的地址的Stats请求。如果未设置此参数,则不接受stats请求。 如果启用IPv6支持,则’127.0.0.1’, ‘::127.0.0.1’, ‘::ffff:127.0.0.1’ 与’::/0’等价表示为允许任何IPv4或IPv6地址。’0.0.0.0/0’可用于允许任何IPv4地址。 示例: StatsAllowedIP=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com 从Zabbix 4.2.0开始支持此参数。
Timeout 3 agent, SNMP设备或外部检查的超时时长(单位为秒)。
TrapperTimeout 300 定义trapper处理数据的超时时间。
TrendCacheSize 16M 趋势数据缓存大小,单位字节。 用于存储趋势数据的共享内存大小。
UnavailableDelay 60 在资源不可用期间,Zabbix多少秒检查一次资源是否可用。
UnreachableDelay 15 在资源不可达期间 ,Zabbix多少秒检查一次资源是否可达。
UnreachablePeriod 45 在主机 不可用多少秒后,即视为主机不可用。
User zabbix 降低系统某普通用户的权限。 仅当以’root’身份运行且AllowRoot参数设置为禁止时,该参数才起作用。 从Zabbix 2.4.0开始支持该参数。
ValueCacheSize 8M
VMwareCacheSize 8M 存储VMware数据的共享内存大小。 VMware内部检查[vmware,buffer,…] 可以用来监控VMware缓存使用情况 (参见 内部检查)。 注意,如果没有配置并启动vmware收集器实例,那么共享内存就不会被分配。\从Zabbix 2.2.0开始支持该参数。
VMwareFrequency 60 间隔多少秒从单个VMware服务收集数据。\任何VMware监控项的最小更新周期都大于或等于该时间。 从Zabbix 2.2.0开始支持该参数。
VMwarePerfFrequency 60 间隔多少秒从单个VMware服务检索性能计数器统计数据。 该时间为任一VMware 监控项(使用VMware性能计数器)的最小更新间隔。 从Zabbix 2.2.9, 2.4.4开始支持该参数。
VMwareTimeout 10 vmware采集器等待 VMware 服务(vCenter or ESX 管理程序)响应的最大时长。 从Zabbix 2.2.9, 2.4.4开始支持该参数。

Tips:太多的数据采集进程 (pollers, unreachable pollers, HTTP pollers, Java pollers, pingers, trappers, proxypollers) 与 IPMI manager , SNMP trapper 和预处理工作进程(preprocessing workers)一起会耗尽预处理管理器的每进程文件描述符限制。因此,需要增大open filesmax user processes

Agent

推荐使用Zabbix Agent2。Agent和Agent2版本对比如下:

参数 Zabbix agent Zabbix agent 2
程序设计语言 C 一部分使用C,其他用go
守护进程 yes no (Windows 5.0.4之后版本支持)
扩展支持 自定义C的可加载模块 自定义GO的插件
请求
支持平台 Linux, IBM AIX, FreeBSD, NetBSD, OpenBSD, HP-UX, Mac OS X, Solaris: 9, 10, 11, Windows: 从xp开始所有的桌面和服务端版本。 Linux, Windows: 从xp开始所有的桌面和服务端版本。
支持的加密库 GnuTLS 3.1.18 and newer OpenSSL 1.0.1, 1.0.2, 1.1.0, 1.1.1 SSL库 - tested with versions 2.7.4, 2.8.2 (某些限制的使用, 查看 加密详情页). Linux: OpenSSL 1.0.1和最新版本在Zabbix 4.4.8之后支持。 MS Windows: OpenSSL 1.1.1或者最新版. OpenSSL库必须开启PSK,否则LibreSSL不支持.
监控进程
进程 每个server/proxy都有独立的进程。 单个进程多线程。 这最大的线程数由GOMAXPROCS环境变量决定。
指标 UNIX: 查看支持的 items. Windows: 查看指定Windows版本的监控项. UNIX: Zabbix agent支持所有指标。 其他的, agent2 提供Docker, Memcached, MySQL, PostgreSQL, Redis, systemd (查看agent2的监控项)的Zabbix-native监控方案 Windows: Zabbix agent支持所有指标和HTTPS检查 net.tcp.service* , LDAP. 其他的, agent2 提供关于PostgreSQL, Redis的Zabbix-native监控方案。
并发 单进程按监控项顺序进行检查 来自不同插件的检查或一个插件内的多个检查可以同时执行。
计划/灵活 间隔 仅支持被动检查。 支持主动检查。
第三方traps no yes
Additional features
永久存储 no yes
超时设置 只能定义agent级别。 超时插件可以覆盖在agent上的级别超时设置。
删除用户权限 yes (Unix-like systems only) no
用户可配置密码套件 yes no

Proxy

Zabbix proxy 是一个可以从一个或多个受监控设备采集监控数据并将信息发送到 Zabbix server 的进程,主要是代表 Zabbix server 工作。 所有收集的数据都在本地缓存,然后传输到 proxy 所属的 Zabbix server。

部署Zabbix proxy 是可选的,但可能非常有利于分担单个 Zabbix server 的负载。 如果只有代理采集数据,则 Zabbix server 上会减少 CPU 和磁盘 I/O 的开销。

建议:

  • 尽量减少Server直接监控主机的数量,建议由多个Proxy负担大部分的负载;
  • 选择性能较好的主机作为Proxy;

配置优化参考:

必须配置 说明
CacheSize 256M 缓存大小, 单位为字节。 用于存储主机、监控项数据的共享内存大小。 在Zabbix 5.0.1版本这参数的最大值可以从8G增加到64G。
ConfigFrequency 180 每隔多少秒proxy从Zabbix server获取配置数据。 该参数只有主动proxy才会使用,proxy工作模式由参数ProxyMode决定。
DataSenderFrequency 1 Proxy将采集到的数据以一定的时间间隔(单位为秒)发送给Zabbix server。 该参数只有主动proxy才会使用,proxy工作模式由参数ProxyMode决定。
DebugLevel 3 指定调试等级: 0 - Zabbix进程的起停基本信息 1 - 重要(Critical)信息 2 - 错误(Error)信息 3 - 警告(Warning)信息 4 - 调试(Debug)信息 (产生大量信息) 5 - 扩展调试 (产生更多信息)
EnableRemoteCommands 0 是否允许Zabbix server远程执行命令。 0 - 禁止 1 - 允许 从Zabbix 3.4.0开始支持该参数。
HeartbeatFrequency 60 心跳信息发送频率,单位为秒。 用于监视proxy的可用性。 0 - 禁止 该参数只有主动proxy才会使用,proxy工作模式由参数ProxyMode决定。
HistoryCacheSize 128M 历史缓存数据大小, 单位为字节。 存储历史数据使用共享内存.
HistoryIndexCacheSize 16M 历史索引缓存大小, 单位为字节。\缓存一个item大概需要大小为100字节的空间。 该参数从Zabbix 3.0.0开始支持。
HousekeepingFrequency 1 Zabbix 执行 housekeeping 的频率 (单位为小时)。 housekeeping负责从数据库中删除过期的信息。 注意: 为了防止 housekeeper 负载过大 (例如, 当历史和趋势周期大大减小时), 对于每一个监控项,不会在一个housekeeping周期内删除超过4倍HousekeepingFrequency 的过期数据。 因此, 如果 HousekeepingFrequency 是 1小时, 一个周期内不会删除超过4小时的过期信息 (从最旧的数据开始) 。 备注: 为降低 server压力, housekeeping将在server启动以后,延迟30分钟执行。 因此, 如果 HousekeepingFrequency 是1小时,serverg启动30分后执行第一次 housekeeping , 然后按1小时为周期重复执行。从Zabbix 2.4.0以后有了这种延迟行为。 从Zabbix 3.0.0开始,可以设置HousekeepingFrequency为0来禁止自动housekeeping。 此时 housekeeping 只能通过 housekeeper_execute 启动, 在一个housuekeeping周期内删除的过期信息时长为从最后一次housekeeping以来到配置周期的4倍,不少于4小时且不大于4天。
LogFile 日志文件名字
LogFileSize 128M 日志文件大小,单位 MB。 0 - 禁止日志文件自动回滚. 注意: 如果日志文件达到限定的大小,文件回滚失败, 不管是什么原因, 现有的日志会被截断,并重新记录日志。
LogRemoteCommands 1 当执行shell命令时可以记录日志。 0 - 禁止 1 - 允许 从Zabbix 3.4.0开始支持该参数。
LogType file 日志输出类型: file - 写入LogFile 参数指定的日志文件中, system - 写入syslog, console - 控制台输出. 从Zabbix 3.0.0开始支持该参数。
LogSlowQueries 3000 数据库查询消耗时间,大于该时间将会记入日志 (毫秒)。 0 - 不记录慢查询日志。 DebugLevel=3时该选项可用。 从Zabbix 1.8.2开始支持该参数。
ProxyLocalBuffer 24 Proxy将在本地保留数据N小时,即使数据已与server同步。\如果第三方应用程序将使用本地数据,则可以使用此参数。
ProxyMode 0 Proxy工作模式。 0 - 主动模式 1 - 被动模式 从Zabbix 1.8.3开始支持该参数。 注意 当使用 Active proxy 时,敏感的 proxy 配置数据可供有权访问Zabbix server trapper端口的应用使用。 因为第三方应用可以假装是活动proxy并请求配置数据而不会进行身份验证。
ProxyOfflineBuffer 72 如果无法连接Zabbix server,proxy将保留数据N小时。\旧数据将丢失。
StartDBSyncers 8 数据库进程的初始实例数量。 在版本1.8.5之前,上限是64。 这个参数从Zabbix 1.8.3开始得到了支持。
StartDiscoverers 8 发现进程的初始实例数量。 在Zabbix 1.8.5版本之前,最大能设置为255。
StartHTTPPollers 3 HTTP 轮询进程的初始实例数量。
StartIPMIPollers 1 IPMI 轮询进程的初始实例数量。 在Zabbix 1.8.5版本之前,最大能设置为255。
StartJavaPollers 3 Java 轮询子进程的初始实例数量。 从Zabbix 2.0.0开始支持该参数。
StartPingers 4 ICMP pingers进程的初始实例数量 在Zabbix 1.8.5版本之前,最大能设置为255。
StartPollersUnreachable 8 不可达主机 (包括IPMI 和 Java)的轮询进程的初始实例数量。 从Zabbix 2.4.0开始,如果IPMI或Java轮询器启动,那么至少有一个针对不可访问主机的轮询进程必须运行。\在Zabbix 1.8.5版本之前,最大能设置为255。 这个参数从Zabbix 1.8.3开始得到了支持。
StartPollers 12 轮询进程的初始实例数量。\在Zabbix 1.8.5版本之前,最大能设置为255。
StartPreprocessors 8 pre-forked实例的预处理线程数量**1**. 预处理器工作进程启动时,预处理管理器进程将自动启动。 从Zabbix 4.2.0开始支持该参数。
StartSNMPTrapper 0 设置为1, SNMP trapper进程将启动。 从Zabbix 2.0.0开始支持该参数。
StartTrappers 8 trapper进程的初始实例数量。 Trapper接收来自Zabbix发送者、主动agent的数据。 至少要运行一个trapper进程用于在web前端展示服务器可用性和队列视图。 在Zabbix 1.8.5版本之前,最大能设置为255。
StartVMwareCollectors 2 vmware采集器进程的初始实例数量。\从Zabbix 2.2.0开始支持该参数。
StatsAllowedIP ip地址列表以”,”分割,也可以使用CIDR、或者DNS. 只接受ip里表中的请求. 如果未设置此参数,则不接受请求.如果启用ipv6,则 ‘127.0.0.1’, ‘::127.0.0.1’, ‘::ffff:127.0.0.1’ ipv4和ipv6都支持 ,’::/0’ 支持IPv4或者IPv6地址. ‘0.0.0.0/0’ 只支持ipv4. 例如:StatsAllowedIP=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com 从Zabbix 4.2.0开始支持该参数。
Timeout 3 agent、SNMP设备或外部检查的超时时长(单位为秒)。
TrapperTimeout 60 定义trapper处理数据的超时时间。
UnavailableDelay 60 在资源不可达期间,Zabbix多少秒检查一次资源是否可用。
UnreachableDelay 15 在资源不可 期间 ,Zabbix多少秒检查一次资源是否可达.
UnreachablePeriod 45 在资源不可期间 ,Zabbix多少秒检查一次资源是否可达。
VMwareCacheSize 64M 存储VMware数据的共享内存大小。 VMware内部检查[vmware,buffer,…] 可以用来监控VMware缓存使用情况 (参见 内部检查)。 注意,如果没有配置并启动vmware收集器实例,那么共享内存就不会被分配。\从Zabbix 2.2.0开始支持该参数。
VMwareFrequency 60 间隔多少秒从单个VMware服务收集数据。\任何VMware监控项的最小更新周期都大于或等于该时间。 从Zabbix 2.2.0开始支持该参数。
VMwarePerfFrequency 60 间隔多少秒从单个VMware服务检索性能计数器统计数据。 该时间为任一VMware 监控项(使用VMware性能计数器)的最小更新间隔。 从Zabbix 2.2.9, 2.4.4开始支持该参数。
VMwareTimeout 10 vmware采集器等待 VMware 服务(vCenter or ESX 管理程序)响应的最大时长。 从Zabbix 2.2.9, 2.4.4开始支持该参数。

注意:Zabbix只支持不带BOM的UTF-8编码的配置文件。