====== Nagios SAN check ======
===== Using Nagios Plugin =====
https://exchange.nagios.org/directory/Plugins/Hardware/Network-Gear/Brocade/check_snmp_brocade--2D-monitor-Brocade-fibre-channel-switches/details
Example of check SAN (nagios server)
[root@prnagmgmt01 nagios]# cat san_sw.cfg
define host{
use linux-server,host-pnp ; Inherit default values from the generic-host template
host_name DCAS-SAN02
hostgroups msp-brocade-fc
address 10.0.0.10
}
define service{
use generic-service,srv-pnp ; Name of service template to use
host_name DCAS-SAN02
service_description Brocade Port 17 Status
check_command Check_Brocade_Port!17
servicegroups SG-Storage
}
[root@prnagmgmt01 nagios]# cat command.cfg
#### IBM IMM Template ####
define command {
command_name Check_Brocade_Health
command_line /usr/bin/perl $USER1$/check_snmp_brocade_3.2.0.pl -H $HOSTADDRESS$ -C public -s --sensor -p
}
define command {
command_name Check_Brocade_Port
command_line /usr/bin/perl $USER1$/check_snmp_brocade_3.2.0.pl -H $HOSTADDRESS$ -C public -P $ARG1$ -p
}
define hostgroup{
hostgroup_name msp-brocade-fc
alias Brocade FC Switches
}
define host{
name generic-brocade-fc ; The name of this host template
use linux-server,host-pnp ; Inherit default values from the generic-host template
hostgroups msp-brocade-fc
register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
}
define service{
use generic-service,srv-pnp ; Name of service template to use
hostgroup_name msp-brocade-fc
service_description Brocade FC Switch health
check_command Check_Brocade_Health
servicegroups SG-Storage
}
===== Using Centreon Plugin =====
====== Use Nagios add a check Centreon for Brocade ======
https://docs.centreon.com/pp/integrations/plugin-packs/procedures/network-switchs-brocade-snmp/
===== SAN swicth config SNMPv1 =====
First test in SNMPv1 (easier, but not all metrics available
On SAN switch configure SNMPv1
sansw1:FID128:admin> snmpconfig --show snmpv1
SNMPv1 community and trap recipient configuration:
Community 1:
No trap recipient configured yet
Community 2:
No trap recipient configured yet
Community 3:
No trap recipient configured yet
Community 4:
No trap recipient configured yet
Community 5:
No trap recipient configured yet
Community 6:
No trap recipient configured yet
SNMPv1:Enabled
sansw1:FID128:admin> snmpconfig --add snmpv1 -index 4 -community public -groupname ro
Committing configuration.....done.
sansw1:FID128:admin> snmpconfig --show snmpv1
SNMPv1 community and trap recipient configuration:
Community 1:
No trap recipient configured yet
Community 2:
No trap recipient configured yet
Community 3:
No trap recipient configured yet
Community 4: public (ro)
No trap recipient configured yet
Community 5:
No trap recipient configured yet
Community 6:
No trap recipient configured yet
SNMPv1:Enabled
sansw1:FID128:admin> version
Kernel: 4.1.35rt41
Fabric OS: v9.0.1c
Test SNMP communication from nagios server
[nagios@nagsrv1 ~]$ snmpwalk -v 1 -c public sansw1
...
IF-MIB::ifDescr.1073741828 = STRING: FC port 0/4
IF-MIB::ifDescr.1073741829 = STRING: FC port 0/5
...
===== Plugin Centreon =====
Enable EPEL and codeready repository (cf DNF)
[root@lnxb085t yum]# dnf repolist
Updating Subscription Management repositories.
repo id repo name
codeready-builder-for-rhel-8-ppc64le-rpms Red Hat CodeReady Linux Builder for RHEL 8 Power, little endian
epel Extra Packages for Enterprise Linux 8 - ppc64le
Install snmp packages on nagios
[root@nagsrv1 ~]# dnf install net-snmp-perl net-snmp-utils net-snmp-agent-libs net-snmp net-snmp-libs perl-XML-LibXML perl-JSON perl-libwww-perl perl-XML-XPath perl-Net-Telnet perl-Net-DNS perl-DBI perl-DBD-MySQL perl-DBD-Pg
[root@nagsrv1 ~]# dnf install nagios-plugins-perl
Download the centreon check for brocade:
https://download.centreon.com/
select --> Custom Platforms --> Plugins
Extract from tar.gz package the latest script for brocade : centreon-plugins-20220414/centreon_brocade.pl
Copy it to /usr/lib64/nagios/plugins on nagios server
Test the perl script:
[root@nagsrv1 plugins]# perl centreon_brocade.pl --plugin=os::linux::snmp::plugin --mode=load
UNKNOWN: Cannot load module --plugin.
Can't locate os/linux/snmp/plugin.pm in @INC (you may need to install the os::linux::snmp::plugin module)
...
Some perl libraries from centreon are missing
Check Perl libraries location
[root@nagsrv1 ~]# perl -e 'print join("\n",@INC)'
/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5
/usr/share/perl5
Create your own folder to prevent interaction with anything
[root@nagsrv1 plugins]# ll /usr/local/lib64/perl5
ls: cannot access '/usr/local/lib64/perl5': No such file or directory
[root@nagsrv1 plugins]# mkdir /usr/local/lib64/perl5
Download the source packages from gihub (source code)
https://github.com/centreon/centreon-plugins/releases
Extract it and copy the content of src folder into your new created perl repository
[root@nagsrv1 ~]# cd /usr/local/lib64/perl5
[root@nagsrv1 perl5]# ls -l
drwxrwxr-x 78 root root 4096 Jan 18 15:50 apps
drwxrwxr-x 4 root root 39 Jan 18 15:50 blockchain
drwxrwxr-x 4 root root 35 Jan 18 15:50 centreon
drwxrwxr-x 6 root root 113 Jan 18 15:50 centreon-plugins-20230118
-rwxrwxr-x 1 root root 989 Jan 18 15:50 centreon_plugins.pl
drwxrwxr-x 17 root root 4096 Jan 18 15:50 cloud
drwxrwxr-x 3 root root 86 Jan 18 15:50 contrib
drwxrwxr-x 19 root root 4096 Jan 18 15:50 database
drwxrwxr-x 4 root root 107 Jan 18 15:50 example
drwxrwxr-x 11 root root 127 Jan 18 15:50 hardware
drwxrwxr-x 90 root root 4096 Jan 18 15:50 network
drwxrwxr-x 12 root root 158 Jan 18 15:50 notification
drwxrwxr-x 11 root root 124 Jan 18 15:50 os
drwxrwxr-x 3 root root 18 Jan 18 15:50 snmp_standard
drwxrwxr-x 29 root root 4096 Jan 18 15:50 storage
Create the required temporary folder for centreon plugin
mkdir /var/lib/centreon/centplugins
chown nagios.nagios /var/lib/centreon/centplugins
Try again a connection
[root@nagsrv1 plugins]$ cd /usr/lib64/nagios/plugins/
[root@nagsrv1 plugins]$ perl ./centreon_brocade.pl --plugin=network::brocade::snmp::plugin --mode=interfaces --hostname=sansw1 --snmp-version='1' --snmp-community='public' --interface='' --name --add-status --add-traffic --critical-status='' --warning-in-traffic='' --critical-in-traffic='' --warning-out-traffic='' --critical-out-traffic='' --use-new-perfdata
OK: All interfaces are ok | 'FC port 0/4#interface.traffic.in.bitspersecond'=2983594.46b/s;;;0;4294967295 'FC port
0/4#interface.traffic.out.bitspersecond'=9405745.49b/s;;;0;4294967295 'FC port
0/5#interface.traffic.in.bitspersecond'=3063697.14b/s;;;0;4294967295 'FC port
0/5#interface.traffic.out.bitspersecond'=8112194.39b/s;;;0;4294967295 'FC port
0/6#interface.traffic.in.bitspersecond'=848108.57b/s;;;0;4294967295 'FC port
...
0/47#interface.traffic.in.bitspersecond'=8957399.45b/s;;;0;4294967295 'FC port
0/47#interface.traffic.out.bitspersecond'=3692879.80b/s;;;0;4294967295
'lo#interface.traffic.in.bitspersecond'=7320.76b/s;;;0; 'lo#interface.traffic.out.bitspersecond'=7320.76b/s;;;0;
'eth0#interface.traffic.in.bitspersecond'=22688.20b/s;;;0;1000000000
'eth0#interface.traffic.out.bitspersecond'=25653.90b/s;;;0;1000000000
===== Brocade plugin usage =====
Howto get right syntax ?
[root@nagsrv1 plugins]# perl ./centreon_brocade.pl --list-plugin
----------------
PLUGIN: network::brocade::snmp::plugin
Plugin Description:
Check Brocade hardware in SNMP.
[root@nagsrv1 plugins]# perl ./centreon_brocade.pl --plugin=network::brocade::snmp::plugin --help
Plugin Description:
Check Brocade hardware in SNMP.
Global Options:
--mode Choose a mode.
--dyn-mode
Specify a mode with the path (separated by '::').
--list-mode
List available modes.
...
[root@nagsrv1 plugins]# perl ./centreon_brocade.pl --plugin=network::brocade::snmp::plugin --list-mode
Plugin Description:
Check Brocade hardware in SNMP.
...
Modes Available:
cpu
hardware
interfaces
list-interfaces
memory
[nagios@nagsrv1 plugins]$ perl ./centreon_brocade.pl --plugin=network::brocade::snmp::plugin --mode=hardware --hostname=sansw1 --snmp-version='1' --snmp-community='public'
OK: All 1 components are ok [1/1 switch]. | 'count_switch'=1;;;;
FIXME some checks are not available using SNMPv1
[nagios@nagsrv1 plugins]$ perl ./centreon_brocade.pl --plugin=network::brocade::snmp::plugin --mode=cpu --hostname=sansw1 --snmp-version='1' --snmp-community='public'
UNKNOWN: SNMP GET Request : Cant get a single value.
===== Switching on SNMPv3 for full feature =====
sansw1:FID128:admin> snmpconfig --show snmpv3
SNMP Informs = 0 (OFF)
SNMPV3 user password encrypted = 0 (OFF)
SNMPv3 USM configuration:
User 1 (ro): snmpuser1
Auth Protocol: noAuth
Priv Protocol: noPriv
User 2:
User 3:
User 4:
User 5:
User 6:
User 7:
User 8:
User 9:
User 10:
User 11:
User 12:
SNMPv3 Trap/Informs configuration:
Trap Entry 1: No trap recipient configured yet
Notify Type: TRAP(1)
Trap Entry 2: No trap recipient configured yet
Notify Type: TRAP(1)
Trap Entry 3: No trap recipient configured yet
Notify Type: TRAP(1)
Trap Entry 4: No trap recipient configured yet
Notify Type: TRAP(1)
Trap Entry 5: No trap recipient configured yet
Notify Type: TRAP(1)
Trap Entry 6: No trap recipient configured yet
Notify Type: TRAP(1)
sansw1:FID128:admin> snmpconfig --add snmpv3 -index 6 -user test6 -groupname rw -auth_proto 1 -auth_passwd myauthpassword -priv_proto 1 -priv_passwd myprivpassword
Committing configuration.....done.
sansw1:FID128:admin> snmpconfig --show snmpv3
SNMP Informs = 0 (OFF)
SNMPV3 user password encrypted = 0 (OFF)
SNMPv3 USM configuration:
User 1 (ro): snmpuser1
Auth Protocol: noAuth
Priv Protocol: noPriv
User 2:
User 3:
User 4:
User 5:
User 6 (rw): test6
Auth Protocol: MD5
Priv Protocol: DES
User 7:
User 8:
User 9:
User 10:
User 11:
User 12:
SNMPv3 Trap/Informs configuration:
Trap Entry 1: No trap recipient configured yet
Notify Type: TRAP(1)
Trap Entry 2: No trap recipient configured yet
Notify Type: TRAP(1)
Trap Entry 3: No trap recipient configured yet
Notify Type: TRAP(1)
Trap Entry 4: No trap recipient configured yet
Notify Type: TRAP(1)
Trap Entry 5: No trap recipient configured yet
Notify Type: TRAP(1)
Trap Entry 6: No trap recipient configured yet
Notify Type: TRAP(1)
[nagios@nagsrv1 plugins]$ snmpwalk -v3 -l authPriv -u test6 -a MD5 -A myauthpassword -x DES -X myprivpassword sansw1
SNMPv2-MIB::sysDescr.0 = STRING: Fibre Channel Switch.
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.1588.2.1.1.181
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (3385689700) 391 days, 20:41:37.00
SNMPv2-MIB::sysContact.0 = STRING: Field Support.
SNMPv2-MIB::sysName.0 = STRING: sansw1
SNMPv2-MIB::sysLocation.0 = STRING: End User Premise.
SNMPv2-MIB::sysServices.0 = INTEGER: 79
IF-MIB::ifNumber.0 = INTEGER: 68
IF-MIB::ifIndex.805306369 = INTEGER: 805306369
IF-MIB::ifIndex.805306370 = INTEGER: 805306370
IF-MIB::ifIndex.805306371 = INTEGER: 805306371
IF-MIB::ifIndex.805306372 = INTEGER: 805306372
IF-MIB::ifIndex.805306373 = INTEGER: 805306373
IF-MIB::ifIndex.805306374 = INTEGER: 805306374
IF-MIB::ifIndex.805306375 = INTEGER: 805306375
Now changing user to RO
sansw1:FID128:admin> snmpconfig --set snmpv3 -index 6 -user test6 -groupname ro
Committing configuration.....done.
sansw1:FID128:admin> snmpconfig --show snmpv3
...
User 6 (ro): test6
Test
[nagios@nagsrv1 plugins]$ perl ./centreon_brocade.pl --plugin=network::brocade::snmp::plugin --mode=cpu --hostname=sansw1 --snmp-version='3' --snmp-username='test6' --authprotocol='MD5' --authpassphrase='myauthpassword' --privprotocol='DES' --privpassphrase='myprivpassword'
OK: CPU Usage: 14.00% | 'cpu'=14%;;;0;100
===== Check examples =====
CPU
[nagios@nagsrv1 plugins]$ perl ./centreon_brocade.pl --plugin=network::brocade::snmp::plugin --mode=cpu --hostname=sansw1 --snmp-version='3' --snmp-username='test6' --authprotocol='MD5' --authpassphrase='myauthpassword' --privprotocol='DES' --privpassphrase='myprivpassword' --warning=60 --critical=90
OK: CPU Usage: 2.00% | 'cpu'=2%;0:60;0:90;0;100
Hardware
[nagios@nagsrv1 plugins]$ perl ./centreon_brocade.pl --plugin=network::brocade::snmp::plugin --mode=hardware --hostname=sansw1 --snmp-version='3' --snmp-username='test6' --authprotocol='MD5' --authpassphrase='myauthpassword' --privprotocol='DES' --privpassphrase='myprivpassword'
OK: All 18 components are ok [17/17 sensors, 1/1 switch]. | 'sensor_SLOT #0: TEMP #1'=32celsius;;;; 'sensor_SLOT #0: TEMP #2'=33celsius;;;; 'sensor_SLOT #0: TEMP #3'=31celsius;;;; 'sensor_SLOT #0: TEMP #4'=29celsius;;;; 'sensor_SLOT #0: TEMP #5'=30celsius;;;; 'sensor_SLOT #0: TEMP #6'=33celsius;;;; 'sensor_SLOT #0: TEMP #7'=30celsius;;;; 'sensor_SLOT #0: TEMP #8'=40celsius;;;; 'sensor_SLOT #0: TEMP #9'=54celsius;;;; 'sensor_SLOT #0: TEMP #10'=23celsius;;;; 'sensor_SLOT #0: TEMP #11'=24celsius;;;; 'sensor_SLOT #0: TEMP #12'=45celsius;;;; 'sensor_FAN #1'=12821rpm;;;; 'sensor_FAN #2'=13071rpm;;;; 'count_sensor'=17;;;; 'count_switch'=1;;;;
Memory
[nagios@nagsrv1 plugins]$ perl ./centreon_brocade.pl --plugin=network::brocade::snmp::plugin --mode=memory --hostname=sansw1 --snmp-version='3' --snmp-username='test6' --authprotocol='MD5' --authpassphrase='myauthpassword' --privprotocol='DES' --privpassphrase='myprivpassword' --warning=60 --critical=90
OK: Memory Usage: 27.00% used | 'used'=27%;0:60;0:90;0;100
Ports
[nagios@nagsrv1 plugins]$ perl ./centreon_brocade.pl --plugin=network::brocade::snmp::plugin --mode=interfaces --hostname=sansw1 --snmp-version='3' --snmp-username='test6' --authprotocol='MD5' --authpassphrase='myauthpassword' --privprotocol='DES' --privpassphrase='myprivpassword'
CRITICAL: Interface 'FC port 0/19' Status : down (admin: up) - Interface 'FC port 0/23' Status : down (admin: up) - Interface 'FC port 0/28' Status : down (admin: up) - Interface 'FC port 0/29' Status : down (admin: up) - Interface 'FC port 0/33' Status : down (admin: up) - Interface 'FC port 0/35' Status : down (admin: up)
Interfaces status
[nagios@nagsrv1 plugins]$ perl ./centreon_brocade.pl --plugin=network::brocade::snmp::plugin --mode=list-interfaces --hostname=sansw1 --snmp-version='3' --snmp-username='test6' --authprotocol='MD5' --authpassphrase='myauthpassword' --privprotocol='DES' --privpassphrase='myprivpassword'
List interfaces:
'FC port 0/4' [speed = 8000][status = up][id = 1073741828][type = fibreChannel]
'FC port 0/5' [speed = 8000][status = up][id = 1073741829][type = fibreChannel]
'FC port 0/6' [speed = 8000][status = up][id = 1073741830][type = fibreChannel]
'FC port 0/7' [speed = 8000][status = up][id = 1073741831][type = fibreChannel]
All interfaces, bypass errors
[nagios@nagsrv1 plugins]$ perl ./centreon_brocade.pl --plugin=network::brocade::snmp::plugin --mode=interfaces --hostname=sansw1 --snmp-version='3' --snmp-username='test6' --authprotocol='MD5' --authpassphrase='myauthpassword' --privprotocol='DES' --privpassphrase='myprivpassword' --warning-status='' --critical-status=''
OK: All interfaces are ok
Check Gbic optical strenght
[nagios@nagsrv1 plugins]$ perl ./centreon_brocade.pl --plugin=network::brocade::snmp::plugin --mode=interfaces --hostname=sansw1 --snmp-version='3' --snmp-username='test6' --authprotocol='MD5' --authpassphrase='myauthpassword' --privprotocol='DES' --privpassphrase='myprivpassword' --name --warning-status='' --critical-status='' --add-optical --add-status | sed 's/laser_temp_FC\ /#FC_/g' | tr '#' '\n'
OK: All interfaces are ok | '
FC_port 0/4'=39.00C;;;; 'input_power_FC port 0/4'=-2.6dBm;;;; 'output_power_FC port 0/4'=-1.5dBm;;;; '
FC_port 0/5'=41.00C;;;; 'input_power_FC port 0/5'=-1.6dBm;;;; 'output_power_FC port 0/5'=-2.1dBm;;;; '
FC_port 0/6'=43.00C;;;; 'input_power_FC port 0/6'=-2.1dBm;;;; 'output_power_FC port 0/6'=-2.2dBm;;;; '
FC_port 0/7'=42.00C;;;; 'input_power_FC port 0/7'=-3.3dBm;;;; 'output_power_FC port 0/7'=-2.1dBm;;;; '
FC_port 0/8'=44.00C;;;; 'input_power_FC port 0/8'=-0.2dBm;;;; 'output_power_FC port 0/8'=-0.2dBm;;;; '
FC_port 0/9'=45.00C;;;; 'input_power_FC port 0/9'=-2.4dBm;;;; 'output_power_FC port 0/9'=-1.1dBm;;;; '
...
FC_port 0/19'=43.00C;;;; 'output_power_FC port 0/19'=-1.1dBm;;;; '
Add this paragraph to your command.cfg in nagios
define command{
command_name check_brocade_health
command_line $USER1$/centreon_brocade.sh -H $HOSTADDRESS$ -c $ARG1$
}
[nagios@nagsrv1 ~]$ cat /usr/lib64/nagios/plugins/centreon_brocade.sh
#!/bin/bash
#@(#) Check SAN switch status
# Version 1.0 02-2023 EIF
while test -n "$1"; do
case "$1" in
-H) host=$2
shift ;;
-c) element=$2
shift ;;
esac
shift
done
#host=$1
#element=$2
warning=60
critical=90
snmpuser='test6'
snmpv='3'
authprot='MD5'
authpass='myauthpassword'
privprot='DES'
privpass='myprivpassword'
prog=/usr/lib64/nagios/plugins/centreon_brocade.pl
if [[ "${element}" == "cpu" ]]
then
perl ${prog} --plugin=network::brocade::snmp::plugin --mode=${element} --hostname=${host} --snmp-version=${snmpv} --snmp-username=${snmpuser} --authprotocol=${authprot} --authpassphrase=${authpass} --privprotocol=${privprot} --privpassphrase=${privpass} --warning=60 --critical=90
else
if [[ "${element}" == "hardware" ]]
then
perl ${prog} --plugin=network::brocade::snmp::plugin --mode=${element} --hostname=${host} --snmp-version=${snmpv} --snmp-username=${snmpuser} --authprotocol=${authprot} --authpassphrase=${authpass} --privprotocol=${privprot} --privpassphrase=${privpass}
else
if [[ "${element}" == "memory" ]]
then
perl ${prog} --plugin=network::brocade::snmp::plugin --mode=${element} --hostname=${host} --snmp-version=${snmpv} --snmp-username=${snmpuser} --authprotocol=${authprot} --authpassphrase=${authpass} --privprotocol=${privprot} --privpassphrase=${privpass} --warning=60 --critical=90
else
if [[ "${element}" == "list-interfaces" ]]
then
perl ${prog} --plugin=network::brocade::snmp::plugin --mode=${element} --hostname=${host} --snmp-version=${snmpv} --snmp-username=${snmpuser} --authprotocol=${authprot} --authpassphrase=${authpass} --privprotocol=${privprot} --privpassphrase=${privpass}
perl ${prog} --plugin=network::brocade::snmp::plugin --mode=interfaces --hostname=${host} --snmp-version=${snmpv} --snmp-username=${snmpuser} --authprotocol=${authprot} --authpassphrase=${authpass} --privprotocol=${privprot} --privpassphrase=${privpass} --name --warning-status='' --critical-status='' --add-optical --add-status | sed 's/laser_temp_FC\ /#FC_/g' | tr '#' '\n'
else
if [[ "${element}" == "interfaces" ]]
then
perl ${prog} --plugin=network::brocade::snmp::plugin --mode=${element} --hostname=${host} --snmp-version=${snmpv} --snmp-username=${snmpuser} --authprotocol=${authprot} --authpassphrase=${authpass} --privprotocol=${privprot} --privpassphrase=${privpass} | sed 's/FC\ port\ /FC_/g' | sed 's/\ //g' | sed 's/\]//g'| sed 's/\[/;/g' | sed "s/'//g" | sed "s/$/;$(date '+%s')/"
fi
fi
fi
fi
fi