The simplest solution I found over all those years for charting of resource usage and monitoring was munin and mon. While the first excels in graphing usage over days, weeks, and years, the latter excels in very flexible monitoring, tracking failures (and recoveries), and sending out notification. Both can be easily extended using shell scripts or other programs to chart and monitor virtually any aspect of your systems.
They are somewhat old-school tools that do not provide any point-and-click-y interfaces. In other words, you must be comfortable setting things up by editing text files with vi(1) (or your favourite editor). On the other side, they are very lightweight and consume a lot less resources than
bloated full-fledged tools like Nagios. Being simpler tools, installation and configuration can be done a lot quicker also.
One important thing to notice is that munin can be used to monitor the resources it charts, and send out notifications if values go out of configured ranges. Notification is done by running an external script, so you can plug in your own notification system (by default it just spit out emails). It is a lot less flexible that mon because (IIRC) you can setup just one notification channel for all your monitored resources. This contrasts with mon that allows you to create unlimited (resource, time-of-day, channel) tuples. But if your notification needs are not very sophisticated, then using munin may be all that you need.
Last but not least, these tools are all available on Debian systems, so just apt-get install them and you're almost all set:
$ apt-get install mon
$ apt-get install munin # On your munin server
$ ssh monitored1.example.com apt-get install munin-node
$ ssh monitored2.example.com apt-get install munin-node