Nagios is ugly and dated. The problem I have is that nagios checks services and does alerting, and cacti checks services and graphs the results. If I want to graph results and be alerted as well, I need to install, configure and maintain two separate pieces of software? Fortunately cacti, when patched to have a plugin architecture, has a plugin that can alert when a threshold is breached, but it is nowhere near as flexible as nagios.
Ideally there would be one separate, modular system for collecting data and nagios, cacti, etc would all use that.
Myself I use nagios, but I don't do any graphing, i've set up a couple of nice templates making it easy to add and remove services and computers, and I get SMS alerts when things go down. When we get more traffic I think I will look more into munin.
There are also addons for graphing the data from nagios: nagiosgraph, nagiosgrapher, etc.
On the other hand, if you're looking for something less ugly / dated from the architecture point of view, maybe you'll like http://www.shinken-monitoring.org/ ; I never actually got around to deploying it, but the docs look quite good (and it is nagios-compatible, so theoretically there's an easy upgrade path).
Nagios is very powerful and capable of doing almost anything that you want, but it is an eff-in' nightmare to configure and almost impossible to quickly add and remove things that you want to monitor. If your answer to my request to add a new monitor is "well, just open up the configuration file..." you've lost me already.
You might want to try Icinga (http://www.icinga.org) instead (no idea how to pronounce it though). It's a fork of Nagios that is supposed to solve some of the issues that supposedly surround Nagios. Haven't used it myself yet though...
Ideally there would be one separate, modular system for collecting data and nagios, cacti, etc would all use that.