BigBrother SNMP users

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:$ mkdir $bbhome/ext/snmp
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:

trouble@sun:$ vi $bbhome/etc/bb-bbexttab
1
 : :snmp/snmpusers.sh

To get graphs create a file for larrd:

trouble@sun:$ cd /usr/local/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 = &lt;*.$ds&gt;) ) {
$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

trouble@sun:$ vi /usr/local/larrd/larrd-config.pl
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 =&gt; {
    hourly =&gt; {
        start_sec =&gt; "e-48h",
        title =&gt; "$host # of Users Last 48 Hours",
    },
    daily =&gt; {
        start_sec =&gt; "e-12d",
        title =&gt; "$host # of Users Last 12 Days",
    },
    weekly =&gt; {
        start_sec =&gt; "e-48d",
        title =&gt; "$host # of Users Last 48 Days",
    },
    monthly =&gt; {
        start_sec =&gt; "e-576D",
        title =&gt; "$host # of Users Last 576 Days",
    },
    yaxis =&gt; "#",
    lines =&gt; 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.

0

My First CarPC

Car

1995 Chevrolet Lumina LS 3.1L V6

PC

 

Pics

Click the images for a bigger image.

A 23″ screen and the tiny 7″ touch screen.

The Case

It has been build in the shape of the car (back seat)





The case it pretty big but thats because the JBL GTO will be mounted on the back of the case.







The Car Interior
































0
Page 10 of 15 «...89101112...»