Break MonitoringEngine into smaller pluggable components. Each smaller component would represent a specific section of functionality. Different implementations could then provide different types of behaviour. All components would be configurable through the MonitoringEngineManager, which could provide default implementations for each component.
EDIT: While this jira seems like a bigger issue, the first step of breaking up the MonitoringEngine was done by introducing an InheritableStrategy. This controls how inheritable attributes are passed as well as other actions specific to CompositeMonitors.