4. Adding Network Switches and Routers to Icinga

You'll need to create some object definition in order to monitor a new router/switch.

Add a new host definition for the switch that you're going to monitor. If this is the *first* switch you're monitoring, you can simply modify the sample host definition igeneric-host-icinga .cfg . Change the host_name , alias , and address fields to appropriate values for the switch.

define host{
      use             generic-switch          ; Inherit default values from a template
      host_name       linksys-srw224p         ; The name we're giving to this switch
      alias           Linksys SRW224P Switch  ; A longer name associated with the switch
      address         192.168.1.253           ; IP address of the switch
      hostgroups      allhosts,switches       ; Host groups this switch is associated with
      }

Monitoring Services

Now you can add some service definitions (to the same configuration file) to monitor different aspects of the switch. If this is the *first* switch you're monitoring, you can simply modify the sample service definition in switch.cfg . linksys-srw224p“ in the example definitions below with the name you specified in the host_name directive of the host definition you just added.

Monitoring Packet Loss and RTA

Add the following service definition in order to monitor packet loss and round trip average between the Icinga host and the switch every 5 minutes under normal conditions.

define service{
      use                     generic-service ; Inherit values from a template
      host_name               linksys-srw224p ; The name of the host the service is associated with
      service_description     PING            ; The service description
      check_command           check_ping!200.0,20%!600.0,60%  ; The command used to monitor the service
      check_interval          5       ; Check the service every 5 minutes under normal conditions
      retry_interval          1       ; Re-check every minute until its final/hard state is determined
      }

This service will be:

Monitoring SNMP Status Information

If your switch or router supports SNMP, you can monitor a lot of information by using the check_snmp plugin. If it doesn't, skip this section. Add the following service definition to monitor the uptime of the switch.

define service{
      use                     generic-service ; Inherit values from a template
      host_name               linksys-srw224p
      service_description     Uptime  
      check_command           check_netapp_uptime!public! 
      }

In the check_command directive of the service definition above, the ”-C public“ tells the plugin that the SNMP community name to be used is “public” and the ”-o sysUpTime.0“ indicates which OID should be checked.

If you want to ensure that a specific port/interface on the switch is in an up state, you could add a service definition like this:

define service{
      use                     generic-service ; Inherit values from a template
      host_name               linksys-srw224p
      service_description     Port 1 Link Status
      check_command           snmp_load!public!ifOperStatus.1   ; 1- indicates for port 1 , if OperStatus.2, shows port2
      }

In the example above, the ”-o ifOperStatus.1“ refers to the OID for the operational status of port 1 on the switch. The ”-r 1“ option tells the check_snmp plugin to return an OK state if “1” is found in the SNMP result (1 indicates an “up” state on the port) and CRITICAL if it isn't found. The ”-m RFC1213-MIB“ is optional and tells the check_snmp plugin to only load the “RFC1213-MIB” instead of every single MIB that's installed on your system, which can help speed things up.

That's it for the SNMP monitoring example. There are a million things that can be monitored via SNMP, so it's up to you to decide what you need and want to monitor. Good luck!

192.168.1.253 with the IP address of the switch): snmpwalk -v1 -c public 192.168.1.253 -m ALL .1

Monitoring Bandwidth / Traffic Rate

If you're monitoring bandwidth usage on your switches or routers using MRTG, you can have Icinga alert you when traffic rates exceed thresholds you specify. The check_mrtgtraf plugin (which is included in the Icinga plugins distribution) allows you to do this.

You'll need to let the check_mrtgtraf plugin know what log file the MRTG data is being stored in, along with thresholds, etc. In this example, we're monitoring one of the ports on a Linksys switch. The MRTG log file is stored in /var/lib/mrtg/192.168.1.253_1.log . Here's the service definition we use to monitor the bandwidth data that's stored in the log file…

define service{

      use                     generic-service ; Inherit values from a template
      host_name               linksys-srw224p
      service_description     Port 1 Bandwidth Usage
      check_command           check_local_mrtgtraf!/var/lib/mrtg/192.168.1.253_1.log!AVG!1000000,2000000!5000000,5000000!10
      }

In the example above, the ”/var/lib/mrtg/192.168.1.253_1.log“ option that gets passed to the check_local_mrtgtraf command tells the plugin which MRTG log file to read from. The “AVG” option tells it that it should use average bandwidth statistics. The “1000000,2000000” options are the warning thresholds (in bytes) for incoming traffic rates. The “5000000,5000000” are critical thresholds (in bytes) for outgoing traffic rates. The “10” option causes the plugin to return a CRITICAL state if the MRTG log file is older than 10 minutes (it should be updated every 5 minutes).

Save the file.