写点什么

手把手带你用 Zabbix 进行操作系统监控

  • 2022 年 5 月 07 日
  • 本文字数:3450 字

    阅读完需:约 11 分钟

Zabbix 默认使用 Zabbix agent 监控操作系统,其内置的监控项可以满足系统大部分的指标监控,因此,在完成 Zabbix agent 的安装后,只需在前端页面配置并关联相应的系统监控模板就可以了。如果内置监控项不能满足监控需求,则可以通过 system. run[command, <mode>]监控项让 Zabbix agent 运行想要的命令来获取监控数据。

下面介绍 Zabbix 对于 Linux 和 Windows 的监控。

安装 Zabbix agent 的过程就不赘述了,主要介绍一些关键的配置和功能。


1

操作系统相关监控项的选择及优化


▊ Zabbix agent 类型的监控项

在 Zabbix 官方手册中,可以查看 Zabbix agent 类型的监控项键值说明,其中不仅列出了所有操作系统可使用的键值,还包括参数和注意事项等信息。对于 Windows 系统,官方还列出了其特有的监控项,如服务、性能计数器等。

同样,手册中也介绍了上述监控项对不同操作系统的适用情况,明确地指出了不同操作系统中可用及不可用的监控项。


监控项主/被动模式的选择及优化

建议使用 Zabbix 默认的操作系统模板监控相应的主机,但是需要一些优化来确保达到最好的监控效果,以及最大限度地减少 Zabbix 系统性能的开销。

下面介绍 Zabbix agent(active)和 Zabbix agent 监控项类型的区别。

前者又名主动模式监控项类型,后者为被动模式监控项类型。这里的主动和被动都是针对 Zabbix agent 来说的。主动模式监控项,顾名思义,就是 Zabbix agent 会主动上报监控数据给 Zabbix server。而被动模式监控项就是指 Zabbix server 根据监控项的更新间隔向 Zabbix agent 拉取监控数据。两者都有各自的适用范围。

在小型环境中,当主机数量为 200~500 台时,可以将大部分监控项设置为 Zabbix agent(被动模式)类型的监控项,这样,监控数据的更新时间不会受被监控对象的系统时间的影响,更新时间都是跟着 Zabbix server 走的。

在中大型环境中,建议将大部分监控项设置为 Zabbix agent(active)(主动模式)类型的监控项,这样,Zabbix agent 会主动上报监控数据给 Zabbix server,可以大大减小 Zabbix 系统的压力。但主动模式监控项的监控数据会受到操作系统的时间影响,当被监控对象的系统时间与 Zabbix server 的系统时间有偏差时,其含有 nodata 函数的触发器就会产生误告警。

下面以 Linux 模板 Template OS Linux 为例进行优化。

经过多年的实践经验,建议将 agent ping、Host local time 及所有自动发现的规则项(不是监控项原型里的)都设置为被动模式,这样就不会受到系统时间的影响了。将自动发现的监控项设为被动模式,主要是由于间隔时间太长,导致纳管主机的监控数据很久才出来,这个时候,被动模式的监控项就可以使用“check now”的功能了。

监控频率:与主机性能指标有关的监控项,如 CPU、内存等,建议将频率调整为 1 次/分钟;而一些信息指标监控项,如 Host name、Version of zabbix_agent(d) running 等,建议将频率设置为 1 次/小时(或更长);对于模板中的自动发现监控项,如 Mounted filesystem discovery、Network interface discovery 等,也建议将频率设置为 1 次/小时;对于一些容量指标监控项,如总内存、总文件系统大小等,也都建议将频率设置为 1 次/小时。

关闭无用的触发器:在默认的模板中,官方提供了很多触发器,在实际使用中,用户可以根据自身需求开启/关闭。


▊  告警抑制及触发器中宏变量的巧用

Zabbix 提供了很多触发器函数,用户可以通过使用这些函数灵活地制定告警规则。下面就简单介绍一下常用在操作系统监控中的触发器函数。

(1)告警抑制。

告警抑制在监控中起到了很大的作用,可以有效减少误告警。但 Zabbix 没有直接相关的告警抑制选项,可以通过几个常用的触发器函数来达到抑制告警的目的。

告警抑制需求举例:如果 CPU iowait 连续 5min 都大于 20%,则告警{Template OS Linux:system.cpu.util[,iowait].min(5m)}>20,表示 5min 内的最小值大于 20%就告警,即只有 5min 内的数据都大于 20%才告警。基本上所有的告警都可以用类似的方法进行抑制。

(2)宏变量。

Zabbix 有一个特性,就是模板关联主机之后,主机中继承自模板的监控项和触发器的配置很多都是不能改的,这就导致使用者很难定制化一些告警阈值。但 Zabbix 提供了宏变量来解决这一问题。下面同样以 CPU iowait 监控项的触发器举例。

对于{Template OS Linux:system.cpu.util[,iowait].avg(5m)}>20,其中的 20 为固定的值,现在有一种场景:有 20 台主机,都套用了 Linux 的模板,但其中两台主机需要将 CPU iowait 的阈值调整成 10%,其他不变。此时如果设置成固定的 20,那么对于特定机器的阈值调整很难做到。解决方案如下:将模板中的触发器写成{Template OS Linux:system.cpu. util[,iowait].avg(5m)}>{$CPUIOWAIT},然后在模板的“宏”选项卡中添加一个模板宏“{$CPUIOWAIT}”,值为“20”,如图 1 所示。

图 1

这是模板宏,此时将那两台需要修改阈值的主机的宏改为 10 就可以了,因为在主机中,主机宏的优先级是高于模板宏的优先级的。

(3)LLD 宏变量。

LLD 的宏变量解决了在自动发现中单个监控项宏的问题。例如,有以下场景:一台主机中有很多文件系统,整个文件系统的告警阈值宏变量为 85%,此时,有一个文件系统/opt,它的阈值需要设置为 95%。为了解决这个问题,Zabbix 也提供了 LLD 宏变量,书写方式为:


{host:vfs.fs.size[{#FSNAME},pfree].last()}<{$LOW_SPACE_LIMIT:"{#FSNAME}"}
复制代码

此时,在主机宏中添加“{$LOW_SPACE_LIMIT:"/opt "}”,值为“95”就可以了,如图 2 所示。

图 2


2

Linux

本节主要介绍 Linux 系统中 CPU、内存、文件系统相关 Zabbix 监控指标的使用及优化。

1.CPU 使用率

Zabbix 默认的 CPU 使用率相关的监控项共有 15 个,但是没有可以表示主机总体 CPU 使用率的监控项。可以通过创建可计算类型的监控项来监控总体的 CPU 使用率指标,计算逻辑为“100-system.cpu.util[,idle]”,意思是用 100 减去 CPU 的空闲值,可以比较准确地表示总体 CPU 的使用率。

2.内存使用率

Zabbix 默认的内存键值 vm.memory.size 中有很多参数。

  • total:总物理内存。

  • free:可用内存。

  • active:RAM 中当前或最近使用的内存。

  • inactive:未使用内存。

  • wired:被标记为始终驻留在 RAM 中的内存,不会移动到磁盘中。

  • pinned:和 wired 一样。

  • anon:与文件无关的内存(不能重新读取)。

  • exec:可执行代码,通常来自一个(程序)文件。

  • file:缓存最近访问文件的目录。

  • buffers:缓存文件系统元数据。

  • cached:缓存。

  • shared:可以同时被多个进程访问的内存。

  • used:active + wired 内存。

  • pused:active + wired 总内存的百分比。

  • available:inactive + cached + free memory 内存。

  • pavailable:inactive + cached + free memory 占 total 的百分比。

可以看到,available、pavailable 是 inactive + cached + free memory 的可用内存,而 used、pused 则不是,更建议给 pavailable 参数的内存监控项设置告警阈值。

3.文件系统

默认模板中关于文件系统的监控项共有 5 个。

  • Free disk space on {#FSNAME}。

  • Free disk space on {#FSNAME} (percentage)。

  • Free inodes on {#FSNAME} (percentage)。

  • Total disk space on {#FSNAME}。

  • Used disk space on {#FSNAME}。

建议将文件系统的监控项改为 3 个,分别为总容量、已使用大小、已使用的百分比大小,这样也可以减小 Zabbix 的压力。


3

Windows

本节主要介绍 Windows 系统中服务、性能计数器、事件日志相关 Zabbix 监控指标的使用及优化。

1.Windows 服务的自动发现

在大部分情况下,用户不会去关心所有 Windows 系统的服务,但默认模板会将所有的服务都发现出来并添加告警。对此,建议将模板中的 Windows service discovery 关闭,当有主机需要监控服务时,在主机上开启,并添加过滤条件来找到需要监控的服务,如图 3 所示。

图 3

2.Windows 性能计数器监控

Zabbix 提供了一个很重要的且专属于 Windows 的监控项键值 perf_counter [counter, <interval>],通过这个键值,就可以监控性能计数器中的数据了,如监控项 Average disk read queue length 的键值为 perf_counter[\234(_Total)\1402]。具体使用方法在官方手册中有介绍。

3.Windows event log

在 Windows 中有一个重要的组件,就是 event log。Zabbix 同样提供了相应的专属键值来监控它,即 eventlog[name,<regexp>,<severity>,<source>, <eventid>,<maxlines>,<mode>]。可以看到,这个键值中有非常多的参数,可以很准确地监控用户需要的日志。

打开 Windows 中的事件查看器,选择一个事件,如图 4 所示。

图 4

可以看到,键值中的参数在图 4 中都有出现。

  • name:日志名称。

  • <severity>:级别。

  • <source>:来源。

  • <eventid>:事件 ID。

需要注意的是,上述参数都需要填写英文。

本文节选自《Zabbix 监控系统之深度解析和实践》一书,欢迎阅读本书学习更多相关内容。

扫码查看本书详情!


zabbix二维码 (3).png



用户头像

还未添加个人签名 2019.10.21 加入

还未添加个人简介

评论

发布
暂无评论
手把手带你用Zabbix进行操作系统监控_博文视点Broadview_InfoQ写作社区