Monit/CollectD - Best Approach?

We use Ansible to install/configure Postgres, Memcached, Redis, Nginx and a bunch of other services.

Now we want to use Ansible to setup monitoring (Monit) and metrics collection (CollectD).

Monit and CollectD each use ‘service plugins’. Plugin configuration can all reside in a single config file, or broken into a master config with separate include files for each plugin. We could setup monitoring/metrics to operate from a single role, or use separate roles for Monit and CollectD, or embed monitoring/metrics as tasks in each service role. As we update configurations, we need to account for install dependencies and service restarts.

Does Ansible have a built-in solution for these type of cross-cutting services? Where can I find examples that show best practice for configuring tools like Monit and CollectD?

We're rolling this out now - way I've done it is to make a collectd
role that does universal
checks (CPU, memory etc) and enables the include directory. That roles
defaults/main.yml
also defines things like the path to the include directory,
handlers/main.yml defines a 'bounce collectd'
handler and so on.

Then roles that have collectd plugins they want to use define the
collectd role as a dependency
and template an include file into the right place, notifying the
collectd roles handler as that changes.