Quick way of getting the amount of logged in users on a windows 2003 terminal server, from BigBrother. this is not a howto just a quick reference for myself, if someone try’s this and has problems just let me know, mayb I forgot something here.
Using larrd and rrdtool you can get the info into a nice graph.
* note that this does not work on windows 2003 SP1.
First create the snmpusers bigbro script to monitor snmp, this is a modified script of Gavin Goes
trouble@sun:$ vi snmpusers.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
#!/bin/sh # snmpusers v0.1 # this wil monitor the hrSystemNumUsers.0 from a win2k3 box. # ####################### # Original header ####################### # BIG BROTHER - SCRIPT TO SUCK OUT CPU UTILIZATION FROM A # WINDOWS 2000 Server running SNMP with MIB-II # Gavin Goes - Cymple Solutions [gavin @ cymplesolutions.com] # # Please note that this is a very crude hack of the snmp v0.5 script # by Sean Macguire. The script can be modified to check any OID on a # host for comparison... (see OID check section) # # This program is under a BSD-style license, you may change it at # will and redistribute, but giving credit is good manners... # TO RUN THE SNMPCPU TEST ADD THE KEYWORD snmpusers TO THE "BBEXT" # VARIABLE OF $BBHOME/ext/bbdef.sh. THIS IS FOR SECURITY. # THE EASIEST INSTALLATION OF THIS SCRIPT INVOLVES PLACING THE # SCRIPT IN THE $BBHOME/ext directory, and adding the line: # # : : snmpusers.sh # # TO THE $BBHOME/etc/bb-bbexttab FILE. TRY ADDING A HOST TO YOUR # $BBHOME/etc/bb-hosts FILE FOLLOWING THIS EXAMPLE: # # 10.50.50.1 deadcat.domain.org # snmpusers # # BBPROG SHOULD JUST CONTAIN THE NAME OF THIS FILE # USEFUL WHEN YOU GET ENVIRONMENT DUMPS TO LOCATE # THE OFFENDING SCRIPT... # BBPROG=snmpusers; export BBPROG TEST="snmpusers" # BBHOME CAN BE SET MANUALLY WHEN TESTING. # OTHERWISE IT SHOULD BE SET FROM THE BB ENVIRONMENT # BBHOME=/home/bigbro/bb/; export BBHOME # FOR TESTING if test "$BBHOME" = "" then echo "BBHOME is not set... exiting" exit 1 fi if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi # # SET UP THE SNMP COMMANDS WE'LL NEED (AS WELL AS THE MIB DEFINITIONS # WHICH USUALLY ARE IN /usr/local/share/snmp/mibs # IF NOT, ACQUIRE THEM AND PLACE IN THERE # MIBS=ALL; export MIBS SNMPGET="/usr/bin/snmpget" SNMPWALK="/usr/bin/snmpwalk" SED="/bin/sed" if test ! -x "$SNMPGET" then echo "Can't find snmpget! [$SNMPGET]... exiting" exit 1 fi if test ! -x "$SNMPWALK" then echo "Can't find snmpwalk! [$SNMPWALK]... exiting" exit 1 fi # # LOOK FOR THE snmpusers KEYWORD IN THE etc/bb-hosts FILE # BUT MAKE SURE TO IGNORE COMMENTS # $GREP snmpusers $BBHOME/etc/bb-hosts | grep -v "^#" | while read line do set $line # GET ALL THE LINE ARGS HOST="$1" MACHINEMASK="$2"; export MACHINEMASK if test "$HOST" = "0.0.0.0" # SUPPORT USING NAMES... then HOST="$MACHINEMASK" fi if test "$FQDN" != "TRUE" then OLDIFS="$IFS" IFS="." set $MACHINEMASK MACHINEMASK="$1" IFS="$OLDIFS" fi # echo "DOING HOST $MACHINEMASK" BOX=`echo $MACHINEMASK | $SED "s/./,/g"` # COMMUNITY WILL DEFAULT TO "public" UNLESS OTHERWISE # STATED IN $BBHOME/etc/bb-smtptab COMMUNITY="public" if test -f $BBHOME/etc/bb-snmptab # IF NOT "public" then # SEARCH BY IP ADDRESS COMMUNITY=`grep "$HOST" $BBHOME/etc/bb-snmptab` if test "$COMMUNITY" != "" then set $COMMUNITY COMMUNITY="$2" else # SEARCH BY NAME COMMUNITY=`grep "$MACHINEMASK" $BBHOME/etc/bb-snmptab` if test "$COMMUNITY" != "" then set $COMMUNITY COMMUNITY="$2" else COMMUNITY="public" fi fi fi ### OID Check section ### Modify the appropriate setting and OID to suit your needs for ### your specific device... Use a utility like GetIF to find out ### what OIDs your device can monitor # GET THE AMOUNT OF USERS FOR THIS DEVICE... SYSTEMUSERS=`$SNMPGET -v2c -c$COMMUNITY $HOST hrSystemNumUsers.0 2>&1` set $SYSTEMUSERS echo "1= $*" #just for debugging shift; shift; shift; echo "2 =$*" #just for debugging SYSTEMUSERS=`echo $* | $SED "s/\"//g"` REALUSERS="`/usr/bin/expr $SYSTEMUSERS - 1`" # Check if the value of the number of users is greater then # or equal to a specific value... if [ "$REALUSERS" -ge "50" ] then # SEND USERS MESSAGE AND EXIT $BB $BBDISP "status ${BOX}.${TEST} red `date` The number of users is $REALUSERS" continue; else COLOR="green"; TEST="snmpusers"; $BB $BBDISP "status ${BOX}.${TEST} $COLOR `date` $LINE The number of users is $REALUSERS" fi done |
# snmpusers v0.1
# this wil monitor the hrSystemNumUsers.0 from a win2k3 box.
#
#######################
# Original header
#######################
# BIG BROTHER – SCRIPT TO SUCK OUT CPU UTILIZATION FROM A
# WINDOWS 2000 Server running SNMP with MIB-II
# Gavin Goes – Cymple Solutions [gavin @ cymplesolutions.com]
#
# Please note that this is a very crude hack of the snmp v0.5 script
# by Sean Macguire. The script can be modified to check any OID on a
# host for comparison… (see OID check section)
#
# This program is under a BSD-style license, you may change it at
# will and redistribute, but giving credit is good manners…
# TO RUN THE SNMPCPU TEST ADD THE KEYWORD snmpusers TO THE "BBEXT"
# VARIABLE OF $BBHOME/ext/bbdef.sh. THIS IS FOR SECURITY.
# THE EASIEST INSTALLATION OF THIS SCRIPT INVOLVES PLACING THE
# SCRIPT IN THE $BBHOME/ext directory, and adding the line:
#
# : : snmpusers.sh
#
# TO THE $BBHOME/etc/bb-bbexttab FILE. TRY ADDING A HOST TO YOUR
# $BBHOME/etc/bb-hosts FILE FOLLOWING THIS EXAMPLE:
#
# 10.50.50.1 deadcat.domain.org # snmpusers
#
# BBPROG SHOULD JUST CONTAIN THE NAME OF THIS FILE
# USEFUL WHEN YOU GET ENVIRONMENT DUMPS TO LOCATE
# THE OFFENDING SCRIPT…
#
BBPROG=snmpusers; export BBPROG
TEST="snmpusers"
# BBHOME CAN BE SET MANUALLY WHEN TESTING.
# OTHERWISE IT SHOULD BE SET FROM THE BB ENVIRONMENT
#
BBHOME=/home/bigbro/bb/; export BBHOME # FOR TESTING
if test "$BBHOME" = ""
then
echo "BBHOME is not set… exiting"
exit 1
fi
if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED
then
# echo "*** LOADING BBDEF ***"
. $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS
fi
#
# SET UP THE SNMP COMMANDS WE’LL NEED (AS WELL AS THE MIB DEFINITIONS
# WHICH USUALLY ARE IN /usr/local/share/snmp/mibs
# IF NOT, ACQUIRE THEM AND PLACE IN THERE
#
MIBS=ALL; export MIBS
SNMPGET="/usr/bin/snmpget"
SNMPWALK="/usr/bin/snmpwalk"
SED="/bin/sed"
if test ! -x "$SNMPGET"
then
echo "Can’t find snmpget! [$SNMPGET]… exiting"
exit 1
fi
if test ! -x "$SNMPWALK"
then
echo "Can’t find snmpwalk! [$SNMPWALK]… exiting"
exit 1
fi
#
# LOOK FOR THE snmpusers KEYWORD IN THE etc/bb-hosts FILE
# BUT MAKE SURE TO IGNORE COMMENTS
#
$GREP snmpusers $BBHOME/etc/bb-hosts | grep -v "^#" |
while read line
do
set $line # GET ALL THE LINE ARGS
HOST="$1"
MACHINEMASK="$2"; export MACHINEMASK
if test "$HOST" = "0.0.0.0" # SUPPORT USING NAMES…
then
HOST="$MACHINEMASK"
fi
if test "$FQDN" != "TRUE"
then
OLDIFS="$IFS"
IFS="."
set $MACHINEMASK
MACHINEMASK="$1"
IFS="$OLDIFS"
fi
# echo "DOING HOST $MACHINEMASK"
BOX=`echo $MACHINEMASK | $SED "s/./,/g"`
# COMMUNITY WILL DEFAULT TO "public" UNLESS OTHERWISE
# STATED IN $BBHOME/etc/bb-smtptab
COMMUNITY="public"
if test -f $BBHOME/etc/bb-snmptab # IF NOT "public"
then
# SEARCH BY IP ADDRESS
COMMUNITY=`grep "$HOST" $BBHOME/etc/bb-snmptab`
if test "$COMMUNITY" != ""
then
set $COMMUNITY
COMMUNITY="$2"
else # SEARCH BY NAME
COMMUNITY=`grep "$MACHINEMASK" $BBHOME/etc/bb-snmptab`
if test "$COMMUNITY" != ""
then
set $COMMUNITY
COMMUNITY="$2"
else
COMMUNITY="public"
fi
fi
fi
### OID Check section
### Modify the appropriate setting and OID to suit your needs for
### your specific device… Use a utility like GetIF to find out
### what OIDs your device can monitor
# GET THE AMOUNT OF USERS FOR THIS DEVICE…
SYSTEMUSERS=`$SNMPGET -v2c -c$COMMUNITY $HOST hrSystemNumUsers.0 2>&1`
set $SYSTEMUSERS
echo "1= $*" #just for debugging
shift; shift; shift;
echo "2 =$*" #just for debugging
SYSTEMUSERS=`echo $* | $SED "s/\"//g"`
REALUSERS="`/usr/bin/expr $SYSTEMUSERS – 1`"
# Check if the value of the number of users is greater then
# or equal to a specific value…
if [ "$REALUSERS" -ge "50" ]
then
# SEND USERS MESSAGE AND EXIT
$BB $BBDISP "status ${BOX}.${TEST} red `date` The number of users is $REALUSERS"
continue;
else
COLOR="green"; TEST="snmpusers";
$BB $BBDISP "status ${BOX}.${TEST} $COLOR `date` $LINE The number of users is $REALUSERS"
fi
done
* don’t forget to chmod 755 the file.
Then add it to the bbconfig file:
1 |
: :snmp/snmpusers.sh
|
To get graphs create a file for larrd:
trouble@sun:$ vi snmpusers-larrd.pl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
#!/usr/bin/perl -w -w # # Set a path to the rrd tool lib # Set as and $ENV and see what is up use lib $ENV{'RRDPM'}; use RRDs; $ds = "snmpusers"; @ds = ("DS:snmpusers:GAUGE:600:0:U", ); ################################## # Start of script ################################## if( not $ENV{'BBHOME'} ) { print "$0: BBHOME is not setn"; exit(1); } if( not -d $ENV{'BBHOME'} ) { print "$0: BBHOME is invalidn"; exit(1); } if( not -d $ENV{'BBRRDS'} ) { print "$0: BBRRDS is not setn"; exit(1); } ## # real work begins here ## # go to the logs area for simplication of the list #chdir "$ENV{'BBLOGS'}"; chdir "/home/bigbro/bbvar/logs"; # Glob the logs LOG: while ( defined ($log = <*.$ds>) ) { $host=$log; # create some handy vars $host =~ s/.$ds//; $host =~ s/,/./g; ($ctime) = (stat($log))[10]; $colour_check="notok"; # Grab lines open(LOG,"$log"); while ( defined ($line = <log>) ) { chomp $line; # ensure colour is valid - ie don't graph purple results if($line =~ /green|yellow|red/) { $line =~ /users iss+(d+)/o; $users=$1; $colour_check="ok"; } # end line colour check if ($colour_check ne "ok") { print "$0: WARN $host is not showing red, yellow, or green. $log skipped.n" if ($ENV{'WARN'}); next LOG; } } # end while close(LOG); print "$0: DEBUG users: $usersn" if $ENV{'DEBUG'}; # RRD for users $RRD="$ENV{'BBRRDS'}/$host.snmpusers.rrd"; # if it doesn't exist, make it if ( not -f $RRD ) { # RRAS defined in larrd.pl @rras = split " ",$ENV{'RRAS'}; RRDs::create($RRD,@ds,@rras); $ERR=RRDs::error; if($ERR) { print "$0: ERROR creating $RRD: $ERRn" if ($ENV{'ERROR'}); next; } $ctime="N"; print "$0: STATUS did not find $RRD, created.n" if ($ENV{'STATUS'}); } RRDs::update("$RRD","$ctime:$users"); $ERR=RRDs::error; if($ERR) { print "$0: WARN updating $RRD: $ERRn" if ($ENV{'WARN'}); } # Sloppy ($ctime) = (stat($log))[10]; } ############################################## # end of script ############################################## </log> |
$ds = "snmpusers";
@ds = ("DS:snmpusers:GAUGE:600:0:U",
);
##################################
# Start of script
##################################
if( not $ENV{‘BBHOME’} ) {
print "$0: BBHOME is not setn";
exit(1);
}
if( not -d $ENV{‘BBHOME’} ) {
print "$0: BBHOME is invalidn";
exit(1);
}
if( not -d $ENV{‘BBRRDS’} ) {
print "$0: BBRRDS is not setn";
exit(1);
}
##
# real work begins here
##
# go to the logs area for simplication of the list
#chdir "$ENV{‘BBLOGS’}";
chdir "/home/bigbro/bbvar/logs";
# Glob the logs
LOG: while ( defined ($log = <*.$ds>) ) {
$host=$log;
# create some handy vars
$host =~ s/.$ds//;
$host =~ s/,/./g;
($ctime) = (stat($log))[10];
$colour_check="notok";
# Grab lines
open(LOG,"$log");
while ( defined ($line = <log>) ) {
chomp $line;
# ensure colour is valid – ie don’t graph purple results
if($line =~ /green|yellow|red/) {
$line =~ /users iss+(d+)/o;
$users=$1;
$colour_check="ok";
} # end line colour check
if ($colour_check ne "ok") {
print "$0: WARN $host is not showing red, yellow, or green. $log skipped.n" if ($ENV{‘WARN’});
next LOG;
}
} # end while
close(LOG);
print "$0: DEBUG users: $usersn" if $ENV{‘DEBUG’};
# RRD for users
$RRD="$ENV{‘BBRRDS’}/$host.snmpusers.rrd";
# if it doesn’t exist, make it
if ( not -f $RRD ) {
# RRAS defined in larrd.pl
@rras = split " ",$ENV{‘RRAS’};
RRDs::create($RRD,@ds,@rras);
$ERR=RRDs::error;
if($ERR) {
print "$0: ERROR creating $RRD: $ERRn" if ($ENV{‘ERROR’});
next;
}
$ctime="N";
print "$0: STATUS did not find $RRD, created.n" if ($ENV{‘STATUS’});
}
RRDs::update("$RRD","$ctime:$users");
$ERR=RRDs::error;
if($ERR) {
print "$0: WARN updating $RRD: $ERRn" if ($ENV{‘WARN’});
}
# Sloppy
($ctime) = (stat($log))[10];
}
##############################################
# end of script
##############################################
</log>
Change the data list in larrd-config
1 |
@DATALIST=("la","disk","bbnet","vmstat","netstat","users","procs","memory","snmpusers"); |
Find your larrd-grapher.cgi and add the following section somewhere around line: 1470
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
snmpusers => { hourly => { start_sec => "e-48h", title => "$host # of Users Last 48 Hours", }, daily => { start_sec => "e-12d", title => "$host # of Users Last 12 Days", }, weekly => { start_sec => "e-48d", title => "$host # of Users Last 48 Days", }, monthly => { start_sec => "e-576D", title => "$host # of Users Last 576 Days", }, yaxis => "#", lines => sub { my ($RRD,$service,$graph,$p,$color)=@_; return [ # qq{DEF:p=$host.snmpusers.rrd:la:AVERAGE}, qq{DEF:p=$host.snmpusers.rrd:snmpusers:AVERAGE}, qq{AREA:p#00CC00:Users}, qq{COMMENT:n}, qq{GPRINT:p:LAST:Users : %5.1lf%s (cur)}, qq{GPRINT:p:MAX: : %5.1lf%s (max)}, qq{GPRINT:p:MIN: : %5.1lf%s (min)}, qq{GPRINT:p:AVERAGE: : %5.1lf%s (avg)n}, ] }, } |
return [
# qq{DEF:p=$host.snmpusers.rrd:la:AVERAGE},
qq{DEF:p=$host.snmpusers.rrd:snmpusers:AVERAGE},
qq{AREA:p#00CC00:Users},
qq{COMMENT:n},
qq{GPRINT:p:LAST:Users : %5.1lf%s (cur)},
qq{GPRINT:p:MAX: : %5.1lf%s (max)},
qq{GPRINT:p:MIN: : %5.1lf%s (min)},
qq{GPRINT:p:AVERAGE: : %5.1lf%s (avg)n},
]
},
}
Restart bigbro and it should work.
FEB
2007