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

2022-05-07 13:10:19 浏览数 (1)

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宏变量,书写方式为:

代码语言:javascript复制
{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监控系统之深度解析和实践》一书,欢迎阅读本书学习更多相关内容。

扫码查看本书详情!

代码语言:javascript复制
如果喜欢本文欢迎 在看丨留言丨分享至朋友圈 三连
 热文推荐  
掌握这些Python的高级用法,让代码更可读、运行更高效!
书单 | 这几本技术类新书,看完要登峰造极了!
沪指失守3000点,我劝你要戒掉恐惧
助力提升研发效能的“黄金三角”

▼点击阅读原文,了解本书详情~

0 人点赞