Linux Linux realtime network monitoring

Discussion in 'Tech Support' started by arachan, 2 Apr 2012.

  1. arachan

    arachan What's a Dremel?

    Joined:
    21 Oct 2011
    Posts:
    73
    Likes Received:
    0
    Hello,

    I've recently become an amateur linux server admin, mostly for the fun of building and running a linux server :) At the moment it runs a couple of game servers, voip, a website and backups, and I will hopefully expand it in the future.

    Anyway...

    I'm looking for an easy-to-use network monitoring tool. I'm curious to see what processes are using how much bandwidth, basically. I would like one that displays realtime data (if possible?) and also logs the data. I am a bit familiar with the linux cli and bash.

    Any suggestions?

    Thanks.
     
  2. Margo Baggins

    Margo Baggins I'm good at Soldering Super Moderator

    Joined:
    28 May 2010
    Posts:
    5,649
    Likes Received:
    268
    have a look at nagios core and icinga. they do real time monitoring. there is quite a few others, OMD (open monitoring distribution) is another one.

    I have recently set up quite a big distributed icinga system - so I have bash scripts for the installs if you want them.
     
  3. arachan

    arachan What's a Dremel?

    Joined:
    21 Oct 2011
    Posts:
    73
    Likes Received:
    0
    Hello,

    I installed icinga on my server and had a look around the web interface. Could you point me in the direction of the bandwidth monitoring?

    Thanks a lot.
     
  4. Margo Baggins

    Margo Baggins I'm good at Soldering Super Moderator

    Joined:
    28 May 2010
    Posts:
    5,649
    Likes Received:
    268
    I use a different front end to icinga, i use check_mk - it has a different linux and windows agent and is (i find) easier to configure and write checks for. it still uses icinga as backend.
     
  5. evoman91

    evoman91 What's a Dremel?

    Joined:
    17 Jun 2012
    Posts:
    13
    Likes Received:
    0
    To monitoring your bandwidth does your router support SNMP?

    If it does you could use a tool like MRTG to graph TX/RX.

    To actually record the bandwidth being used I have a cron job that runs a bash script I wrote every 5 minutes which gets the ifInOctets and ifOutOctets and uses a stored procedure to store the data in a table.

    I'll happy share it if it's of any use.
     
  6. Zoon

    Zoon Hunting Wabbits since the 80s

    Joined:
    12 Mar 2001
    Posts:
    5,910
    Likes Received:
    833
    Going to be a little picky here 'monitoring' and 'bandwidth graphing' is slightly different, and not a lot of free products do both, well.

    Monitoring will alert you when something isn't responding as you expect, bandwidth graphing is just a graph.

    For bandwidth graphing:

    Cacti is just about the best RRD frontend there is these days - it will bandwidth graph just about anything with a heartbeat. MRTG is a much simpler version of it but may also suffice your needs.

    There's also ntop which is a netflow collector/traffic analyzer. This will tell you what %age you spent on BitTorrents, what %age on browing the web. This is all traffic - not CPU utilisation.

    For monitoring:

    Nagios is probably your best friend. Utter pain to set up for a newbie, but very powerful.
     
  7. evoman91

    evoman91 What's a Dremel?

    Joined:
    17 Jun 2012
    Posts:
    13
    Likes Received:
    0
    I wouldn't say that nagios is a pain to set up, it's like most things you can use it in a basic sense and that is very easy to setup but you can do a lot with it if you have the time/experience.

    If you've never used linux before the hardest part is probably going to be installing/configuring the OS (unless you're using ubuntu server :eeek:).

    Once you have the OS installed I believe nagios is a lot of repository's so the initial install should be fairly straight forward. Then when you come to configure it there is a lot of documentation and help out there.
     
  8. Margo Baggins

    Margo Baggins I'm good at Soldering Super Moderator

    Joined:
    28 May 2010
    Posts:
    5,649
    Likes Received:
    268
    I found icinga alot easier that nagios to set up, icinga + check_mk is an awesome combination.
     
  9. evoman91

    evoman91 What's a Dremel?

    Joined:
    17 Jun 2012
    Posts:
    13
    Likes Received:
    0
    I've not heard of icinga until your post. I had a quick look at it, is is wrapper around nagios core? The web interface looks similar.
     
  10. Margo Baggins

    Margo Baggins I'm good at Soldering Super Moderator

    Joined:
    28 May 2010
    Posts:
    5,649
    Likes Received:
    268
    It is indeed, I have the install scripted so it doesn't take me long at all to get a box set up and out in my system.

    I use check_mk website more than the icinga one, there is also a fancy web interface called icinga web, which is alot prettier than the standard one which is very similar to nagios.
     
  11. Zoon

    Zoon Hunting Wabbits since the 80s

    Joined:
    12 Mar 2001
    Posts:
    5,910
    Likes Received:
    833
    I said that its a pain to set up for a newbie - not a pain in general!! :thumb:
     
  12. evoman91

    evoman91 What's a Dremel?

    Joined:
    17 Jun 2012
    Posts:
    13
    Likes Received:
    0
    Aww sorry I missed that. Yeah it can seem a bit daunting at first but as I say there is a lot of documentation out there and I'm sure people on here will be more than willing to help!
     
  13. Margo Baggins

    Margo Baggins I'm good at Soldering Super Moderator

    Joined:
    28 May 2010
    Posts:
    5,649
    Likes Received:
    268
    It took me a day to get my head round my first nagios set up, and then about a weekish to get in running how I wanted it to run.
     
  14. Zoon

    Zoon Hunting Wabbits since the 80s

    Joined:
    12 Mar 2001
    Posts:
    5,910
    Likes Received:
    833
    The most important thing to remember is to first define your metrics - THEN you go find a suitable tool to capture them in the way you want.
     
  15. roundyz

    roundyz What's a Dremel?

    Joined:
    16 Jan 2002
    Posts:
    153
    Likes Received:
    2
    I have used nagios, check_mk and a custom check using snmp. Rrd tool is nice with the graphs too. I still have the switch monitoring one...
     
  16. roundyz

    roundyz What's a Dremel?

    Joined:
    16 Jan 2002
    Posts:
    153
    Likes Received:
    2
    script

    here is the script, hop eit is useful provided as is :)

    #!/bin/bash

    #########################################
    # @author roundyz
    # @date 2011-05-15 (13:10)
    # @filename switchWrapper
    #########################################

    CHECKSNMPCOMMAND="/usr/lib/nagios/plugins/check_snmp"

    # snmp oid prefixes
    OPSTATUS="ifOperStatus"
    ADMINSTATUS="ifAdminStatus"
    INCOUNT="ifInOctets"
    OUTCOUNT="ifOutOctets"
    INDISCARDS="ifInDiscards"
    OUTDISCARDS="ifOutDiscards"
    INERRORS="ifInErrors"
    OUTERRORS="ifOutErrors"
    DESC="ifDescr"


    # Non user vars
    REVISION="0.4"
    PROGNAME="Switch Wrapper"
    EXPECTEDSTATUS="up"
    HOST=""
    COMMUNITY=""
    PROTOCOL=""
    PERFLINE=""
    EXITLINE="CANT DETERMINE PORT STATUS"
    EXITCODE=3
    PORTCODE=10101
    EXITLINE="Port Not used"
    EXITCODE=0



    print_usage() {
    echo "Usage: $PROGNAME -H 127.0.0.1 -C public -P 2c PORTCODE (OID after ifAdminStatus.) [-E up (expected status up(default)|down)]"
    echo "Usage: $PROGNAME --help"
    echo "Usage: $PROGNAME -h"
    echo "Usage: $PROGNAME --version"
    echo "Usage: $PROGNAME -V"
    }





    print_help() {
    printf "%s %s\n Switch Wrapper to permit business logic into snmp checks for switches, requires check_snmp\n" $PROGNAME $REVISION
    print_usage
    }





    # $1 = the snmp string desc/adminstatus/etc
    function runSnmpQuery(){
    local OID=$1
    local a=$($CHECKSNMPCOMMAND -C "$COMMUNITY" -o "$OID"."$PORTCODE" -P "$PROTOCOL" "$HOST")
    echo $a
    }





    # $1 the unit to return
    # $2 the string to strip
    # $3 the field to cut from
    # $4 the field to cut to
    # $5 the unit type
    function prepPrefData(){
    c=$(echo $2 | cut -f $3-$4 -d " ")
    printf "%s=%i%s;;;" $1 $c $5
    }




    run(){
    PORTDESC=$(runSnmpQuery "$DESC")
    TYPE=$(echo $PORTDESC| cut -f 4-4 -d " ")
    ADMINCMD=$(runSnmpQuery "$ADMINSTATUS")
    ADMINCMDRESPT1=$(echo $ADMINCMD|head -n1 | cut -f 1-3 -d " ")
    if [ "$ADMINCMDRESPT1" == "External command error:" ]; then
    ADMINCMDRES="SNMP problem"
    EXITLINE="SNMP problem"
    EXITCODE=3
    else
    ADMINCMDRES=$(echo $ADMINCMD|awk '{ print $4 }'| cut -d "(" -f 1-1)
    fi
    ADMINCMDRESPT2=$(echo $ADMINCMD|head -n1 | cut -f 2-2 -d "="|cut -f 1-1 -d "|" | sed 's/^\ //'|sed 's/\ $//')
    if [ "$ADMINCMDRESPT2" == "No Such Instance currently exists at this OID" ]; then
    EXITLINE="Port Not on device"
    EXITCODE=0
    fi
    if [ "$ADMINCMDRES" == "1" ]; then
    OPCMD=$(runSnmpQuery "$OPSTATUS")
    # OPCMD=$(echo $CHECKSNMPCOMMAND " -C "$COMMUNITY" -o $OPSTATUS.$PORTCODE -P" $PROTOCOL" " $HOST)
    OPCMDRES=$(echo $OPCMD| awk '{ print $4 }'| cut -d "(" -f 1-1)
    if [ "$OPCMDRES" == "$ADMINCMDRES" ]; then
    #pref data if all ok
    rpi=$(prepPrefData "packetsIn" "$(runSnmpQuery "$INCOUNT")" 4 4 "c")
    rpo=$(prepPrefData "packetsOut" "$(runSnmpQuery "$OUTCOUNT")" 4 4 "c")
    rpid=$(prepPrefData "packetsInDiscards" "$(runSnmpQuery "$INDISCARDS")" 4 4 "c")
    rpod=$(prepPrefData "packetsOutDiscards" "$(runSnmpQuery "$OUTDISCARDS")" 4 4 "c")
    rpie=$(prepPrefData "packetsInErrors" "$(runSnmpQuery "$INERRORS")" 4 4 "c")
    rpoe=$(prepPrefData "packetsOutErrors" "$(runSnmpQuery "$OUTERRORS")" 4 4 "c")
    PERFLINE=$(printf "%s %s %s %s %s %s" "$rpi" "$rpo" "$rpid" "$rpod" "$rpie" "$rpoe")
    EXITLINE="Port used and OK"
    EXITCODE=0
    fi
    if [ "$OPCMDRES" == "down" ]; then
    EXITLINE="Port used and Not OK Expected:"$EXPECTEDSTATUS" "
    EXITCODE=2
    #TODO FIX THIS IT SHOULD BE UP
    if [ "$EXPECTEDSTATUS" == "$OPCMDRES" ]; then
    EXITLINE="Port not expected to be utilised "
    EXITCODE=0
    fi
    fi
    fi
    printf "%s(%s:%s)[AdminStatus:OperationalStatus] {%s}|%s\n" "$EXITLINE" "$ADMINCMDRES" "$OPCMDRES" "$TYPE" "$PERFLINE"
    exit $EXITCODE
    }




    while test -n "$1"; do
    case "$1" in
    --help)
    print_help
    exit $EXITCODE
    ;;
    -h)
    print_help
    exit $EXITCODE
    ;;
    --version)
    echo $PROGNAME $REVISION
    exit $EXITCODE
    ;;
    -V)
    echo $PROGNAME $REVISION
    exit $EXITCODE
    ;;
    *)
    HOST=$2
    COMMUNITY=$4
    PROTOCOL=$6
    PORTCODE=$7
    if [[ "$9"=="UP" ]]; then
    EXPECTEDSTATUS=1
    else
    EXPECTEDSTATUS=0
    fi
    run
    ;;
    esac
    shift
    done
    #EOF
     

Share This Page