マウントされたファイルシステムの検出

概要

マウントされたファイルシステムとそのプロパティを検出できます。

  • マウントポイント名
  • ファイルシステムの種類
  • ファイルシステムのサイズ
  • inode統計
  • マウントオプション

これを行うには、次の組み合わせを使用します。

  • マスターアイテムとしての vfs.fs.get エージェントアイテム
  • 依存関係のあるローレベルディスカバリルールとアイテムのプロトタイプ

full モード(デフォルト)では、マウントポイントのパスに含まれるすべてのディレクトリに対してZabbixエージェントユーザーが通過権限を持っている場合にのみ、ファイルシステムの統計情報が返されます。それ以外の場合、該当するファイルシステムは vfs.fs.get の出力から除外されます。

このようなファイルシステムを検出し、暗黙的にスキップするのではなくサポート対象外として報告するには、shortモードでのディスカバリを使用します。

設定

マスターアイテム

次のキーを使用して Zabbix エージェントアイテムを作成します。

vfs.fs.get

大きな JSON データの可能性があるため、情報の種類を "Text" に設定します。

このアイテムが返すデータには、マウントされたファイルシステムについて、次のような内容が含まれます。

[
  {
    "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ルール

依存アイテム タイプとして低レベルディスカバリルールを作成します:

マスターアイテムとして、作成した vfs.fs.get アイテムを選択します。

LLDマクロ タブで、対応する JSONPath を使用してカスタムマクロを定義します:

フィルター タブでは、読み書き可能 なファイルシステムのみを絞り込む正規表現を追加できます:

従属アイテムプロトタイプ

この LLD ルールで "Dependent item" タイプのアイテムプロトタイプを作成します。
このプロトタイプのマスターアイテムとして、作成済みの vfs.fs.get アイテムを選択します。

アイテムプロトタイプの名前とキーでカスタムマクロを使用している点に注意してください。

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

情報のタイプとして、次を使用します。

  • 'free'、'total'、'used' のようなメトリクスには Numeric (unsigned)
  • 'pfree'、'pused'(割合)のようなメトリクスには Numeric (float)

アイテムプロトタイプの Preprocessing タブで JSONPath を選択し、パラメータとして次の JSONPath 式を使用します。

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

ディスカバリが開始されると、各マウントポイントごとに 1 つのアイテムが作成されます。
このアイテムは、指定したマウントポイントの空きバイト数を返します。

shortモードでのディスカバリ

依存ディスカバリルールの代わりに、次のキーを使用して Zabbix エージェント タイプのディスカバリルールを作成できます。

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"
  }
]

エージェントはファイルシステム自体に問い合わせないため、ディスカバリによって自動マウントが実行されることはなく、応答しないネットワークファイルシステムによって遅延することもありません。 また、データ収集よりも少ない頻度で実行できます。例えば、1時間に1回などです。

LLD マクロ タブで、対応する JSONPath を使用してカスタムマクロを定義します。例えば、{#FSNAME} - $.fsname および {#FSTYPE} - $.fstype のように指定します。

次に、検出されたファイルシステムの1つの統計情報を返す Zabbix エージェント タイプのアイテムプロトタイプを作成します。

  • キー: vfs.fs.get[full,{#FSNAME}]
  • 情報のタイプ: Text
  • 前処理: JSONPath $[0]

このアイテムプロトタイプを、依存アイテムプロトタイプのマスターアイテムとして使用します。例えば、空きバイト数を取得するには JSONPath $.bytes.free を使用します。

エージェントが検出されたファイルシステムの統計情報を取得できない場合(権限が不足している場合など)、vfs.fs.get[full,{#FSNAME}] は空の配列を返します。$[0] の前処理ステップは失敗し、アイテムはサポートされていない状態になります。そのため、ファイルシステムが暗黙的にスキップされるのではなく、障害を確認できます。 この設定では、検出されたファイルシステムごとに個別のエージェントチェックが実行されることに注意してください。

このアプローチは、Zabbix に付属する OS テンプレートで使用されており、Zabbix エージェント 8.0 以降が必要です。