What is the difference between nagios xi and cacti for monitoring?
Nagios is a monitoring and alerting system, which has graphing capability (if you pay for it).
Cacti is a graphing system, which does not have alerting capabilities (at least not years ago when I used it last, and there's no mention of it on the Cacti site).
The two are related (and often paired to avoid paying for the commercial Nagios implementation), but they serve different core functions: Nagios (without graphing) looks at the Now (current condition and alarms), Cacti looks at the long-term history.
Simple: Nagios was built with alerting first. Cacti was built with graphing first.
Both have addons that will enable the functionality of the other, but it boils down to what you want. If you already have a monitoring solution, and just want performance graphs Cacti might make sense. If you want a single unified solution with an emphasis on monitoring, Nagios might make sense.
Cacti can alert based on thresholds using the thold plugin, but Nagios can do so much more (passive checks, handle flapping more gracefully, team-based alerts that are "time of day" aware, etc.) Cacti also relies on SNMP or WMI to gather what it needs. Nagios can do SSH, WMI, SNMP, and it also has agents for Windows that can do some pretty powerful stuff compared to Cacti.
Not bashing Cacti (I've deployed it before), but I prefer alerting to be the focus of my unified alerting/graphing solution.