From 72a0f1183f825aeb161edab6c6f41bd3e297226d Mon Sep 17 00:00:00 2001 From: Adam Wujek <adam.wujek@cern.ch> Date: Wed, 20 Jul 2016 13:42:34 +0200 Subject: [PATCH] serspace/host_tools: add snmp_graph.sh Add a script to gather data via SNMP in the given interval, store it a file and draw a graph. Example use: ./snmp_graph.sh -f oids_temp_ip.txt --ip 192.168.1.10 ./snmp_graph.sh -f oids_temp.txt --ip 192.168.1.12 --mibs-path "/var/lib/mibs/ietf:../snmpd" --mibs-load WR-SWITCH-MIB" Signed-off-by: Adam Wujek <adam.wujek@cern.ch> --- userspace/host_tools/.gitignore | 3 + userspace/host_tools/oids_temp.txt | 4 + userspace/host_tools/oids_temp_ip.txt | 8 ++ userspace/host_tools/snmp_graph.sh | 158 ++++++++++++++++++++++++++ 4 files changed, 173 insertions(+) create mode 100644 userspace/host_tools/.gitignore create mode 100644 userspace/host_tools/oids_temp.txt create mode 100644 userspace/host_tools/oids_temp_ip.txt create mode 100755 userspace/host_tools/snmp_graph.sh diff --git a/userspace/host_tools/.gitignore b/userspace/host_tools/.gitignore new file mode 100644 index 000000000..691f7ee17 --- /dev/null +++ b/userspace/host_tools/.gitignore @@ -0,0 +1,3 @@ +looper +oids_*.data +oids_*.txt diff --git a/userspace/host_tools/oids_temp.txt b/userspace/host_tools/oids_temp.txt new file mode 100644 index 000000000..95b0834de --- /dev/null +++ b/userspace/host_tools/oids_temp.txt @@ -0,0 +1,4 @@ +WR-SWITCH-MIB::wrsTempFPGA.0 +WR-SWITCH-MIB::wrsTempPLL.0 +WR-SWITCH-MIB::wrsTempPSL.0 +WR-SWITCH-MIB::wrsTempPSR.0 diff --git a/userspace/host_tools/oids_temp_ip.txt b/userspace/host_tools/oids_temp_ip.txt new file mode 100644 index 000000000..b46861709 --- /dev/null +++ b/userspace/host_tools/oids_temp_ip.txt @@ -0,0 +1,8 @@ +192.168.1.10|WR-SWITCH-MIB::wrsTempFPGA.0 +192.168.1.10|WR-SWITCH-MIB::wrsTempPLL.0 +192.168.1.10|WR-SWITCH-MIB::wrsTempPSL.0 +192.168.1.10|WR-SWITCH-MIB::wrsTempPSR.0 +192.168.1.12|WR-SWITCH-MIB::wrsTempFPGA.0 +192.168.1.12|WR-SWITCH-MIB::wrsTempPLL.0 +192.168.1.12|WR-SWITCH-MIB::wrsTempPSL.0 +192.168.1.12|WR-SWITCH-MIB::wrsTempPSR.0 diff --git a/userspace/host_tools/snmp_graph.sh b/userspace/host_tools/snmp_graph.sh new file mode 100755 index 000000000..5dd590549 --- /dev/null +++ b/userspace/host_tools/snmp_graph.sh @@ -0,0 +1,158 @@ +#!/bin/bash + +function print_help { + echo "Script to retrieve data via SNMP and plot it using $PLOT_PROG" + echo "Usage:" + echo "$0 -f <file> --ip <ip_addr> [-c] [-h] [--help] [--no-plot] [-i <interval>] [--mibs-load <MIB1:MIB2:..>] [--mibs-path <PATH1:PATH2>]" + echo "Where:" + echo " -f <file> load OIDs from the given file (one OID per" + echo " line or IP|OID per line)" + echo " --ip <ip_addr> retrieve data from the host with the provided" + echo " IP address; this IP will be used if IP is not" + echo " specified in the file with OIDs" + echo " -c don't remove previous data" + echo " -h | --help print this help" + echo " --no-plot don't plot data, only save it to the file" + echo " -i <interval> interval of data retrieves" + echo " --mibs-load <MIB1:MIB2:..> load the given MIBs (colon separated list)" + echo " --mibs-path <PATH1:PATH2> load MIBs from the given paths (colon" + echo " separated list)" + echo "" + echo "Example:" + echo "$0 -f oids_temp.txt --ip 192.168.1.12" + echo "$0 -f oids_temp.txt --ip 192.168.1.12 --mibs-path \"/var/lib/mibs/ietf:../snmpd\" --mibs-load WR-SWITCH-MIB" +} + +PLOT_PROG=gnuplot +SNMP_PROG=snmpget +GNUPLOT_SCRIPT=looper + +while [ ! -z "$1" ]; do + if [ "$1" == "-h" ] || [ "$1" == "--help" ] ; then + print_help + exit 1 + fi + # keep previous data + if [ "$1" == "-c" ] ; then + keep_data=1 + fi + # file with oids + if [ "$1" == "-f" ] ; then + OID_FILE="$2" + shift + fi + # IP address of a target + if [ "$1" == "--ip" ] ; then + HOST_IP="$2" + shift + fi + # interval of data read/get + if [ "$1" == "-i" ] ; then + SNMP_INTEVAL="$2" + shift + fi + # MIBs to be loaded + if [ "$1" == "--mibs-load" ] ; then + MIBS_LOAD="$2" + shift + fi + # path to MIBs + if [ "$1" == "--mibs-path" ] ; then + MIBS_PATH="$2" + shift + fi + # don't plot date + if [ "$1" == "--no-plot" ] ; then + no_plot=1 + fi + + shift +done + +if [ -z "$OID_FILE" ]; then + echo "No file with OIDs!" + exit 1 +fi + +if [ -z "$HOST_IP" ]; then + echo "No target IP address defined!" + exit 1 +fi + +if [ -z "$SNMP_INTEVAL" ]; then + # use default interval + SNMP_INTEVAL=5 +fi + +if [ -z "$MIBS_LOAD" ]; then + # use all mibs by default + MIBS_LOAD="all" +fi + +if [ ! -z "$MIBS_PATH" ]; then + # use default paths to MIBs + MIBS_PATH="-M $MIBS_PATH" +fi + +DATA_FILE="${OID_FILE%.*}.data" +SNMP_CMD="$SNMP_PROG -c public -v 2c -m $MIBS_LOAD $MIBS_PATH -Ov -Ot -Oq" + +command -v $SNMP_PROG &> /dev/null +if [ $? -ne 0 ]; then + echo "Program $SNMP_PROG for getting the data via SNMP not found" + exit 1 +fi + +if [ -z $keep_data ]; then + echo "Remove previous data" + rm -f "$DATA_FILE" +fi + +oid_count=0 +for oid in `cat $OID_FILE`; do + echo -n "$oid " >> $DATA_FILE + ((oid_count++)) +done +echo "" >> "$DATA_FILE" + +if [ -z $no_plot ]; then + + command -v $PLOT_PROG &> /dev/null + if [ $? -ne 0 ]; then + echo "Program $PLOT_PROG for plotting graphs not found" + exit 1 + fi + i=2 + # generate gnuplot's script + echo -n "plot '$DATA_FILE' using 0:1" > "$GNUPLOT_SCRIPT" + while ((i<=oid_count)); do + echo -n ", '' using 0:$i" >> "$GNUPLOT_SCRIPT" + ((i++)) + done + echo "" >> "$GNUPLOT_SCRIPT" + echo "pause $SNMP_INTEVAL" >> "$GNUPLOT_SCRIPT" + echo "reread" >> "$GNUPLOT_SCRIPT" + + { sleep 1; \ + gnuplot -e "set key above; \ + set key autotitle columnheader; \ + set style data lines; \ + load 'looper'";\ + } & +fi + +while true; do + for oid in `cat $OID_FILE`; do + IP="$HOST_IP" + # check if file contains IP|OID or just OISs + IFS='|' read -ra touple <<< "$oid" + if [ ! -z ${touple[1]} ]; then + IP=${touple[0]} + oid=${touple[1]} + fi + $SNMP_CMD "$IP" "$oid" | tr -d '\n' >> "$DATA_FILE" + echo -n " " >> "$DATA_FILE" + done + echo "" >> "$DATA_FILE" + sleep "$SNMP_INTEVAL" +done -- GitLab