BIG-IP Remote Interface Bandwidth Monitor
Problem this snippet solves:
This script polls the BIG-IP via SNMP and displays the current bandwidth utilization for one or all interfaces.
How to use this snippet:
- Install script on remote system with appropriate permissions.
- Make sure Perl and the Net::SNMP perl module are installed.
Code :
#!/usr/bin/perl -w # This code is not supported by F5 Network and is offered under the GNU General Public License. Use at your own risk. use strict; use Net::SNMP qw(:snmp); my ($host, $snmp_comm, $interval, $int); if (! @ARGV) { print "Please enter the LTM host name or IP: "; chomp ($host =); print "\nPlease enter the LTM SNMP Community String: "; chomp ($snmp_comm = ); print "\nPlease enter the polling interval for calculating the delta: "; chomp ($interval = ); print "\nPlease enter the interface you wish to poll (Enter 0 for all interfaces): "; chomp ($int = ); } else { my $usage = "ltm_intStat.pl "; die "Usage: $usage\n" if $#ARGV != 3; $host = $ARGV[0]; $snmp_comm = $ARGV[1]; $interval = $ARGV[2]; $int = $ARGV[3]; chomp ($host , $snmp_comm , $interval, $int); } my $allInts_OID = ".1.3.6.1.4.1.3375.2.1.2.4.1.2.1.1"; my $ltm_InBytes_Index = "1.3.6.1.4.1.3375.2.1.2.4.4.3.1.3."; my $ltm_OutBytes_Index = "1.3.6.1.4.1.3375.2.1.2.4.4.3.1.5."; my ($session, $error) = Net::SNMP->session( -hostname => $host, -community => $snmp_comm, -port => 161, -version => 'snmpv2c', -nonblocking => 0 ); if (!defined $session) { print "Received no SNMP response from $host\n"; print STDERR "Error: $error\n"; exit -1; } if ($int eq 0) { my $allInts = $session->get_table ( -baseoid => $allInts_OID ); my %int_table = %{$allInts}; print "\n\n"; foreach my $key (sort keys %int_table){ #Convert interface name to OID string my @chars = unpack("C" x length($int_table{$key}),$int_table{$key}); my $int_length = length( $int_table{$key} ); unshift(@chars, $int_length); my $int_oid = join('.' , @chars); #Build OID from index & interface my $ltm_intBytesIn = $ltm_InBytes_Index . $int_oid; my $ltm_intBytesOut = $ltm_OutBytes_Index . $int_oid; #Get first instance my $oids_1 = $session->get_request( -varbindlist => [$ltm_intBytesIn, $ltm_intBytesOut] ); # Wait for second poll sleep $interval; #Get second instance my $oids_2 = $session->get_request( -varbindlist => [$ltm_intBytesIn, $ltm_intBytesOut] ); #Calculate Rates my $rate_in = ($oids_2->{$ltm_intBytesIn} - $oids_1->{$ltm_intBytesIn})*8 / ($interval*1000000); my $rate_out = ($oids_2->{$ltm_intBytesOut} - $oids_1->{$ltm_intBytesOut})*8 / ($interval*1000000); my $rate_total = $rate_in + $rate_out; #Trim to 4 decimal places $rate_in =~s/(^\d{1,}\.\d{4})(.*$)/$1/; $rate_out =~s/(^\d{1,}\.\d{4})(.*$)/$1/; $rate_total =~s/(^\d{1,}\.\d{4})(.*$)/$1/; #Print Results print "Interface $int_table{$key} rate (Mbits/sec)"; print "\n\n\t$rate_in (IN)\n"; print "\t$rate_out (OUT)\n"; print "\t$rate_total (TOTAL)\n\n"; } } else { #Convert interface name to OID string my @chars = unpack("C" x length($int),$int); my $int_length = length( $int ); unshift(@chars, $int_length); my $int_oid = join('.' , @chars); #Build OID from index & interface my $ltm_intBytesIn = $ltm_InBytes_Index . $int_oid; my $ltm_intBytesOut = $ltm_OutBytes_Index . $int_oid; #Get first instance my $oids_1 = $session->get_request( -varbindlist => [$ltm_intBytesIn, $ltm_intBytesOut] ); sleep $interval; #Get second instance my $oids_2 = $session->get_request( -varbindlist => [$ltm_intBytesIn, $ltm_intBytesOut] ); #Calculate Rates my $rate_in = ($oids_2->{$ltm_intBytesIn} - $oids_1->{$ltm_intBytesIn})*8 / ($interval*1000000); my $rate_out = ($oids_2->{$ltm_intBytesOut} - $oids_1->{$ltm_intBytesOut})*8 / ($interval*1000000); my $rate_total = $rate_in + $rate_out; #Trim to 4 decimal places $rate_in =~s/(^\d{1,}\.\d{4})(.*$)/$1/; $rate_out =~s/(^\d{1,}\.\d{4})(.*$)/$1/; $rate_total = ~s/(^\d{1,}\.\d{4})(.*$)/$1/; #Print Results print "Interface $int rate (Mbits/sec)"; print "\n\n\t$rate_in (IN)\n"; print "\t$rate_out (OUT)\n"; print "\t$rate_total (TOTAL)\n\n"; }
Published Mar 12, 2015
Version 1.0CodeCentral_194
Cirrus
Joined May 05, 2019
CodeCentral_194
Cirrus
Joined May 05, 2019
No CommentsBe the first to comment