Basic features : Monitoring HAProxy focuses a lot on availability. As such it cares about servers state, and about reporting its own state to other network components :
Servers state is continuously monitored using per-server parameters. This ensures the path to the server is operational for regular traffic;
Health checks support two hysteresis for up and down transitions in order to protect against state flapping;
Checks can be sent to a different address/port/protocol : this makes it easy to check a single service that is considered representative of multiple ones, for example the HTTPS port for an HTTP+HTTPS server.
Servers can track other servers and go down simultaneously : this ensures that servers hosting multiple services can fail atomically and that noone will be sent to a partially failed server;
Agents may be deployed on the server to monitor load and health : a server may be interested in reporting its load, operational status, administrative status independantly from what health checks can see. By running a simple agent on the server, it's possible to consider the server's view of its own health in addition to the health checks validating the whole path;
Various check methods are available : TCP connect, HTTP request, SMTP hello, SSL hello, LDAP, SQL, Redis, send/expect scripts, all with/without SSL;
State change is notified in the logs and stats page with the failure reason (eg: the HTTP response received at the moment the failure was detected). An e-mail can also be sent to a configurable address upon such a change ;
Server state is also reported on the stats interface and can be used to take routing decisions so that traffic may be sent to different farms depending on their sizes and/or health (eg: loss of an inter-DC link);
HAProxy can use health check requests to pass information to the servers, such as their names, weight, the number of other servers in the farm etc... so that servers can adjust their response and decisions based on this knowledge (eg: postpone backups to keep more CPU available);
Servers can use health checks to report more detailed state than just on/off (eg: I would like to stop, please stop sending new visitors);
HAProxy itself can report its state to external components such as routers or other load balancers, allowing to build very complete multi-path and multi-layer infrastructures.