Skip to content

Instantly share code, notes, and snippets.

@lfdominguez
Last active June 28, 2023 14:15
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • 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 <ldominguezvega@gmail.com>
#
# 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
@crawc
Copy link

crawc commented Feb 19, 2021

I added an else to your if statement so that the dashed lines, "- - - - - - - - - - - - - - - - - - -", wouldn't get posted to InfluxDB.

https://gist.github.com/crawc/1669f655a0472e76723d9fd631c9cd75

@crawc
Copy link

crawc commented Feb 19, 2021

Would anyone happen to have a Grafana dashboard for this data?

@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