Skip to content

Instantly share code, notes, and snippets.

@lfdominguez
Last active June 28, 2023 14:15
Show Gist options
  • Save lfdominguez/08de623d9f9c0fa84e6b4d5d0d25025c to your computer and use it in GitHub Desktop.
Save lfdominguez/08de623d9f9c0fa84e6b4d5d0d25025c to your computer and use it in GitHub Desktop.
Send traffics stats by ip from pfsense to influxdb
#!/bin/sh
#
# Author: Luis Felipe Domínguez Vega <[email protected]>
#
# Program to use with the rate software to send to InfluxDB the
# rate of each IP on interface
#
# rate_to_influx <influxdb_url> <influxdb_database> <local_network> <interface>
# rate_to_influx http://127.0.0.1:8086 network 192.168.0.0/24 re1
#- - - - - - - - - - - - - - - - - - -
# rate -i re1 -r 1 -e -nl -Ab -a 255 -c 192.168.0.0/24 -d
#
#192.168.0.40: 0:1424 :0:1424: 0:1: 0:1
#
logger "$0 [I] Started rate estimator"
URL="$1/write?db=$2&precision=s"
DATA_INFLUX=""
PROGRAM='
{
base_1="network_metric,host="
base_2=",direction="
base_3="byte_rate="
split($0, data, ":")
print base_1 data[1] base_2 "download " base_3 data[4] " " ts
print base_1 data[1] base_2 "upload " base_3 data[5] " " ts
printf " "
}
'
FLAG_TS=1
rate -i $4 -r 1 -e -nl -Ab -a 255 -c $3 -d | while read -r line; do
FIRST_LINE=`echo $line | head -c 1`
if [ x"$FIRST_LINE" == x"-" ]; then
curl -i -s -k -o /dev/null -XPOST "$URL" --data-binary "$DATA_INFLUX" || {
logger "$0 [W] Can't write to InfluxDB Database"
}
DATA_INFLUX=""
FLAG_TS=1
fi
if [ $FLAG_TS -eq 1 ]; then
TS=`date +%s`
FLAG_TS=0
fi
DATA_FROM_RATE=`echo "$line" | awk -v ts="$TS" "$PROGRAM"`
DATA_INFLUX="$DATA_INFLUX$DATA_FROM_RATE"
done
@benisai
Copy link

benisai commented Oct 8, 2021

How do you implement this? Can someone help me out?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment