Q:

What monitoring solution for servers, databases and web applications ? Nagios or Hyperic?

For the purpose of a startup, I have a loan for one physical dedicated server with several virtual machines inside it 
For now there is mainly 2 VM on this server:
VM "tools", using ubuntu server 10.04 LTS

A source code repository using
mercurial and hgserve
A bunch of
JAVA app for Atlasian for bug
tracking, wiki...
PostgreSQL as the Database for the
tools
Apache HTTPD as HTTPS front end.

VM "asterisk", using ubuntu server 10.04 LTS

with an asterisk server, functionnal,
but more for testing as of now than
anything.

But in the future we will have a "production" VM with ou JAVA application :

Apache HTTPD frontend 
PostgreSQL database
Tomcat webapp (maybe cluterised)

What I'am interrested into is a software that can monitor availability of services, KVM VM, applications and database so I can react in case of problem.
I have also another use case where I'd like to monitor the performance of the application (request, CPU, memory...) and gather usage statistics.
We have basically no money, and want a free tool, at least at first. 
What would be easy and simple tool for the job ? I have heard of Nagios and Hyperic but I don't know them. So I don't know if they are suited for our needs.
EDIT :
The need is not only for server monitoring but also as a way to investigate actual application perfornance, responsiveness and if possible isolate bottlenecks.
From the links (not the same question as it seem more generic but quite informative) and the actual responses, Nagios + Munin should be a good fit. Problem is Nagios seems a little complex (I don't know for Munin).
Will the Nagios/Munin combo will be able to gather detailled statistics and historical data for a java application (request/seconds, request latency, both with statistics by URL, hour, day, week... ?)
Are there other (better ?) alternatives ?

A:

Nagios.  I was scared of the text configuration for a long time and tried all the other popular or remotely popular solutions out there, but was never satisfied.  Once I eventually tried nagios and actually went through the configuration - I loved it, and actually find it much easier to configure and customize than gui tools like Zenoss.
While I have not done this yet, you could combine this with Monit to automatically try to recover from problems, and with Munin to collect historical data.
Edit:
Documentation for setting up Nagios and for Munin.  It's Ubuntu specific, but I actually followed this to configure Nagios on Red Hat.

