To export data aggregated by flow-capture to Postgresql, similar table structure must be created:
After this, flow-capture must be launched as following:
#file: /etc/flow-tools/flow-capture.conf -w /var/flowdata -n 95 -N 3 -R /usr/local/bin/flowdata-export.sh 0/0/555
This means that it will run /usr/local/bin/flowdata-export.sh script every time it rotates its log file. With the first argument as the flow file name after rotating. Here's is the simple script:
#!/bin/sh
LOGS=/var/flowdata
DB=dbuser:dbpass:dbhost:dbport:dbname:dbtable
if [ $# -lt 1 ]; then
echo "USE: $0 <filename>"
exit
fi
flow-export -f 5 -m UNIX_SECS,DOCTETS,SRCADDR,DSTADDR,SRCPORT,DSTPORT,PROT -u $DB < $LOGS/$1
There can be a lot of data in db, and it could be wise to split it into smaller chunks. This can be done using postgresql table partitioning. Here's how we can improve our database/table setup:
After this, there will be a dedicated table for every month. Data can be insterted into flowdata table as before (as well as selected), though in fact it will reside in its corresponding table. Such structure is good for keeping logs for the last year. All we need to do is to flush current month table every first day of the month. Thus we'll always have data for the last 12 monthes.