måndag 30 juni 2014

Mer trådlöst pulande

Jag är lite av en övervakningsfreak. Jag gillar att mäta och övervaka saker, ofta bara för att jag kan.

Så när jag fått igång scriptet som tog ut användarna från våra trådlösa Cisco-kontroller tänkte jag att man också kunde använda datat för att visa hur många användare som är uppkopplade trådlöst.

Jag löste det helt sonika med att modifiera det gamla scriptet och lade till två rader:
more /tmp/wlc.txt | wc -l > /tmp/users.txt
convert -background white  -fill blue -pointsize 24 label:@/tmp/users.txt   /var/www/wlanusers/users.gif

Först räknar jag antalet rader och skriver ut siffran i filen users.txt sedan konverterar jag siffran till en GIF-bild som jag lägger på webbservern (detta är maskinen som kör Smokeping och MRTG) och pekar helt sonika ut den i min html-fil när jag ska använda den. Den uppdateras med femminutersintervall.

Eftersom det också finns lite andra tweaks i scriptet publicerar jag hela igen:
#!/bin/bash
##########################
snmp_community="public"
snmp_host="192.168.1.1"

# Tar bort filen om den redan finns
if [ -e /tmp/wlc.txt ]
        then
                rm -f /tmp/wlc.txt
fi

####################################################################
#Set input system to break on new-line when adding data to an array#
####################################################################
IFS=$'\n'
####################################################################
#Perform SNMP walks to get data of interest and load them into array variables to use later#
####################################################################
while [ "1" -ne "2" ]
do
 Unique_OID=($(snmpwalk -v 2c -O x -c $snmp_community $snmp_host 1.3.6.1.4.1.14179.2.1.4.1.1))
 Client_IP=($(snmpwalk -v 2c -c $snmp_community $snmp_host 1.3.6.1.4.1.14179.2.1.4.1.2))
 Client_Username=($(snmpwalk -v 2c -c $snmp_community $snmp_host 1.3.6.1.4.1.14179.2.1.4.1.3))
#####################################################################
#Ensure all SNMP walk requests contain the same amount of data and break loop when they do #
#####################################################################
 count1=${#Unique_OID[@]}
 count2=${#Client_IP[@]}
 count3=${#Client_Username[@]}
 if [ "$count1" -eq "$count2" ]; then
                  if [ "$count2" -eq "$count3" ]; then
                                                                  break
         fi
 fi
done
####################################################################
#Create a loop to match and extract data between the various arrays#
####################################################################
wait
index=0
while [ "$index" -lt "$count1" ]
      do
          id=$(echo ${Unique_OID[$index]} | cut -d "=" -f1 | awk -F "." '{print $8 "."$9 "." $10 "." $11 "." $12 "." $13 }')
          cIP=$(echo ${Client_IP[$index]} | grep $id | awk -F " " '{print $4}')
          cUser=$(echo ${Client_Username[$index]} | grep $id | awk -F " " '{print $4}' | sed s/\"//g)
          if [[ $cUser = TEST* ]] || [[ $cUser != "" ]] && [[ $cUser != host* ]] && [[ $cIP != "0.0.0.0" ]]; then
                if [[ $cUser = TEST* ]]; then
                    echo "SYSTEM=CISCO IP="$cIP "USER="$cUser >> /tmp/wlc.txt
                else
                    echo "SYSTEM=CISCO IP="$cIP "USER=LIDINGO\\\\"$cUser >> /tmp/wlc.txt
                fi
          fi
     ((index++))
     done

# Kontrollera om filen finns och skicka den vidare
if [ -e /tmp/wlc.txt ]
        then
                more /tmp/wlc.txt | wc -l > /tmp/users.txt
                convert -background white  -fill blue -pointsize 24 label:@/tmp/users.txt   /var/www/wlanusers/users.gif
                logger -d -f /tmp/wlc.txt -n 192.168.1.2 -P 514
                logger -d -f /tmp/wlc.txt -n 192.168.1.3 -P 514
fi


-------------------------
Den sista logger-raden skickar in datat i Splunk. Där kan jag korrelera och undersöka t.ex. om en användare är inloggad på flera enheter samtidigt - klart suspekt beteende om enheterna är på geografiskt olika platser.

Inga kommentarer:

Skicka en kommentar