With Windows Azure, there's not much you can do except periodic examination of your online bill (which is approx. 4 hours behind realtime). You could, in theory, sift through your trace logs, performing rough calculations based on when instances start and
stop. You'll need to account for the 1-hour measurement increment, as well as bandwidth consumed (and you could look at IIS/ASP.NET counters for that). Even doing all this will only yield an approximation, nothing exact.
With SQL Azure, at least you could write a worker role process to periodically check capacity and report when you're within a certain percentage of consumed space. For instance, this example is from the
SQL Azure Dynamic Management Views MSDN page:
SELECT SUM(reserved_page_count)*8.0/1024
FROM sys.dm_db_partition_stats;
You could then send yourself email alerts, or even adjust your database edition and maxsize up/down as needed. For instance, here's an example of changing a Web edition database max size from 1GB to 5GB:
ALTER DATABASE mydb MODIFY (EDITION='WEB', MAXSIZE=5GB)
I realize this doesn't solve your problem regarding overal monthly cost, or anything related to roles and instances, but at least it's one piece of Azure that can be programmatically measured and managed.