diff --git a/software/slapos-master/instance-balancer.cfg.in b/software/slapos-master/instance-balancer.cfg.in
index 2812730870ed7ac41cff456f093a081a95715663..f932a5c1a4492dd9a1b1586b78c2787733d613a4 100644
--- a/software/slapos-master/instance-balancer.cfg.in
+++ b/software/slapos-master/instance-balancer.cfg.in
@@ -16,6 +16,10 @@ per partition. No more (undefined result), no less (IndexError).
 {%   set ipv6 = (ipv6_set | list)[0] -%}
 {%   do apache_ip_list.append('[' ~ ipv6 ~ ']') -%}
 {% endif -%}
+{% set monitor = slapparameter_dict['monitor']  -%}
+{% if monitor -%}
+{% set monitor_port = slapparameter_dict['monitor-port'] %}
+{% endif -%}
 
 {% if use_ipv6 -%}
 [zope-tunnel-base]
@@ -149,6 +153,9 @@ recipe = slapos.cookbook:publish.serialised
 {{   family_name ~ '-v6' }} = {% if ipv6_set %}{{ scheme ~ '://[' ~ ipv6 ~ ']:' ~ apache_port }}{% endif %}
 {{   family_name }} = {{ scheme ~ '://' ~ ipv4 ~ ':' ~ apache_port }}
 {% endfor -%}
+{% if monitor -%}
+monitor-url = ${monitor-parameters:url}
+{% endif -%}
 
 [apache-ssl]
 recipe = plone.recipe.command
@@ -156,10 +163,12 @@ command = "{{ parameter_dict['openssl'] }}/bin/openssl" req -newkey rsa -batch -
 key = ${apache-conf-ssl:key}
 cert = ${apache-conf-ssl:cert}
 
+{% set apache_service_log_list = {} -%}
 {% for family_name, (_, _, _, authentication) in apache_dict.items() -%}
 {%   if authentication -%}
 {%     set base_name = 'apache-' ~ family_name -%}
 {%     do part_list.append('logrotate-' ~ base_name) -%}
+{%     do apache_service_log_list.__setitem__(family_name, base_name) -%}
 [logrotate-{{ base_name }}]
 recipe = slapos.cookbook:logrotate.d
 logrotate-entries = ${logrotate:logrotate-entries}
@@ -178,6 +187,69 @@ name = apache
 log = ${apache-conf-parameter-dict:error-log} ${apache-conf-parameter-dict:access-log}
 post = {{ parameter_dict['bin-directory'] }}/slapos-kill --pidfile ${apache-conf-parameter-dict:pid-file} -s USR1
 
+{% if monitor -%}
+[{{ section('monitor-current-log-access') }}]
+< = monitor-directory-access
+source = ${directory:log}
+
+[{{ section('monitor-backup-log-access') }}]
+< = monitor-directory-access
+source = ${logrotate:backup}
+
+[{{ section('monitor-apachedex-access') }}]
+< = monitor-directory-access
+source = ${monitor-directory:apachedex-result}
+
+[monitor-parameters]
+port = {{ slapparameter_dict['monitor-port'] }}
+
+[apachedex-erp5-entries]
+<= apachedex-entries-base
+script-name = apachedex-erp5
+extra-context =
+  section parameter_dict apachedex-erp5-parameters
+  key name :script-name
+
+# XXX - Hard coded values for slapos and vifib.
+[apachedex-erp5-parameters]
+apache-log-list = ${logrotate:backup}/apache-access.log-%(date)s.gz
+base-list = 
+  '+slapos.vifib.com' '/VirtualHostBase/https/slapos\.vifib\.com:443/erp5/web_site_module/commercial/VirtualHostRoot(/|$|\?)'
+  '+www.slapos.org' '/VirtualHostBase/https/www\.slapos\.org:443/erp5/web_site_module/hosting/VirtualHostRoot(/|$|\?)'
+erp5-base-list = 
+  '+vifib.erp5.net' '/VirtualHostBase/https/vifib\.erp5\.net:443/erp5/VirtualHostRoot(/|$|\?)'
+skip-base-list = 
+
+[{{ section('cron-entry-apachedex-erp5') }}]
+<= cron
+recipe = slapos.cookbook:cron.d
+name = ${apachedex-erp5-entries:script-name}
+frequency = 0 3 * * *
+command = ${apachedex-erp5-entries:rendered}
+
+{%   for family_name, log_name in apache_service_log_list.items() -%}
+[apachedex-{{ family_name }}-entries]
+<= apachedex-entries-base
+script-name = apachedex-{{ family_name }}
+extra-context =
+  section parameter_dict apachedex-{{ family_name }}-parameters
+  key name :script-name
+
+[apachedex-{{ family_name }}-parameters]
+apache-log-list = ${logrotate:backup}/{{ log_name }}-access.log-%(date)s.gz
+base-list = 
+erp5-base-list = 
+skip-base-list = 
+  
+[{{ section('cron-entry-apachedex-' ~ family_name) }}]
+<= cron
+recipe = slapos.cookbook:cron.d
+name = apachedex-{{ family_name }}
+frequency = 0 3 * * *
+command = ${apachedex-{{ family_name }}-entries:rendered}
+{%   endfor -%}
+{% endif -%}
+
 [directory]
 recipe = slapos.cookbook:mkdirectory
 apache-conf = ${:etc}/apache
@@ -191,7 +263,25 @@ log = ${:var}/log
 
 [buildout]
 extends = {{ logrotate_cfg }}
+{% if monitor -%}
+# Extends template for monitor
+  {{ parameter_dict['template-monitor'] }}
+{% endif -%}
 parts +=
   publish
   logrotate-apache
+{% if monitor -%}
+# Access to zope logs
+  certificate-authority
+  cron-entry-monitor
+  cron-entry-rss
+  deploy-index
+  setup-static-files
+  public-symlink
+  cgi-httpd-wrapper
+  cgi-httpd-graceful-wrapper
+  monitor-promise
+  monitor-instance-log-access
+{% endif -%}
+# Complete parts with sections
   {{ part_list | join('\n  ') }}
diff --git a/software/slapos-master/instance-erp5.cfg.in b/software/slapos-master/instance-erp5.cfg.in
index 932d9ff8d5bae8c02e0ac0cd5f547d06e4ed55a6..444a5ad84b537bb2dfec4ee906bc1fb6a91fdd04 100644
--- a/software/slapos-master/instance-erp5.cfg.in
+++ b/software/slapos-master/instance-erp5.cfg.in
@@ -7,9 +7,10 @@
 {% set mariadb_request_dict = {'tcpv4-port': mariadb_dict.get('tcpv4-port', 2099)} -%}
 {% set monitor_dict = slapparameter_dict.get('monitor', {}) %}
 {% set monitor_port = monitor_dict.get('port-base', 2600) %}
-{% set monitor_count = 1 -%}
 {% if mariadb_dict.get('monitor', False) -%}
 {%   do mariadb_request_dict.__setitem__('monitor-port', mariadb_dict.get('monitor-port', monitor_port)) -%}
+{% set monitor_count = 2 -%}
+{% set monitor_port_balancer = monitor_port + 1 -%}
 {% endif -%}
 
 [request-common]
@@ -176,6 +177,8 @@ config-{{ name }} = {{ ' ${' ~ zope_section_id ~ ':connection-zope-address-list}
 config-haproxy-server-check-path = {{ dumps(balancer_dict.get('haproxy-server-check-path', '/') % {'site-id': site_id}) }}
 config-ssl = {{ dumps(balancer_dict.get('ssl', {})) }}
 config-certificate-authority-path = ${directory:ca-dir}
+config-monitor = {{ dumps(slapparameter_dict.get('monitoring', True)) }}
+config-monitor-port = {{ monitor_port_balancer }}
 
 [request-frontend-base]
 {% if has_frontend -%}
diff --git a/software/slapos-master/software.cfg b/software/slapos-master/software.cfg
index 4532cd64744301a27ce743a65dc5a8baa5053ebf..bf29310285498637c05b8d101348410ff7752bae 100644
--- a/software/slapos-master/software.cfg
+++ b/software/slapos-master/software.cfg
@@ -72,12 +72,12 @@ mode = 644
 [template-erp5]
 < = download-base-part
 filename = instance-erp5.cfg.in
-md5sum = 00c64cb7381892784da468b6ef43b99f
+md5sum = f4fe085a0d1f09718a9456df2af8ff79
 
 [template-balancer]
 < = download-base-part
 filename = instance-balancer.cfg.in
-md5sum = 2a8d46a2b1b8c2aae12e134cbcafa266
+md5sum = 79e8f14058ca774c702ac155b3d67820
 
 [template-zope]
 < = download-base-part
diff --git a/stack/erp5/buildout.cfg b/stack/erp5/buildout.cfg
index 67ac48afc97c020cb9491f04ba691f95c7c2816e..1c35b31cf112a954d02da74d519918eb6cb99763 100644
--- a/stack/erp5/buildout.cfg
+++ b/stack/erp5/buildout.cfg
@@ -224,7 +224,7 @@ md5sum = e40e2e39f4941c6372f4357e8589a5cf
 # XXX: "template.cfg" is hardcoded in instanciation recipe
 filename = template.cfg
 template = ${:_profile_base_location_}/instance.cfg.in
-md5sum = 96fd81c0e3cb1d8f9afacab8bd719a0e
+md5sum = cc41beed33e2ad25610e782618e8eef2
 extra-context =
     key mariadb_link_binary template-mariadb:link-binary
     key zope_link_binary template-zope:link-binary
diff --git a/stack/erp5/instance.cfg.in b/stack/erp5/instance.cfg.in
index efff0ac2c407206f8674b28d5ed8a7236631df9f..24bede440e95493f4342df070b52f384c98d129c 100644
--- a/stack/erp5/instance.cfg.in
+++ b/stack/erp5/instance.cfg.in
@@ -83,6 +83,7 @@ bin-directory = {{ bin_directory }}
 dash = {{ dash_location }}
 template-haproxy-cfg = {{ template_haproxy_cfg }}
 template-apache-conf = {{ template_apache_conf }}
+template-monitor = {{ template_monitor }}
 
 [dynamic-template-balancer]
 < = jinja2-template-base