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 }
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 ...
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
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;;;;
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.
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
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