Log-local.sh — получение и запись в файл локальной статистики.
#!/bin/bash
# Script for logging current system status:
# - number of processes
# - RX and TX bytes over venet0 network interface
# Log to this file:
LOG_FILE=/var/www/stat/local.log
# Timestamp:
TS=`date '+%Y-%m-%d %H:%M:%S'`
# Process number
PROCNUM=`ps aux | wc -l`
PROCNUM=$(($PROCNUM-1))
# netstat info
NETBYTES=`netstat -i | grep '^venet0[[:blank:]]' | awk '{print "RX ",$4,"bytes, TX ",$8,"bytes."}'`
# Log all to the file
echo "$TS => Procs: $PROCNUM, $NETBYTES" >> "$LOG_FILE"
#------------------------------------------------------------
Log-snmp.sh — получение и запись в файл SNMP-статистики.
#!/bin/bash
# Script for logging current SNMP information:
# - RX and TX bytes over some network interface
# Log to this file:
LOG_FILE=/var/www/stat/snmp.log
# Network interface number:
N=8
# SNMP host
HOST=192.168.222.100
# SNMP community
COMMUNITY=public
# MIBS
MIB1="IF-MIB::ifDescr.$N"
MIB2="IF-MIB::ifInOctets.$N"
MIB3="IF-MIB::ifInUcastPkts.$N"
MIB4="IF-MIB::ifOutOctets.$N"
MIB5="IF-MIB::ifOutUcastPkts.$N"
#############################
# Timestamp:
TS=`date '+%Y-%m-%d %H:%M:%S'`
# snmp info
RES=''
for MIB in $MIB1 $MIB2 $MIB3 $MIB4 $MIB5; do
LINE=`snmpget -c $COMMUNITY -v 1 $HOST $MIB`
NAME=`echo $LINE | sed "s/^IF-MIB::\([[:alnum:]]\+\).*/\1/"`
VALUE=`echo "$LINE" | sed "s/^IF-MIB::[[:alnum:]]\+\.$N = [[:alnum:]]\+: //"`
RES="$RES $NAME:$VALUE"
done
# Log all to the file
echo "$TS => $RES" >> "$LOG_FILE"
#------------------------------------------------------------
Запуск скриптов получения данных предполагается делать раз в минуту для получения локальной информации, и раз в две минуты — для получения информации с коммутатора через SNMP.
Для вывода данных по запросам браузера предлагается установить в систему для запуска с помощью lighttpd следующие скрипты:
Cgi-local.sh — отображение локальной статистики.
#!/bin/bash
# Simple CGI script
echo Content-type: text/plain
echo ""
LOG_FILE=/var/www/stat/local.log
# Show NUM lines
if [ -n "$QUERY_STRING" ]; then
NUM=$QUERY_STRING
else
if [ -n "$1" ]; then
NUM=$1
else
NUM=10
fi
fi
echo "Current statistic:"
tail -n $NUM "$LOG_FILE" | sort -r
#------------------------------------------------------------