How to monitor a rescent Netapp?


we want to monitor a Netapp, but most checks i found are not working very well with newer ontap versions. Anyone has a tip for a good, working checkplugin?

Best Regards,


we are using this script: to monitor our NetApp . But for running this, you have to install the netapp-manageability-sdk. You should get this from the netapp website with your customer account.


+1 for these scripts!
They work really well.

As Stevie said, simply “install” (meaning unpack) the most recent netapp managability sdk to /usr/lib/netapp-manageability-sdk (default in the scripts).
You will probalby need to install some missing perl libraries as well.

Another check I implement is for the autosupport status.
I do this with a simple SNMP check, as I haven’t found a script for this using the API:

AUTOSUPPORTSTATUS (has to be "1") (autosupportStatus and autosupportStatusMessage) (ok (1),smtpFailure (2),postFailure (3)smtpPostFailure (4),unknown (5))
(Description: An indication of the current status of auto support on the appliance. Describes the success or failure of most recent  attempts to send auto supports.)
./check_snmp -H <hostaddress> -o . -o . -C <community> -P 1 --label AUTOSUPPORTSTATUS -c 1
1 Like

Thanks for your answers, i will give that a try!

1 Like

Hi all,
I would like to try these scripts today, but I am still strugling with SDK installation process. Is it indeed enough to unpack the zip to /usr/lib/ netapp-manageability-sdk and install missing perl libraries or more needs to be done?

I have the

yes you have only unzip this in the directory.

this is our “installation process” on CentOS (code snippset from our automation tool):

cd /tmp;
mkdir -p /usr/lib/netapp-manageability-sdk/lib/perl && cp -r netapp-manageability-sdk-9.5/lib/perl/* “$_”
rm -rf /tmp/netapp-manageability-sdk-9.5*

git clone /tmp/netapp-cdot-nagios ;
install -m755 /tmp/netapp-cdot-nagios/check_cdot_*.pl /usr/lib64/nagios/plugins ;
rm -rf /tmp/netapp-cdot-nagios ;


Thank you. Worked like a charm. I went with sdk-9.7.

1 Like

Hi Stevie,

Have you by any chance find exact Vartiable name that needs to go into services.conf for check_cdot_… commands for hostname, username and password?

// NetApp Checks
apply Service "netapp_volumes" {
  check_command = "netapp_cdot_nagios_volume"
  vars.netapp_hostname = "hostname"
  vars.netapp_username = "username"
  vars.netapp_password = "password"

  assign where "netapp" in host.groups

Thank you

hostname would be the hosts fqdn or address.
The easiest way would be to define the command with the --hostname argument set to $address$, so that it simply will use the address of the host the check is bound to.

Here is an example configuration (in json format) from one of the check commands:

"netapp_cdot_aggr_status": {
            "arguments": {
                "--aggr": {
                    "repeat_key": false,
                    "required": false,
                    "value": "$netapp_aggr_name$"
                "--critical": {
                    "repeat_key": false,
                    "required": true,
                    "value": "$netapp_aggr_size_crit$"
                "--exclude": {
                    "repeat_key": true,
                    "required": false,
                    "value": "$netapp_cdot_excludes$"
                "--hostname": {
                    "repeat_key": false,
                    "required": true,
                    "value": "$address$"
                "--password": {
                    "repeat_key": false,
                    "required": true,
                    "value": "$netapp_password$"
                "--username": {
                    "repeat_key": false,
                    "required": true,
                    "value": "$netapp_user$"
                "--warning": {
                    "repeat_key": false,
                    "required": true,
                    "value": "$netapp_aggr_size_warn$"

I then add the fields $netapp_user$ and $netapp_password$ to the host template for NetApps, so that I can define the credentials at the host object.

1 Like

@log1c gave you already an answer.
I would like to give you a small note on this:,It doesn’t matter how you call the vars :wink: Of course, meaningful names are good :slight_smile:
It’s a thing how you define the check command, because there is no standard defintions deliverd with the ITL. So in such cases only the correct parameter are important for you. Which these are you’ll find with “–help”. The programmer of the scripts inlcuded this one.

This is an example how we defined the command in the director:

if the director is rendering this definition, it looks like following:

object CheckCommand "netapp_cdot_nagios_disk" {
import "plugin-check-command"
import "netapp-cdot-nagios-common"

command = [ "/usr/lib64/nagios/plugins/" ]
arguments += {
    "--critical" = "$netapp_cdot_nagios_disk_warning$"
    "--disks" = "$netapp_cdot_nagios_disk_size_warning$"
    "--warning" = "$netapp_cdot_nagios_disk_warning$"
    "-P" = {
        set_if = "$netapp_cdot_nagios_disk_perf$"


1 Like