Zabbix 5.0:优化建议
在使用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 files
、max 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 files
、max 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编码的配置文件。