Simple network monitoring with ping
In the Spring of 2005 Comcast experienced a major DNS outage. Since then many Comcast users have switched to DNS servers that belong to Verizon and other ISPs. Comcast started taking a lot of flak from its competition upset by Comcast customers using their resources. Finaly, a year later Comcast networking gurus remedied the problem by introducing dynamic DNS. Or so they thought.
Since about late March of 2006 I’ve been having a lot of issues with my Comcast broadband. DNS was sluggish and the network was slow and unstable. Calling Comcast service department was a problem: I have Vonage VoIP that, naturally, uses my Comcast connection. Calling Comcast on my cell phone and spending my expensive Cingular minutes to listen to Michael Bolton while waiting for a service rep became very frustrating very quickly. So I turned to the good old US Postal Service.
Eventually, Comcast people contacted me and, as it turned out, they were well aware of widespread problems caused by their recent DNS changes. Still, they claimed that signal strength to my modem was good and the line was clean. Whatever that means. So I provided them with network performance data I collected over the past few days and theatened to file a BBB complaint. As if by miracle, a few hours later my network was fully functional.
Apparently, if you are a Comcast customer, simply paying your monthly bill is not enough to get service you’ve been promised. You also need to be a computer professional with a very big mouth. However, let’s not dwell on the unpleasant and instead consider the simple Shell script I used to collect and store network performance data produced by ping. MySQL was used to store collected data and GNUPlot was used to visualize it.
#!/bin/sh
# April 8, 2006
# This script uses ping to monitor quality of network connection to
# selected hosts and notifies the admin when packet loss ratio
# exceeds defined thresholds.
# PINGHOST www.comcast.net 204.127.195.15
# PINGHOST www.yahoo.com 216.109.112.135
# PINGHOST www.google.com 64.233.187.99
# PINGHOST www.mit.edu 18.7.22.83
MYSQL="/usr/bin/mysql"
DBUSER="dbuser"
DBPASS="password"
DBNAME="netmon"
LOST_PACKET_THRESHOLD=10
PACKET_SIZE=64
PACKET_COUNT=10
PING_INTERVAL=1
TIMEOUT=2
PING="/bin/ping"
GNUPLOT="/usr/bin/gnuplot"
cat /var/adm/bin/netmon.sh | grep PINGHOST | grep -v grep | while read LINE
do
NAME=`echo "$LINE" | awk '{print $3}'`
IP=`echo "$LINE" | awk '{print $4}'`
$PING -s $PACKET_SIZE -c $PACKET_COUNT -i $PING_INTERVAL -W $TIMEOUT $IP | egrep "packet loss|rtt min" | while read LINE2
do
if [ `echo "$LINE2" | egrep -c "packet loss"` -eq 1 ]
then
echo "$LINE2" | awk '{print $6}' | awk -F'%' '{print $1}' > /tmp/netmon_packet_loss.txt
echo "$LINE2" | awk '{print $1}' > /tmp/netmon_packets_sent.txt
echo "$LINE2" | awk '{print $4}' > /tmp/netmon_packets_received.txt
elif [ `echo "$LINE2" | egrep -c "rtt min"` -eq 1 ]
then
echo "$LINE2" | awk -F '/' '{print $5}' > /tmp/netmon_avg.txt
echo "$LINE2" | awk -F '/' '{print $6}' > /tmp/netmon_max.txt
fi
done
if [ -f /tmp/netmon_packet_loss.txt ] && [ -f /tmp/netmon_avg.txt ] && [ -f /tmp/netmon_max.txt ] && [ -f /tmp/netmon_packets_sent.txt ] && [ -f /
tmp/netmon_packets_received.txt ]
then
DATE=`date +'%Y-%m-%d %T'`
PACKETS_SENT=`cat /tmp/netmon_packets_sent.txt`
PACKETS_RECEIVED=`cat /tmp/netmon_packets_received.txt`
PACKET_LOSS=`cat /tmp/netmon_packet_loss.txt`
AVG=`cat /tmp/netmon_avg.txt`
MAX=`cat /tmp/netmon_max.txt`
rm /tmp/netmon_packet_loss.txt /tmp/netmon_avg.txt /tmp/netmon_max.txt /tmp/netmon_packets_sent.txt /tmp/netmon_packets_received.txt
echo "$DATE, $NAME, $IP, $PACKET_SIZE, $PACKET_COUNT, $PING_INTERVAL, $PACKETS_SENT, $PACKETS_RECEIVED, $PACKET_LOSS, $AVG, $MAX"
$MYSQL -u$DBUSER -p$DBPASS $DBNAME < < EOF
INSERT INTO pinger (datetime,hostname,ip_address,packet_size,
packet_count,ping_interval,packet_sent,packet_received,
packet_lost,response_avg,response_max)
values('$DATE','$NAME','$IP','$PACKET_SIZE',
'$PACKET_COUNT','$PING_INTERVAL','$PACKETS_SENT',
'$PACKETS_RECEIVED','$PACKET_LOSS','$AVG','$MAX');
EOF
fi
done
cat /var/adm/bin/netmon.sh | grep PINGHOST | grep -v grep | awk '{print $3}' | while read hostname
do
$MYSQL --column-names=0 -u$DBUSER -p$DBPASS $DBNAME < /tmp/netmon_gnuplot_${hostname}.dat
SELECT hostname, datetime, packet_lost, response_avg, response_max FROM pinger WHERE hostname LIKE '${hostname}' AND DATE_SUB(CURDATE(),INTERVAL 3 DAY) < =
datetime;
EOF
cat < /tmp/netmon_gnuplot_${hostname}.gnu
set title '$hostname'
set xdata time
set key box
set key bottom right
set size 1.5,1.5
set xlabel 'Date'
set ylabel 'Ping Response' font 'Arial,12'
set autoscale
set timefmt "%Y-%m-%d %H:%M:%S"
set term png color
set output '/WD120GB_01/htdocs/netmon/${hostname}_1.png'
plot '/tmp/netmon_gnuplot_${hostname}.dat' using 2:4 title 'Packet Loss (%)' with linespoints,
'/tmp/netmon_gnuplot_${hostname}.dat' using 2:5 title 'Average Response (ms)' with linespoints,
'/tmp/netmon_gnuplot_${hostname}.dat' using 2:6 title 'Maximum Response (ms)' with linespoints
EOF
$GNUPLOT /dev/null
done
cat < /WD120GB_01/htdocs/netmon/index.htm
EOF
cat /var/adm/bin/netmon.sh | grep PINGHOST | grep -v grep | awk '{print $3}' | while read hostname
do
hostname2=`echo "$hostname" | sed 's/.//g'`
cat < > /WD120GB_01/htdocs/netmon/index.htm
<a href="#${hostname2}" target="_self" data-mce-href="#${hostname2}">${hostname}</a>
EOF
done
cat /var/adm/bin/netmon.sh | grep PINGHOST | grep -v grep | awk '{print $3}' | while read hostname
do
hostname2=`echo "$hostname" | sed 's/.//g'`
cat < > /WD120GB_01/htdocs/netmon/index.htm
<img src="https://www.krazyworks.com/wp-admin/${hostname}_1.png" alt="" width="960" height="720" data-mce-src="https://www.krazyworks.com/wp-admin/${hostname}_1.png"><a name="${hostname2}" class="mce-item-anchor"></a>
EOF
done
cat < > /WD120GB_01/htdocs/netmon/index.htm
EOF
rm /tmp/netmon_gnuplot*
chown -R wwwrun:www /WD120GB_01/htdocs/netmon
chmod -R 755 /WD120GB_01/htdocs/netmonAnd the end result is a page on my Web server with several graphs showing network performance for the selected hosts. Here’s one of the graphs:


Computer engineering.
ive used meebo (using now) trillian astra,digsby,pidgin(sucked)and i luv IM or whatever it was called
i liked trillian alot and digsby the best but havent used anything different than meebo in a while so dont know if anything has changed
i want to be able to see my latency/ping without being in a game (i.e. WoW, CSS). mainly to see if someone in the house is making everyone lag because of, say, a torrent. so, how could i do this?