The kernel does keep track of the number of bytes sent (TX) and received (RX) for each and every network interface, and they are trivially accessible via the
ifconfig command. You could easily set up a script in
cron which regularly saves the current counts; the amount of data transferred in an interval is then just the difference between the counts at the ends of the interval. The counts do reset to zero whenever the interface is brought down, so you'd also need to modify the
ifdown scripts to mark the last count and note the reset in the transfer logs.
While this is really this simple, I haven't seen any packages geared towards monitoring accumulated transfer counts; everything seems to be more geared towards bandwidth monitoring.
However, allend is absolutely right: It's the ISP's count of your usage that matters, not yours. Not all of your traffic is counted against your limits.
Your ISP should have set up a page where your transfer statistics are visible. If you don't want to keep a tab open to that page, or to load it every now and then, you could cobble together a
wget script to download that page and then pick out the numbers via an awk, bash, perl, php, python or sed script.
If you need help with the scripting, open up a new question in the programming section.
Cheers,
Nominal Animal