A Nagios / Icinga plugin for checking a EMC² VNX filer's storage usage


check_vnx_usage is a Nagios / Icinga plugin for checking a EMC² VNX filer's storage usage.


I successfully tested the plugin on a EMC VNX Control Station release 3.0 (NAS 8.1.9). Make sure that the server_df command is available on your filer.

No additional Python packages are required - just deploy the script and use it.


By defualt, the scripts checks all local file systems - it is also possible to include performance data for data visualization (-P / --show-perfdata parameters).

The following parameters can be specified:

Parameter Description
-d / --debug enable debugging outputs (default: no)
-h / --help shows help and quits
-P / --show-perfdata enables performance data (default: no)
-p / --path path of a particular file system to be monitored (default: none)
-w / --warning consumption warning threshold (default: 80%)
-c / --critical consumption critical threshold (default: 90%)
--version prints programm version and quits


The following example checks all local file systems:

# ./
OK: file system 'fs-giertz' OK (20%), file system 'fs-doge' OK (75%) |

Check a particular file system and also show performance data:

# ./ -p fs-dolan -P
OK: file system 'fs-dolan' OK (0%) | 'fs-dolan_size'=103257584 'fs-dolan_used'=123664 'fs-dolan_free'=103133920

Check multiple file systems:

# ./ -p fs-giertz -p fs-doge
OK: file system 'fs-giertz' OK (20%), file system 'fs-doge' OK (75%) |


To install the plugin, simply deploy the script on the VNX Control Station.


Nagios / Icinga needs to execute the script by executing the check_by_ssh plugin with nasadmin privileges.

Ensure that the Nagios/Icinga(2) service user is able to login onto VNX Control Station without specifying a password:

# chsh -s /bin/bash icinga
# su - icinga
$ ssh-keygen
$ ssh-copy-id nasadmin@VNX-IP
$ ssh nasadmin@VNX-IP
$ exit
# chsh -s /sbin/nologin icinga

When generating the key, don't enter a passphrase, otherwise passwordless login will not work.

Nagios / Icinga

Configure a command like this:

# 'check_vnx_usage' command definition
define command{
        command_name    check_vnx_usage
        command_line    $USER1$/check_by_ssh -t 40 -q -l nasadmin -H $HOSTADDRESS$ -C "/home/nasadmin/ -P -w $ARG1$ -c $ARG2$"

Alter your VNX filer object configuration to include this service:

define service{
        use                             generic-service
        host_name                       MY-VNX
        service_description             DIAG: Storage usage
        check_command                   check_vnx_usage!92!95


Configure a service like this:

apply Service "DIAG: Storage usage" {
  import "generic-service"
  check_command = "by_ssh"
  vars.by_ssh_command = [ "/home/nasadmin/" ]
  vars.by_ssh_arguments = {
    "-P" = {
      description = "Enable performance data (default: no)"
      set_if = "$vnx_perfdata$"
    "-w" = {
      description = "Consumption warning threshold (default: 80%)"
      value = "$vnx_warn$"
    "-c" = {
      description = "Consumption critical theshold (default: 90%)"
      value = "$vnx_crit$"
    "-p" = {
      description = "Path of a particular fiel system to be monitored (default: none)"
      value = "$vnx_fs_path$"
  vars.by_ssh_quiet = true
  vars.by_ssh_timeout = 60
  vars.by_ssh_port = host.vars.ssh_port
  vars.by_ssh_logname = "nasadmin"
  assign where host.vars.os == "vnx" && == "filer"

Alter your VNX filer object configuration to include a SSH port, application and operating system flags and - optional - customized thresholds:

object Host "MY-VNX" {
  import "generic-host"

  address = "VNX-IP"

  vars.ssh_port = "22" = "filer"
  vars.os = "vnx"

  vars.vnx_warn = "85"
  vars.vnx_crit = "92"

To enable performance data, add the following definition:

vars.vnx_perfdata = true

To limit the plugin to a particular list of file systems, use the following statement:

vars.vnx_fs_path = [ "fs-giertz", "fs-doge" ]