Getting SNMP Values from Multiple POAs on the Same Node
Novell Cool Solutions: Tip
By Uffe Bager
Digg This -
Slashdot This
Posted: 7 Nov 2006 |
Problem
When using Groupwise on a Novell Netware cluster, SNMP is limited to the first loaded agent. If you have 2 POA's on the same node, SNMP will only return the SNMP values from the first loaded node.
Solution
Instead of using the SNMP.NLM, I built a Perl Script to get the needed information from Groupwise HTTP interface. This script works on POA, MTA and GWIA agents - WebAccess doesn't have an http interface. All POA, MTA and GWIA's need separate IP and HTTP ports for the HTTP interface to work in a cluster.
You can use any parameter in MRTG.CFG that you can see in the HTTP interface; see the parameters on http://agent_ip:http_port/snmp. I use the MRTG on Netware, but the Perl script also works on Linux. Edit your MRTG.CFG as in the example below, changing the parameters to include your needs.
Note: You need Perl installed on the server running MRTG. For the Netware/Groupwise serveres there are no special needs, besides the Groupwise Agents needing HTTP enabled.
MRTG.CFG Example
Here's a sample of MRTG.CFG, showing bytes in/out on a GWIA, as well as total and closed MTA's (this needs to be the primary domain):
Title[Mailgate1.smtpb]: AMT-MAILGATE1 SMTP - Number of Bytes Target[Mailgate1.smtpb]: `perl --noscreen sys:mrtg/bin/gwstats.pl gwiaStatBytesOut&gwiaStatBytesIn@host_ip:http_port` Options[Mailgate1.smtpb]: perminute, integer, growright MaxBytes[Mailgate1.smtpb]: 10000000 XSize[Mailgate1.smtpb]: 500 YSize[Mailgate1.smtpb]: 200 PageTop[Mailgate1.smtpb]:
Number of Bytes Through AMT-MAILGATE1 SMTP
YLegend[Mailgate1.smtpb]: Bytes Transmitted ShortLegend[Mailgate1.smtpb]: Bytes LegendI[Mailgate1.smtpb]: Bytes Out:  LegendO[Mailgate1.smtpb]: Bytes In: 
Title[pdom.doms]: AMT-PDOM MTA - Domains Target[pdom.doms]: `perl --noscreen sys:mrtg/bin/gwstats.pl mtaTotalDomains&mtaClosedDomains@host_ip:http_port` Options[pdom.doms]: gauge, integer, growright MaxBytes[pdom.doms]: 10000000 XSize[pdom.doms]: 500 YSize[pdom.doms]: 200 PageTop[pdom.doms]:
Total and Closed Domains - AMT-PDOM MTA
YLegend[pdom.doms]: Number ShortLegend[pdom.doms]: Domains LegendI[pdom.doms]: Total Domains:  LegendO[pdom.doms]: Closed Domains: 
Perl Script Example
To use the Perl script, edit the HTTP Username and Password in line 5 and 6; then copy the gwstats.pl file to MRTG/bin.
--------------------- gwstat.pl --------------------- require 5.005; use LWP::UserAgent; $usr = "HTTP Username"; $pwd = "HTTP Password"; sub Validate() { if ((scalar(@ARGV) < 1) || ($ARGV[0] eq '')) { print "ERR: invalid arguments.\n"; exit; } } Validate(); $l = length($ARGV[0]); $ta = index($ARGV[0],"&"); $tb = index($ARGV[0],"@"); $host = substr($ARGV[0],$tb+1,$l - $tb); @type = ( substr($ARGV[0],0,$ta), substr($ARGV[0],$ta+1,$tb-$ta-1)); @result = (-1,-1); $ua = new LWP::UserAgent; $ua->credentials("$host", "GroupWise Agent", "$usr" => "$pwd"); $req = new HTTP::Request "GET","http://$host/snmp"; $req->content_type('text/xml'); $res = $ua->request($req); $r = $res->content; $line = $r; $tu = index($line,"Uptime"); if ($tu ne -1 ) { $uptime = substr($line,$tu+20); $uptime = substr($uptime,0,index($uptime,"<")-2); }; $tu = index($line,"TimeUp"); if ($tu ne -1 ) { $uptime = substr($line,$tu+20); $uptime = substr($uptime,0,index($uptime,"<")-2); }; for($i=0;$i<=1;$i++){ $tv = index($line,$type[$i]); if ( $tv eq "-1") { next;} $result[$i] = substr($line,$tv+length($type[$i])+14); $result[$i] = substr($result[$i],0,index($result[$i],"<")-1); if ($type[$i] eq "null") {$result[$i]="0";} } print "$result[0]\n"; print "$result[1]\n"; print "$uptime\n"; print "$host\n"; --------------------------

Novell Cool Solutions (corporate web communities) are produced by WebWise Solutions. www.webwiseone.com