ntopng can now be used by nagios as a source of data. For instance you can query ntopng via the HTTP interface and extract JSON-based traffic information

Now you can create nagios plugins that can query ntopng periodically and implement alerting on traffic.

Below you can find an example of what a ntop-nagios plugin looks like


================================================================================

#!/bin/bash

################################################################################
# Nagios plugin to get info about a host from a terminal running ntopng        #
# ntopng (C) 2015                                                              #
################################################################################

VERSION="0.1"
AUTHOR="ntopng (C) 2015"

# Exit codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3

function print_help {
   # Print detailed help information
   echo "$AUTHOR - Get host info from ntopng instance"
   /bin/cat <<__EOT

Options:
-h
-?
   Print detailed help screen

-n HNAME
   Name of the host ntopng is running on.
-i INTEGER
   Interface to check the host on.
-H HNAME
   Name of host to get info for.
-p INTEGER
   Port ntopng is listening on the host specified with -h.
-u USER
   ntopng user for Nagios checks.
-c PASSWD
   Password for ntopng user for Nagios checks.
__EOT
}

NTOPNG_HOST=
NTOPNG_PORT=
NTOPNG_USER=
NTOPNG_PASS=
CHECK_HOST=
CHECK_INTF=

# Parse command line options
while [ "$1" ]; do
   case "$1" in
       -h | --help)
           print_help
           exit $STATE_OK
           ;;
       -H | --host)
           CHECK_HOST=$2
           shift 2
           ;;
       -i | --interface)
           CHECK_INTF=$2
           shift 2
           ;;
       -n | --ntopng)
           NTOPNG_HOST=$2
           shift 2
           ;;
       -p | --port)
           NTOPNG_PORT=$2
           shift 2
           ;;
       -u | --user)
           NTOPNG_USER=$2
           shift 2
           ;;
       -c | --password)
           NTOPNG_PASS=$2
           shift 2
           ;;
       -?)
           print_help
           exit $STATE_OK
           ;;
       *)
           echo "$0: Invalid option '$1'"
           print_help
           exit $STATE_UNKNOWN
           ;;
   esac
done

if [[ "$NTOPNG_HOST" == "" ]] || [[ "$NTOPNG_PORT" == "" ]] ||
   [[ "$NTOPNG_USER" == "" ]] || [[ "$NTOPNG_PASS" == "" ]] ||
   [[ "$CHECK_HOST" == "" ]] || [[ "$CHECK_INTF" == "" ]]; then
  echo "$0: all parameters are compulsory"
  print_help
  exit $STATE_WARNING
fi

RESULT_JSON=`curl -s -u ${NTOPNG_USER}:${NTOPNG_PASS} 'http://'${NTOPNG_HOST}':'${NTOPNG_PORT}'/lua/host_get_json.lua?ifname='${CHECK_INTF}'&host='${CHECK_HOST}`

# Handle result and return appropriate status
echo $RESULT_JSON
if [[ "$RESULT_JSON" == "" ]]; then
  exit $STATE_CRITICAL
fi

#wget --auth-no-challenge -mk --user $NTOPNG_USER --password $NTOPNG_PASS 'http://'${NTOPNG_HOST}':'${NTOPNG_PORT}'/lua/host_get_json.lua?ifname='${CHECK_INTF}'&host='${CHECK_HOST}

exit $STATE_OK

================================================================================