已挂载文件系统的发现

概述

可以发现已挂载文件系统及其属性:

  • 挂载点名称
  • 文件系统类型
  • 文件系统大小
  • inode 统计信息
  • 挂载选项

为此,可以组合使用:

  • vfs.fs.get agent 监控项作为主监控项
  • 依赖的低级别发现规则和监控项原型

在 full 模式(默认)下,仅当 Zabbix agent 用户对挂载点路径中的每个目录都具有遍历权限时,才会返回文件系统统计信息;否则,受影响的文件系统将从 vfs.fs.get 输出中省略。

若要发现这些文件系统,并将其报告为不受支持,而不是静默跳过,请使用短模式发现。

配置

主监控项

使用以下 key 创建一个 Zabbix agent 监控项:

vfs.fs.get

对于可能较大的 JSON 数据,请将信息类型设置为“文本”。

此监控项返回的数据对于已挂载的文件系统将包含类似如下内容:

[
  {
    "fsname": "/",
    "fstype": "ext4",
    "bytes": {
      "total": 249405239296,
      "free": 24069537792,
      "used": 212595294208,
      "pfree": 10.170306,
      "pused": 89.829694
    },
    "inodes": {
      "total": 15532032,
      "free": 12656665,
      "used": 2875367,
      "pfree": 81.487503,
      "pused": 18.512497
    },
    "options": "rw,noatime,errors=remount-ro"
  }
]
依赖型 LLD 规则

创建一个低级别发现规则,类型为 Dependent item:

将我们创建的 vfs.fs.get 监控项选为主监控项。

在 LLD macros 选项卡中,定义带有相应 JSONPath 的自定义宏:

在 Filters 选项卡中,您可以添加一个正则表达式,仅筛选 可读写 文件系统:

依赖监控项原型

在此 LLD 规则中创建一个类型为“依赖监控项”的监控项原型。
将我们创建的 vfs.fs.get 监控项选为此原型的主监控项。

请注意在监控项原型名称和键值中使用自定义宏:

  • Name: Free disk space on {#FSNAME}, type: {#FSTYPE}
  • Key: Free[{#FSNAME}]

信息类型请使用:

  • Numeric (unsigned):用于 'free'、'total'、'used' 等指标
  • Numeric (float):用于 'pfree'、'pused'(百分比)等指标

在监控项原型的 Preprocessing 选项卡中选择 JSONPath,并将以下 JSONPath 表达式作为参数使用:

$.[?(@.fsname=='{#FSNAME}')].bytes.free.first()

当发现开始时,将为每个挂载点创建一个监控项。
此监控项将返回给定挂载点的可用字节数。

短模式下的发现

作为依赖发现规则的替代方案,您可以创建一个类型为 Zabbix agent 的发现规则,并使用以下键值:

vfs.fs.get[short]

在 short 模式下,监控项返回已挂载文件系统的列表,但不包含磁盘空间和 inode 统计信息,例如:

[
  {
    "fsname": "/",
    "fstype": "ext4",
    "options": "rw,noatime,errors=remount-ro"
  },
  {
    "fsname": "/home",
    "fstype": "xfs",
    "options": "rw,relatime,attr2,inode64,noquota"
  }
]

由于 agent 不会查询文件系统本身,因此发现过程不会触发自动挂载,也不会因无响应的网络文件系统而延迟。 发现频率也可以低于数据采集频率,例如每小时执行一次。

在 LLD macros 选项卡中,使用相应的 JSONPath 定义自定义宏,例如,{#FSNAME} - $.fsname 和 {#FSTYPE} - $.fstype。

然后创建一个类型为 Zabbix agent 的监控项原型,用于返回某个已发现文件系统的统计信息:

  • Key: vfs.fs.get[full,{#FSNAME}]
  • Type of information: Text
  • Preprocessing: JSONPath $[0]

将此监控项原型用作依赖监控项原型的主监控项,例如,使用 JSONPath $.bytes.free 获取可用字节数。

如果 agent 无法获取某个已发现文件系统的统计信息(例如,由于缺少权限),vfs.fs.get[full,{#FSNAME}] 将返回空数组,$[0] 预处理步骤将失败,并且该监控项将变为不受支持状态。因此,问题会显示出来,而不是静默跳过该文件系统。 请注意,此配置会为每个已发现的文件系统执行单独的 agent 检查。

Zabbix 随附的 OS 模板使用了此方法,并且要求使用 Zabbix agent 8.0 或更高版本。