Array Setup and Networking
1753435 Members
4513 Online
108793 Solutions
New Discussion

Re: Nimble storage monitoring with check_mk or snmp

 
SOLVED
Go to solution
wezelboy54
Occasional Advisor

Re: Nimble storage monitoring with check_mk or snmp

Hi Rohan-

I made some changes to your check_mk plugin that add more per volume performance metrics.

It seems to work, but I think there may be some kind of undocumented unit mismatch because my numbers appear to be off by at least a factor of 1000.

My question to the nimble developers is...

Is it possible that this MIB entry-

volStatTimeEpochSeconds OBJECT-TYPE

    SYNTAX      Counter64

    MAX-ACCESS  read-only

    STATUS      current

    DESCRIPTION

    "Time at which the sample was taken, measured in seconds since UNIX epoch."

    ::= { volEntry 12 }

should actually be milliseconds instead of seconds?

I was thinking maybe byte counters might actually be kbyte counters, but the rates are low for IOPS as well.

It's also possible that I screwed something up and can't see it.

Here's the code...

-------------------------------------------------------------------------------------

#

# Nimble Volume Check (Supports inventory and performance data)

#

# Author: Rohan Fallon and Patrick Gavin

#

# FileName: nimble_vol

# Location: ~/local/share/check_mk/checks

# Usage:  cmk --checks  nimble -II rgtnimbleprod

#

#

    

nimble_default_values = (95.0, 98.0)

    

    

def inventory_nimble_vol(info):

   # Debug: lets see how the data we get looks like

   # print info

   # return []

   for vol, volsize, volusage, state, connections, stat_time, read_ops, read_bytes, write_ops, write_bytes in info:

       if state == "1":

          yield (vol, nimble_default_values)

    

def check_nimble_vol(item, params, info):

   # unpack check parameters

   warn, crit = params

   for vol, volsize, volusage, state, connections, stat_time, read_ops, read_bytes, write_ops, write_bytes in info:

      if vol == item:

         if state == "1":

            size_gb = int(volsize) / 1024.0

            usage_gb = int(volusage) / 1024.0

            usage_percent = float(volusage) / float(volsize) * 100.0

            read_iops = get_rate("read_ops.%s" % item, int(stat_time), int(read_ops))

            write_iops = get_rate("write_ops.%s" % item, int(stat_time), int(write_ops))

            read_bw = get_rate("read_bytes.%s" % item, int(stat_time), int(read_bytes))

            write_bw = get_rate("write_bytes.%s" % item, int(stat_time), int(write_bytes))

            perfdata = [ ("percent", usage_percent, warn, crit ),

                        ("connections", connections, 0, 0),

                        ("read_iops", read_iops, 0, 0),

                        ("write_iops", read_iops, 0, 0),

                        ("read_bandwidth", read_bw, 0, 0),

                        ("write_bandwidth", write_bw, 0, 0),

                     ]

            if usage_percent > crit:

               return (2, "CRITICAL - Volume online - Connections = " + connections  + " - Size = " + str(size_gb) + "Gb - Usage = " + "{0:6.2f}".format(usage_percent)+ "%", perfdata )

            elif usage_percent > warn:

               return (1, "WARN - Volume online - Connections = " + connections  + " - Size = " + str(size_gb) + "Gb - Usage = " + "{0:6.2f}".format(usage_percent)+ "%" , perfdata)

            else:

               return (0, "OK - Volume online - Connections = " + connections  + " - Size = " + str(size_gb) + "Gb - Usage = " + "{0:6.2f}".format(usage_percent)+ "%", perfdata)

         else:

            return (2, "CRITICAL - Volume %s offline " % vol)

   return (3, "UNKNOWN - Volume not found")

    

check_info["nimble_vol"] = {

    'check_function'       : check_nimble_vol,

    'inventory_function'   : inventory_nimble_vol,

    'service_description'  : 'Nimble Volume %s',

    'has_perfdata'         : True,

    'snmp_info'            : (".1.3.6.1.4.1.37447.1.2.1" , [ "3", "4", "6", "10", "11", "12", "13", "15", "34", "36" ] )

}

wezelboy54
Occasional Advisor

Re: Nimble storage monitoring with check_mk or snmp

Here's the code that assumes milliseconds instead of seconds. The values it produces are consistent.

#

# Nimble Volume Check (Supports inventory and performance data)

#

# Author: Rohan Fallon and Patrick Gavin

#

# FileName: nimble_vol

# Location: ~/local/share/check_mk/checks

# Usage:  cmk --checks  nimble_vol -II rgtnimbleprod

#

#

    

nimble_default_values = (95.0, 98.0)

    

    

def inventory_nimble_vol(info):

   # Debug: lets see how the data we get looks like

   # print info

   # return []

   for vol, volsize, volusage, state, connections, stat_time, read_ops, read_bytes, write_ops, write_bytes in info:

       if state == "1":

          yield (vol, nimble_default_values)

    

def check_nimble_vol(item, params, info):

   # unpack check parameters

   warn, crit = params

   for vol, volsize, volusage, state, connections, stat_time, read_ops, read_bytes, write_ops, write_bytes in info:

      if vol == item:

         if state == "1":

            stat_secs = int(stat_time) / 1000

            size_gb = int(volsize) / 1024.0

            usage_gb = int(volusage) / 1024.0

            usage_percent = float(volusage) / float(volsize) * 100.0

            read_iops = get_rate("read_ops.%s" % item, stat_secs, int(read_ops))

            write_iops = get_rate("write_ops.%s" % item, stat_secs, int(write_ops))

            read_bw = get_rate("read_bytes.%s" % item, stat_secs, int(read_bytes))

            write_bw = get_rate("write_bytes.%s" % item, stat_secs, int(write_bytes))

            perfdata = [ ("percent", usage_percent, warn, crit ),

                        ("connections", connections, 0, 0),

                        ("read_iops", read_iops, 0, 0),

                        ("write_iops", read_iops, 0, 0),

                        ("read_bandwidth", read_bw, 0, 0),

                        ("write_bandwidth", write_bw, 0, 0),

                     ]

            if usage_percent > crit:

               return (2, "CRITICAL - Volume online - Connections = " + connections  + " - Size = " + str(size_gb) + "Gb - Usage = " + "{0:6.2f}".format(usage_percent)+ "%", perfdata )

            elif usage_percent > warn:

               return (1, "WARN - Volume online - Connections = " + connections  + " - Size = " + str(size_gb) + "Gb - Usage = " + "{0:6.2f}".format(usage_percent)+ "%" , perfdata)

            else:

               return (0, "OK - Volume online - Connections = " + connections  + " - Size = " + str(size_gb) + "Gb - Usage = " + "{0:6.2f}".format(usage_percent)+ "%", perfdata)

         else:

            return (2, "CRITICAL - Volume %s offline " % vol)

   return (3, "UNKNOWN - Volume not found")

    

check_info["nimble_vol"] = {

    'check_function'       : check_nimble_vol,

    'inventory_function'   : inventory_nimble_vol,

    'service_description'  : 'Nimble Volume %s',

    'has_perfdata'         : True,

    'snmp_info'            : (".1.3.6.1.4.1.37447.1.2.1" , [ "3", "4", "6", "10", "11", "12", "13", "15", "34", "36" ] )

}

Magnusll110
New Member

Re: Nimble storage monitoring with check_mk or snmp

Hey, what happened to your template on the share ???? cant find it :-( 

And I cant of need et to our new Zabbix setup and new Nimble cs1000

Thx for your help.