]> git.openstreetmap.org Git - chef.git/blobdiff - cookbooks/munin/templates/default/munin.conf.erb
Add tests for munin::server recipe
[chef.git] / cookbooks / munin / templates / default / munin.conf.erb
index 82ffb6dab64a77502c85551974544d32a4af72b9..ec443ed742cfd7434edd8d1b4ece94d775497ca5 100644 (file)
@@ -1,8 +1,24 @@
 # DO NOT EDIT - This file is being maintained by Chef
 
+# Set maximum number of update processes to run at once
+max_processes 64
+
+# Maximum number of graphs to generate at once
+max_graph_jobs 24
+max_cgi_graph_jobs 24
+
+# Render pages and graphs on demand
+html_strategy cgi
+graph_strategy cgi
+
+# Use rrdcached
+rrdcached_socket /var/run/rrdcached.sock
+
 # Configure alert targets
-contact.admins.command mail -s "Munin Notification" admins@openstreetmap.org
+contact.admins.command mail -s "Munin Notification for ${var:host}" admins@openstreetmap.org
+contact.admins.always_send invalid
 contact.null.command cat > /dev/null
+contact.null.always_send invalid
 
 # Send alerts to the admins by default
 contacts admins
@@ -17,10 +33,12 @@ unknown_limit 144
     update no
 <% end -%>
 <% if client[:networking][:roles][:external][:zone] == "ucl" -%>
-    address <%= client.internal_ipaddress %>
+    address <%= client.internal_ipaddress || client.external_ipaddress %>
 <% elsif client[:networking][:roles][:external][:zone] == "ic" -%>
     address <%= client.internal_ipaddress || client.external_ipaddress %>
-<% else -%>
+<% elsif client[:networking][:roles][:external][:zone] == "bm" -%>
+    address <%= client.internal_ipaddress || client.external_ipaddress %>
+<% elsif client.external_ipaddress -%>
     address <%= client.external_ipaddress %>
 <% end -%>
     use_node_name yes
@@ -31,6 +49,12 @@ unknown_limit 144
 <% if client[:munin][:plugins][plugin][value][:graph] -%>
     <%= plugin %>.<%= value %>.graph <%= client[:munin][:plugins][plugin][value][:graph] %>
 <% end -%>
+<% if client[:munin][:plugins][plugin][value][:draw] -%>
+    <%= plugin %>.<%= value %>.draw <%= client[:munin][:plugins][plugin][value][:draw] %>
+<% end -%>
+<% if client[:munin][:plugins][plugin][value][:label] -%>
+    <%= plugin %>.<%= value %>.label <%= client[:munin][:plugins][plugin][value][:label] %>
+<% end -%>
 <% if client[:munin][:plugins][plugin][value][:warning] -%>
     <%= plugin %>.<%= value %>.warning <%= client[:munin][:plugins][plugin][value][:warning] %>
 <% end -%>
@@ -65,6 +89,7 @@ unknown_limit 144
 <% end -%>
 <% end -%>
 <% end -%>
+<% unless @frontends.empty? && @backends.empty? -%>
 
 # Configure compound graphs for www.openstreetmap.org
 [www.openstreetmap]
@@ -72,16 +97,21 @@ unknown_limit 144
     apache_accesses.graph_title Apache accesses
     apache_accesses.graph_vlabel accesses / ${graph_period}
     apache_accesses.graph_category apache
+    apache_accesses.graph_args --lower-limit 0
     apache_accesses.accesses80.sum <%= Chef::Munin.expand "%%.openstreetmap:apache_accesses.accesses80", @frontends %>
     apache_accesses.accesses80.label port 80
+    apache_accesses.accesses80.min 0
     apache_volume.graph_title Apache volume
     apache_volume.graph_vlabel bytes per ${graph_period}
     apache_volume.graph_category apache
+    apache_volume.graph_args --lower-limit 0
     apache_volume.volume80.sum <%= Chef::Munin.expand "%%.openstreetmap:apache_volume.volume80", @frontends %>
     apache_volume.volume80.label port 80
+    apache_volume.volume80.min 0
     if_eth0.graph_title eth0 traffic
     if_eth0.graph_vlabel bits in (-) / out (+) per ${graph_period}
     if_eth0.graph_category network
+    if_eth0.graph_order down up
     if_eth0.down.sum <%= Chef::Munin.expand "%%.openstreetmap:if_eth0.down", @frontends %>
     if_eth0.down.label received
     if_eth0.down.cdef down,8,*
@@ -91,6 +121,7 @@ unknown_limit 144
     if_eth1.graph_title eth1 traffic
     if_eth1.graph_vlabel bits in (-) / out (+) per ${graph_period}
     if_eth1.graph_category network
+    if_eth1.graph_order down up
     if_eth1.down.sum <%= Chef::Munin.expand "%%.openstreetmap:if_eth1.down", @frontends %>
     if_eth1.down.label received
     if_eth1.down.cdef down,8,*
@@ -100,25 +131,46 @@ unknown_limit 144
     api_calls_www.graph_title Active requests
     api_calls_www.graph_vlabel Number of requests
     api_calls_www.graph_category api
-    api_calls_www.web.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%.web", @frontends %>
+    api_calls_www.graph_order map upload amf history full trkpts web other
+    api_calls_www.web.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%%.web", @frontends %>
     api_calls_www.web.label Web site traffic
-    api_calls_www.upload.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%.upload", @frontends %>
+    api_calls_www.upload.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%%.upload", @frontends %>
     api_calls_www.upload.label Changeset diff uploads
-    api_calls_www.other.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%.other", @frontends %>
+    api_calls_www.other.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%%.other", @frontends %>
     api_calls_www.other.label Other API calls
-    api_calls_www.amf.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%.amf", @frontends %>
+    api_calls_www.amf.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%%.amf", @frontends %>
     api_calls_www.amf.label AMF API calls
-    api_calls_www.history.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%.history", @frontends %>
+    api_calls_www.history.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%%.history", @frontends %>
     api_calls_www.history.label Element history fetches
-    api_calls_www.full.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%.full", @frontends %>
+    api_calls_www.full.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%%.full", @frontends %>
     api_calls_www.full.label Full element fetches
-    api_calls_www.map.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%.map", @frontends %>
+    api_calls_www.map.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%%.map", @frontends %>
     api_calls_www.map.label Map API calls
-    api_calls_www.trkpts.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%.trkpts", @frontends %>
+    api_calls_www.trkpts.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_%%%.trkpts", @frontends %>
     api_calls_www.trkpts.label GPX trackpoints calls
+    api_calls_error.graph_title HTTP errors
+    api_calls_error.graph_vlabel Number of errors per ${graph_period}
+    api_calls_error.graph_category api
+    api_calls_error.graph_order http401 http500 http502 http503 http509
+    api_calls_error.http401.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_status.http401", @frontends %>
+    api_calls_error.http401.label 401 Unauthorized
+    api_calls_error.http401.warning :0.5
+    api_calls_error.http500.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_status.http500", @frontends %>
+    api_calls_error.http500.label 500 Internal Server Error
+    api_calls_error.http500.warning :0.5
+    api_calls_error.http502.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_status.http502", @frontends %>
+    api_calls_error.http502.label 502 Bad Gateway
+    api_calls_error.http502.warning :0.5
+    api_calls_error.http503.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_status.http503", @frontends %>
+    api_calls_error.http503.label 503 Service Unavailable
+    api_calls_error.http503.warning :0.5
+    api_calls_error.http509.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_status.http509", @frontends %>
+    api_calls_error.http509.label 509 Bandwidth Limit Exceeded 
+    api_calls_error.http509.warning :5
     api_calls_num.graph_title Requests processed
-    api_calls_num.graph_vlabel Number of requests per minute
+    api_calls_num.graph_vlabel Number of requests per ${graph_period}
     api_calls_num.graph_category api
+    api_calls_num.graph_order map upload amf history full trkpts web other
     api_calls_num.web.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_num.web", @frontends %>
     api_calls_num.web.label Web site traffic
     api_calls_num.upload.sum <%= Chef::Munin.expand "%%.openstreetmap:api_calls_num.upload", @frontends %>
@@ -138,94 +190,111 @@ unknown_limit 144
     api_waits_www.graph_title Wait times for active requests
     api_waits_www.graph_vlabel Average time of requests
     api_waits_www.graph_category api
-    api_waits_www.web.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%.web", @frontends %>
+    api_waits_www.graph_order map upload amf history full trkpts web other
+    api_waits_www.web.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%%.web", @frontends %>
     api_waits_www.web.label Web site traffic
     api_waits_www.web.cdef web,2,/
-    api_waits_www.upload.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%.upload", @frontends %>
+    api_waits_www.upload.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%%.upload", @frontends %>
     api_waits_www.upload.label Changeset diff uploads
     api_waits_www.upload.cdef upload,2,/
-    api_waits_www.other.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%.other", @frontends %>
+    api_waits_www.other.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%%.other", @frontends %>
     api_waits_www.other.label Other API calls
     api_waits_www.other.cdef other,2,/
-    api_waits_www.amf.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%.amf", @frontends %>
+    api_waits_www.amf.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%%.amf", @frontends %>
     api_waits_www.amf.label AMF API calls
     api_waits_www.amf.cdef amf,2,/
-    api_waits_www.history.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%.history", @frontends %>
+    api_waits_www.history.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%%.history", @frontends %>
     api_waits_www.history.label Element history fetches
     api_waits_www.history.cdef history,2,/
-    api_waits_www.full.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%.full", @frontends %>
+    api_waits_www.full.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%%.full", @frontends %>
     api_waits_www.full.label Full element fetches
     api_waits_www.full.cdef full,2,/
-    api_waits_www.map.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%.map", @frontends %>
+    api_waits_www.map.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%%.map", @frontends %>
     api_waits_www.map.label Map API calls
     api_waits_www.map.cdef map,2,/
-    api_waits_www.trkpts.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%.trkpts", @frontends %>
+    api_waits_www.trkpts.sum <%= Chef::Munin.expand "%%.openstreetmap:api_waits_%%%.trkpts", @frontends %>
     api_waits_www.trkpts.label GPX trackpoints calls
     api_waits_www.trkpts.cdef trkpts,2,/
-    memcached_multi_bytes.graph_title Network Traffic
-    memcached_multi_bytes.graph_vlabel bits in (-) / out (+)
-    memcached_multi_bytes.graph_category memcached
-    memcached_multi_bytes.bytes_read.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_bytes.bytes_read", @backends %>
-    memcached_multi_bytes.bytes_read.label Network Traffic coming in (-)
-    memcached_multi_bytes.bytes_read.cdef bytes_read,8,*
-    memcached_multi_bytes.bytes_written.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_bytes.bytes_written", @backends %>
-    memcached_multi_bytes.bytes_written.label Traffic in (-) / out (+)
-    memcached_multi_bytes.bytes_written.cdef bytes_written,8,*
-    memcached_commands.graph_title Commands
-    memcached_commands.graph_vlabel Commands per ${graph_period}
-    memcached_commands.graph_category memcached
-    memcached_commands.cmd_get.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_commands.cmd_get", @backends %>
-    memcached_commands.cmd_get.label Gets
-    memcached_commands.cmd_set.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_commands.cmd_set", @backends %>
-    memcached_commands.cmd_set.label Sets
-    memcached_commands.get_hits.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_commands.get_hits", @backends %>
-    memcached_commands.get_hits.label Get Hits
-    memcached_commands.get_misses.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_commands.get_misses", @backends %>
-    memcached_commands.get_misses.label Get Misses
-    memcached_commands.delete_hits.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_commands.delete_hits", @backends %>
-    memcached_commands.delete_hits.label Delete Hits
-    memcached_commands.delete_misses.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_commands.delete_misses", @backends %>
-    memcached_commands.delete_misses.label Delete Misses
-    memcached_commands.incr_hits.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_commands.incr_hits", @backends %>
-    memcached_commands.incr_hits.label Increment Hits
-    memcached_commands.incr_misses.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_commands.incr_misses", @backends %>
-    memcached_commands.incr_misses.label Increment Misses
-    memcached_commands.decr_hits.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_commands.decr_hits", @backends %>
-    memcached_commands.decr_hits.label Decrement Hits
-    memcached_commands.decr_misses.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_commands.decr_misses", @backends %>
-    memcached_commands.decr_misses.label Decrement Misses
+    memcached_multi_commands.graph_title Commands
+    memcached_multi_commands.graph_vlabel Commands per ${graph_period}
+    memcached_multi_commands.graph_category memcached
+    memcached_multi_commands.graph_order cmd_get cmd_set cmd_touch get_hits get_misses delete_hits delete_misses incr_hits incr_misses decr_hits decr_misses touch_hits touch_misses
+    memcached_multi_commands.cmd_get.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_commands.cmd_get", @backends %>
+    memcached_multi_commands.cmd_get.label Gets
+    memcached_multi_commands.cmd_set.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_commands.cmd_set", @backends %>
+    memcached_multi_commands.cmd_set.label Sets
+    memcached_multi_commands.cmd_touch.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_commands.cmd_touch", @backends %>
+    memcached_multi_commands.cmd_touch.label Touches
+    memcached_multi_commands.get_hits.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_commands.get_hits", @backends %>
+    memcached_multi_commands.get_hits.label Get Hits
+    memcached_multi_commands.get_misses.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_commands.get_misses", @backends %>
+    memcached_multi_commands.get_misses.label Get Misses
+    memcached_multi_commands.delete_hits.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_commands.delete_hits", @backends %>
+    memcached_multi_commands.delete_hits.label Delete Hits
+    memcached_multi_commands.delete_misses.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_commands.delete_misses", @backends %>
+    memcached_multi_commands.delete_misses.label Delete Misses
+    memcached_multi_commands.incr_hits.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_commands.incr_hits", @backends %>
+    memcached_multi_commands.incr_hits.label Increment Hits
+    memcached_multi_commands.incr_misses.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_commands.incr_misses", @backends %>
+    memcached_multi_commands.incr_misses.label Increment Misses
+    memcached_multi_commands.decr_hits.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_commands.decr_hits", @backends %>
+    memcached_multi_commands.decr_hits.label Decrement Hits
+    memcached_multi_commands.decr_misses.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_commands.decr_misses", @backends %>
+    memcached_multi_commands.decr_misses.label Decrement Misses
+    memcached_multi_commands.touch_hits.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_commands.touch_hits", @backends %>
+    memcached_multi_commands.touch_hits.label Touch Hits
+    memcached_multi_commands.touch_misses.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_commands.touch_misses", @backends %>
+    memcached_multi_commands.touch_misses.label Touch Misses
     memcached_multi_conns.graph_title Connections
     memcached_multi_conns.graph_vlabel Connections per ${graph_period}
     memcached_multi_conns.graph_category memcached
+    memcached_multi_conns.graph_order max_conns curr_conns avg_conns
     memcached_multi_conns.curr_conns.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_conns.curr_conns", @backends %>
     memcached_multi_conns.curr_conns.label Current Connections
     memcached_multi_conns.max_conns.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_conns.max_conns", @backends %>
     memcached_multi_conns.max_conns.label Max Connections
     memcached_multi_conns.avg_conns.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_conns.avg_conns", @backends %>
     memcached_multi_conns.avg_conns.label Avg Connections
-    memcached_evictions.graph_title Evictions
-    memcached_evictions.graph_vlabel Evictions per ${graph_period}
-    memcached_evictions.graph_category memcached
-    memcached_evictions.evictions.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_evictions.evictions", @backends %>
-    memcached_evictions.evictions.label Evictions
-    memcached_evictions.evicted_nonzero.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_evictions.evicted_nonzero", @backends %>
-    memcached_evictions.evicted_nonzero.label Evictions prior to Expire
-    memcached_evictions.reclaimed.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_evictions.reclaimed", @backends %>
-    memcached_evictions.reclaimed.label Reclaimed Items
-    memcached_items.graph_title Items
-    memcached_items.graph_vlabel Items in Memcached
-    memcached_items.graph_category memcached
-    memcached_items.curr_items.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_items.curr_items", @backends %>
-    memcached_items.curr_items.label Current Items
-    memcached_items.total_items.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_items.total_items", @backends %>
-    memcached_items.total_items.label New Items
-    memcached_memory.graph_title Memory Usage
-    memcached_memory.graph_vlabel Bytes Used
-    memcached_memory.graph_category memcached
-    memcached_memory.limit_maxbytes.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_memory.limit_maxbytes", @backends %>
-    memcached_memory.limit_maxbytes.label Maximum Bytes Allocated
-    memcached_memory.bytes.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_memory.bytes", @backends %>
-    memcached_memory.bytes.label Current Bytes Used
+    memcached_multi_evictions.graph_title Evictions
+    memcached_multi_evictions.graph_vlabel Evictions per ${graph_period}
+    memcached_multi_evictions.graph_category memcached
+    memcached_multi_evictions.evictions.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_evictions.evictions", @backends %>
+    memcached_multi_evictions.evictions.label Evictions
+    memcached_multi_evictions.evicted_nonzero.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_evictions.evicted_nonzero", @backends %>
+    memcached_multi_evictions.evicted_nonzero.label Evictions prior to Expire
+    memcached_multi_evictions.reclaimed.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_evictions.reclaimed", @backends %>
+    memcached_multi_evictions.reclaimed.label Reclaimed Items
+    memcached_multi_items.graph_title Items
+    memcached_multi_items.graph_vlabel Items in Memcached
+    memcached_multi_items.graph_category memcached
+    memcached_multi_items.graph_order curr_items total_items
+    memcached_multi_items.curr_items.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_items.curr_items", @backends %>
+    memcached_multi_items.curr_items.label Current Items
+    memcached_multi_items.total_items.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_items.total_items", @backends %>
+    memcached_multi_items.total_items.label New Items
+    memcached_multi_memory.graph_title Memory Usage
+    memcached_multi_memory.graph_vlabel Bytes Used
+    memcached_multi_memory.graph_category memcached
+    memcached_multi_memory.graph_order limit_maxbytes bytes
+    memcached_multi_memory.limit_maxbytes.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_memory.limit_maxbytes", @backends %>
+    memcached_multi_memory.limit_maxbytes.label Maximum Bytes Allocated
+    memcached_multi_memory.bytes.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_memory.bytes", @backends %>
+    memcached_multi_memory.bytes.label Current Bytes Used
+    memcached_multi_bytes.graph_title Network Traffic
+    memcached_multi_bytes.graph_args --base 1000
+    memcached_multi_bytes.graph_vlabel bits in (-) / out (+)
+    memcached_multi_bytes.graph_category memcached
+    memcached_multi_bytes.graph_order bytes_read bytes_written
+    memcached_multi_bytes.bytes_read.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_bytes.bytes_read", @backends %>
+    memcached_multi_bytes.bytes_read.label Network Traffic coming in (-)
+    memcached_multi_bytes.bytes_read.cdef bytes_read,8,*
+    memcached_multi_bytes.bytes_read.graph no
+    memcached_multi_bytes.bytes_written.sum <%= Chef::Munin.expand "%%.openstreetmap:memcached_multi_bytes.bytes_written", @backends %>
+    memcached_multi_bytes.bytes_written.negative bytes_read
+    memcached_multi_bytes.bytes_written.label Traffic in (-) / out (+)
+    memcached_multi_bytes.bytes_written.cdef bytes_written,8,*
+<% end -%>
+<% unless @tilecaches.empty? -%>
 
 # Configure compound graphs for tile.openstreetmap.org
 [tile.openstreetmap]
@@ -233,24 +302,28 @@ unknown_limit 144
     network_in.graph_title Inbound network traffic
     network_in.graph_vlabel bits in per ${graph_period}
     network_in.graph_category network
-    network_in.graph_order <%= Chef::Munin.expand "%%name%%=%%name%%.openstreetmap:if_%%interface%%.down", @tilecaches %>
+    network_in.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap:if_%%interface%%.down", @tilecaches %>
     network_in.graph_total total
+    network_in.graph_args --lower-limit 0
 <% @tilecaches.each do |tc| -%>
-    network_in.<%= tc[:name] %>.label <%= tc[:name] %>
-    network_in.<%= tc[:name] %>.cdef <%= tc[:name] %>,8,*
-    network_in.<%= tc[:name] %>.draw AREASTACK
+    network_in.<%= tc[:name].tr("-", "_") %>.label <%= tc[:name] %>
+    network_in.<%= tc[:name].tr("-", "_") %>.cdef <%= tc[:name].tr("-", "_") %>,8,*
+    network_in.<%= tc[:name].tr("-", "_") %>.draw AREASTACK
+    network_in.<%= tc[:name].tr("-", "_") %>.min 0
 <% end -%>
     network_out.graph_title Outbound network traffic
     network_out.graph_vlabel bits out per ${graph_period}
     network_out.graph_category network
-    network_out.graph_order <%= Chef::Munin.expand "%%name%%=%%name%%.openstreetmap:if_%%interface%%.up", @tilecaches %>
+    network_out.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap:if_%%interface%%.up", @tilecaches %>
     network_out.graph_total total
+    network_out.graph_args --lower-limit 0
 <% @tilecaches.each do |tc| -%>
-    network_out.<%= tc[:name] %>.label <%= tc[:name] %>
-    network_out.<%= tc[:name] %>.cdef <%= tc[:name] %>,8,*
-    network_out.<%= tc[:name] %>.draw AREASTACK
+    network_out.<%= tc[:name].tr("-", "_") %>.label <%= tc[:name] %>
+    network_out.<%= tc[:name].tr("-", "_") %>.cdef <%= tc[:name].tr("-", "_") %>,8,*
+    network_out.<%= tc[:name].tr("-", "_") %>.draw AREASTACK
+    network_out.<%= tc[:name].tr("-", "_") %>.min 0
 <% end -%>
-    squid_delay_pools.graph_title IPs being delayed
+    squid_delay_pools.graph_title IPs being delayed with referer
     squid_delay_pools.graph_args --base 1000 -l 0
     squid_delay_pools.graph_vlabel IPs
     squid_delay_pools.graph_order squid_delay1
@@ -259,19 +332,33 @@ unknown_limit 144
     squid_delay_pools.squid_delay1.label IPs
     squid_delay_pools.squid_delay1.min 0
     squid_delay_pools.squid_delay1.draw AREA
+    squid_delay_pools_noreferer.graph_title No-referer IPs being delayed
+    squid_delay_pools_noreferer.graph_args --base 1000 -l 0
+    squid_delay_pools_noreferer.graph_vlabel IPs
+    squid_delay_pools_noreferer.graph_order squid_delay2
+    squid_delay_pools_noreferer.graph_category squid
+    squid_delay_pools_noreferer.squid_delay2.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:squid_delay_pools_noreferer.squid_delay2", @tilecaches %>
+    squid_delay_pools_noreferer.squid_delay2.label IPs
+    squid_delay_pools_noreferer.squid_delay2.min 0
+    squid_delay_pools_noreferer.squid_delay2.draw AREA
     squid_requests.graph_title Squid client requests
     squid_requests.graph_args --base 1000 -l 0
     squid_requests.graph_vlabel requests / ${graph_period}
-    squid_requests.graph_order hits errors requests
+    squid_requests.graph_order <%= Chef::Munin.expand "%%%name%%%_hits=%%name%%.openstreetmap:squid_requests.hits %%%name%%%_errors=%%name%%.openstreetmap:squid_requests.errors %%%name%%%_requests=%%name%%.openstreetmap:squid_requests.requests", @tilecaches %> hits=<%= @tilecaches.first[:name] %>.openstreetmap:squid_requests.hits errors=<%= @tilecaches.first[:name] %>.openstreetmap:squid_requests.errors requests=<%= @tilecaches.first[:name] %>.openstreetmap:squid_requests.requests
     squid_requests.graph_total total
     squid_requests.graph_category squid
-    squid_requests.hits.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:squid_requests.hits", @tilecaches %>
+<% @tilecaches.each do |tc| -%>
+    squid_requests.<%= tc[:name].tr("-", "_") %>_hits.graph no
+    squid_requests.<%= tc[:name].tr("-", "_") %>_errors.graph no
+    squid_requests.<%= tc[:name].tr("-", "_") %>_requests.graph no
+<% end -%>
+    squid_requests.hits.cdef 0,<%= Chef::Munin.expand "%%%name%%%_hits", @tilecaches, ",+," %>,+
     squid_requests.hits.label hits
     squid_requests.hits.draw AREA
-    squid_requests.errors.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:squid_requests.errors", @tilecaches %>
+    squid_requests.errors.cdef 0,<%= Chef::Munin.expand "%%%name%%%_errors", @tilecaches, ",+," %>,+
     squid_requests.errors.label errors
     squid_requests.errors.draw STACK
-    squid_requests.requests.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:squid_requests.requests", @tilecaches %>
+    squid_requests.requests.cdef 0,<%= Chef::Munin.expand "%%%name%%%_requests", @tilecaches, ",+," %>,+,hits,-,errors,-
     squid_requests.requests.label misses
     squid_requests.requests.draw STACK
     squid_traffic.graph_title Squid traffic status
@@ -292,50 +379,74 @@ unknown_limit 144
     squid_times_http.graph_category squid
     squid_times_http.graph_args --lower-limit 0
     squid_times_http.graph_vlabel median reponse times (s)
-    squid_times_http.graph_order <%= Chef::Munin.expand "%%name%%=%%name%%.openstreetmap:squid_times.mean_http", @tilecaches %>
+    squid_times_http.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap:squid_times.mean_http", @tilecaches %>
 <% @tilecaches.each do |tc| -%>
-    squid_times_http.<%= tc[:name] %>.label <%= tc[:name] %>
+    squid_times_http.<%= tc[:name].tr("-", "_") %>.label <%= tc[:name] %>
 <% end -%>
     squid_times_cmis.graph_title Squid Cache Miss Service Times
     squid_times_cmis.graph_category squid
     squid_times_cmis.graph_args --lower-limit 0
     squid_times_cmis.graph_vlabel median reponse times (s)
-    squid_times_cmis.graph_order <%= Chef::Munin.expand "%%name%%=%%name%%.openstreetmap:squid_times.mean_cmis", @tilecaches %>
+    squid_times_cmis.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap:squid_times.mean_cmis", @tilecaches %>
 <% @tilecaches.each do |tc| -%>
-    squid_times_cmis.<%= tc[:name] %>.label <%= tc[:name] %>
+    squid_times_cmis.<%= tc[:name].tr("-", "_") %>.label <%= tc[:name] %>
 <% end -%>
     squid_times_chits.graph_title Squid Cache Hit Service Times
     squid_times_chits.graph_category squid
     squid_times_chits.graph_args --lower-limit 0
     squid_times_chits.graph_vlabel median reponse times (s)
-    squid_times_chits.graph_order <%= Chef::Munin.expand "%%name%%=%%name%%.openstreetmap:squid_times.mean_chits", @tilecaches %>
+    squid_times_chits.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap:squid_times.mean_chits", @tilecaches %>
 <% @tilecaches.each do |tc| -%>
-    squid_times_chits.<%= tc[:name] %>.label <%= tc[:name] %>
+    squid_times_chits.<%= tc[:name].tr("-", "_") %>.label <%= tc[:name] %>
 <% end -%>
     squid_times_nhits.graph_title Squid Cache Near Hit Service Times
     squid_times_nhits.graph_category squid
     squid_times_nhits.graph_args --lower-limit 0
     squid_times_nhits.graph_vlabel median reponse times (s)
-    squid_times_nhits.graph_order <%= Chef::Munin.expand "%%name%%=%%name%%.openstreetmap:squid_times.mean_nhits", @tilecaches %>
+    squid_times_nhits.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap:squid_times.mean_nhits", @tilecaches %>
 <% @tilecaches.each do |tc| -%>
-    squid_times_nhits.<%= tc[:name] %>.label <%= tc[:name] %>
+    squid_times_nhits.<%= tc[:name].tr("-", "_") %>.label <%= tc[:name] %>
 <% end -%>
     squid_times_nmr.graph_title Squid Cache Not Modified Service Times
     squid_times_nmr.graph_category squid
     squid_times_nmr.graph_args --lower-limit 0
     squid_times_nmr.graph_vlabel median reponse times (s)
-    squid_times_nmr.graph_order <%= Chef::Munin.expand "%%name%%=%%name%%.openstreetmap:squid_times.mean_nmr", @tilecaches %>
+    squid_times_nmr.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap:squid_times.mean_nmr", @tilecaches %>
 <% @tilecaches.each do |tc| -%>
-    squid_times_nmr.<%= tc[:name] %>.label <%= tc[:name] %>
+    squid_times_nmr.<%= tc[:name].tr("-", "_") %>.label <%= tc[:name] %>
 <% end -%>
     squid_times_dnsl.graph_title Squid Cache DNS Lookup Service Times
     squid_times_dnsl.graph_category squid
     squid_times_dnsl.graph_args --lower-limit 0
     squid_times_dnsl.graph_vlabel median reponse times (s)
-    squid_times_dnsl.graph_order <%= Chef::Munin.expand "%%name%%=%%name%%.openstreetmap:squid_times.mean_dnsl", @tilecaches %>
+    squid_times_dnsl.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap:squid_times.mean_dnsl", @tilecaches %>
 <% @tilecaches.each do |tc| -%>
-    squid_times_dnsl.<%= tc[:name] %>.label <%= tc[:name] %>
+    squid_times_dnsl.<%= tc[:name].tr("-", "_") %>.label <%= tc[:name] %>
 <% end -%>
+    squid_request_hitrates.graph_title Squid Cache Request Hit Rates
+    squid_request_hitrates.graph_category squid
+    squid_request_hitrates.graph_args --lower-limit 0 --upper-limit 100
+    squid_request_hitrates.graph_vlabel %
+    squid_request_hitrates.graph_order <%= Chef::Munin.expand "%%%name%%%_total=%%name%%.openstreetmap:squid_requests.requests %%%name%%%_hits=%%name%%.openstreetmap:squid_requests.hits", @tilecaches %>
+<% @tilecaches.each do |tc| -%>
+    squid_request_hitrates.<%= tc[:name].tr("-", "_") %>_total.graph no
+    squid_request_hitrates.<%= tc[:name].tr("-", "_") %>_hits.cdef <%= tc[:name].tr("-", "_") %>_hits,<%= tc[:name].tr("-", "_") %>_total,/,100,*
+    squid_request_hitrates.<%= tc[:name].tr("-", "_") %>_hits.label <%= tc[:name] %>
+    squid_request_hitrates.<%= tc[:name].tr("-", "_") %>_hits.draw LINE1
+<% end -%>
+    squid_byte_hitrates.graph_title Squid Cache Byte Hit Rates
+    squid_byte_hitrates.graph_category squid
+    squid_byte_hitrates.graph_args --lower-limit 0 --upper-limit 100
+    squid_byte_hitrates.graph_vlabel %
+    squid_byte_hitrates.graph_order <%= Chef::Munin.expand "%%%name%%%_total=%%name%%.openstreetmap:squid_traffic.kbytes_out %%%name%%%_hits=%%name%%.openstreetmap:squid_traffic.hit_kbytes_out", @tilecaches %>
+<% @tilecaches.each do |tc| -%>
+    squid_byte_hitrates.<%= tc[:name].tr("-", "_") %>_total.graph no
+    squid_byte_hitrates.<%= tc[:name].tr("-", "_") %>_hits.cdef <%= tc[:name].tr("-", "_") %>_hits,<%= tc[:name].tr("-", "_") %>_total,/,100,*
+    squid_byte_hitrates.<%= tc[:name].tr("-", "_") %>_hits.label <%= tc[:name] %>
+    squid_byte_hitrates.<%= tc[:name].tr("-", "_") %>_hits.draw LINE1
+<% end -%>
+<% end -%>
+<% unless @renderers.empty? -%>
 
 # Configure compound graphs for render.openstreetmap.org
 [render.openstreetmap]
@@ -343,38 +454,297 @@ unknown_limit 144
     apache_accesses.graph_title Apache accesses
     apache_accesses.graph_vlabel accesses / ${graph_period}
     apache_accesses.graph_category apache
-    apache_accesses.graph_order <%= Chef::Munin.expand "%%name%%=%%name%%.openstreetmap:apache_accesses.accesses80", @renderers %>
+    apache_accesses.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap:apache_accesses.accesses80", @renderers %>
     apache_accesses.graph_total total
+    apache_accesses.graph_args --lower-limit 0
 <% @renderers.each do |rs| -%>
-    apache_accesses.<%= rs[:name] %>.label <%= rs[:name] %>
-    apache_accesses.<%= rs[:name] %>.draw AREASTACK
+    apache_accesses.<%= rs[:name].tr("-", "_") %>.label <%= rs[:name] %>
+    apache_accesses.<%= rs[:name].tr("-", "_") %>.draw AREASTACK
+    apache_accesses.<%= rs[:name].tr("-", "_") %>.min 0
 <% end -%>
     apache_volume.graph_title Apache volume
     apache_volume.graph_vlabel bytes per ${graph_period}
     apache_volume.graph_category apache
-    apache_volume.graph_order <%= Chef::Munin.expand "%%name%%=%%name%%.openstreetmap:apache_volume.volume80", @renderers %>
+    apache_volume.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap:apache_volume.volume80", @renderers %>
     apache_volume.graph_total total
+    apache_volume.graph_args --lower-limit 0
 <% @renderers.each do |rs| -%>
-    apache_volume.<%= rs[:name] %>.label <%= rs[:name] %>
-    apache_volume.<%= rs[:name] %>.draw AREASTACK
+    apache_volume.<%= rs[:name].tr("-", "_") %>.label <%= rs[:name] %>
+    apache_volume.<%= rs[:name].tr("-", "_") %>.draw AREASTACK
+    apache_volume.<%= rs[:name].tr("-", "_") %>.min 0
 <% end -%>
     network_in.graph_title Inbound network traffic
     network_in.graph_vlabel bits in per ${graph_period}
     network_in.graph_category network
-    network_in.graph_order <%= Chef::Munin.expand "%%name%%=%%name%%.openstreetmap:if_%%interface%%.down", @renderers %>
+    network_in.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap:if_%%interface%%.down", @renderers %>
     network_in.graph_total total
+    network_in.graph_args --lower-limit 0
 <% @renderers.each do |rs| -%>
-    network_in.<%= rs[:name] %>.label <%= rs[:name] %>
-    network_in.<%= rs[:name] %>.cdef <%= rs[:name] %>,8,*
-    network_in.<%= rs[:name] %>.draw AREASTACK
+    network_in.<%= rs[:name].tr("-", "_") %>.label <%= rs[:name] %>
+    network_in.<%= rs[:name].tr("-", "_") %>.cdef <%= rs[:name].tr("-", "_") %>,8,*
+    network_in.<%= rs[:name].tr("-", "_") %>.draw AREASTACK
+    network_in.<%= rs[:name].tr("-", "_") %>.min 0
 <% end -%>
     network_out.graph_title Outbound network traffic
     network_out.graph_vlabel bits out per ${graph_period}
     network_out.graph_category network
-    network_out.graph_order <%= Chef::Munin.expand "%%name%%=%%name%%.openstreetmap:if_%%interface%%.up", @renderers %>
+    network_out.graph_order <%= Chef::Munin.expand "%%%name%%%=%%name%%.openstreetmap:if_%%interface%%.up", @renderers %>
     network_out.graph_total total
+    network_out.graph_args --lower-limit 0
 <% @renderers.each do |rs| -%>
-    network_out.<%= rs[:name] %>.label <%= rs[:name] %>
-    network_out.<%= rs[:name] %>.cdef <%= rs[:name] %>,8,*
-    network_out.<%= rs[:name] %>.draw AREASTACK
+    network_out.<%= rs[:name].tr("-", "_") %>.label <%= rs[:name] %>
+    network_out.<%= rs[:name].tr("-", "_") %>.cdef <%= rs[:name].tr("-", "_") %>,8,*
+    network_out.<%= rs[:name].tr("-", "_") %>.draw AREASTACK
+    network_out.<%= rs[:name].tr("-", "_") %>.min 0
+<% end -%>
+    mod_tile_fresh.graph_title freshness of served tiles
+    mod_tile_fresh.graph_args --base 1000 -l 0
+    mod_tile_fresh.graph_vlabel tiles per ${graph_period}
+    mod_tile_fresh.graph_order fresh freshrender old oldrender outdated outdatedrender
+    mod_tile_fresh.graph_category mod_tile
+    mod_tile_fresh.fresh.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_fresh.fresh", @renderers %>
+    mod_tile_fresh.fresh.label Fresh from disk
+    mod_tile_fresh.fresh.draw AREA
+    mod_tile_fresh.freshrender.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_fresh.freshrender", @renderers %>
+    mod_tile_fresh.freshrender.label Freshly rendered
+    mod_tile_fresh.freshrender.draw STACK
+    mod_tile_fresh.old.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_fresh.old", @renderers %>
+    mod_tile_fresh.old.label Old from disk
+    mod_tile_fresh.old.draw STACK
+    mod_tile_fresh.oldrender.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_fresh.oldrender", @renderers %>
+    mod_tile_fresh.oldrender.label Old tile, attempted render
+    mod_tile_fresh.oldrender.draw STACK
+    mod_tile_fresh.outdated.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_fresh.outdated", @renderers %>
+    mod_tile_fresh.outdated.label Outdated from disk
+    mod_tile_fresh.outdated.draw STACK
+    mod_tile_fresh.outdatedrender.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_fresh.outdatedrender", @renderers %>
+    mod_tile_fresh.outdatedrender.label Outdated tile, attempted render
+    mod_tile_fresh.outdatedrender.draw STACK
+    mod_tile_response.graph_title mod_tile HTTP response codes
+    mod_tile_response.graph_args --base 1000 -l 0
+    mod_tile_response.graph_vlabel responses per ${graph_period}
+    mod_tile_response.graph_order response200 response304 response404 response500
+    mod_tile_response.graph_category mod_tile
+    mod_tile_response.response200.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_response.response200", @renderers %>
+    mod_tile_response.response200.label 200 OK
+    mod_tile_response.response200.draw AREA
+    mod_tile_response.response304.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_response.response304", @renderers %>
+    mod_tile_response.response304.label 304 Not Modified
+    mod_tile_response.response304.draw STACK
+    mod_tile_response.response404.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_response.response404", @renderers %>
+    mod_tile_response.response404.label 404 Not Found
+    mod_tile_response.response404.draw STACK
+    mod_tile_response.response500.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_response.response500", @renderers %>
+    mod_tile_response.response500.label 500 Internal Error
+    mod_tile_response.response500.draw STACK
+    mod_tile_zoom.graph_title mod_tile responses by zoom layer
+    mod_tile_zoom.graph_args --base 1000 -l 0
+    mod_tile_zoom.graph_vlabel responses per ${graph_period}
+    mod_tile_zoom.graph_order z1 z2 z3 z4 z5 z6
+    mod_tile_zoom.graph_category mod_tile
+    mod_tile_zoom.z1.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_zoom.z1", @renderers %>
+    mod_tile_zoom.z1.label z1-8
+    mod_tile_zoom.z1.draw AREA
+    mod_tile_zoom.z2.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_zoom.z2", @renderers %>
+    mod_tile_zoom.z2.label z9-12
+    mod_tile_zoom.z2.draw STACK
+    mod_tile_zoom.z3.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_zoom.z3", @renderers %>
+    mod_tile_zoom.z3.label z13-14
+    mod_tile_zoom.z3.draw STACK
+    mod_tile_zoom.z4.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_zoom.z4", @renderers %>
+    mod_tile_zoom.z4.label z15-16
+    mod_tile_zoom.z4.draw STACK
+    mod_tile_zoom.z5.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_zoom.z5", @renderers %>
+    mod_tile_zoom.z5.label z17-18
+    mod_tile_zoom.z5.draw STACK
+    mod_tile_zoom.z6.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:mod_tile_zoom.z6", @renderers %>
+    mod_tile_zoom.z6.label z19-20
+    mod_tile_zoom.z6.draw STACK
+    renderd_queue.graph_title Renderd queue length
+    renderd_queue.graph_args --base 1000 -l 0
+    renderd_queue.graph_vlabel metatiles
+    renderd_queue.graph_order reqPrio req reqLow dirty reqBulk
+    renderd_queue.graph_category renderd
+    renderd_queue.reqPrio.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_queue.reqPrio", @renderers %>
+    renderd_queue.reqPrio.label Priority request Queue
+    renderd_queue.reqPrio.type GAUGE
+    renderd_queue.req.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_queue.req", @renderers %>
+    renderd_queue.req.label Request Queue
+    renderd_queue.req.type GAUGE
+    renderd_queue.reqLow.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_queue.reqLow", @renderers %>
+    renderd_queue.reqLow.label Low priority request Queue
+    renderd_queue.reqLow.type GAUGE
+    renderd_queue.dirty.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_queue.dirty", @renderers %>
+    renderd_queue.dirty.label Dirty Queue
+    renderd_queue.dirty.type GAUGE
+    renderd_queue.reqBulk.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_queue.reqBulk", @renderers %>
+    renderd_queue.reqBulk.label Bulk request Queue
+    renderd_queue.reqBulk.type GAUGE
+    renderd_processed.graph_title Renderd throughput
+    renderd_processed.graph_args --base 1000 -l 0
+    renderd_processed.graph_vlabel Metatiles per ${graph_period}
+    renderd_processed.graph_order reqPrio req reqLow dirty reqBulk dropped
+    renderd_processed.graph_category renderd
+    renderd_processed.graph_info Displays the number of metatiles being rendered by renderd per ${graph_period}
+    renderd_processed.reqPrio.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_processed.reqPrio", @renderers %>
+    renderd_processed.reqPrio.label Priority request Queue
+    renderd_processed.reqPrio.draw AREA
+    renderd_processed.reqPrio.info Throughput of Metatiles submitted high priority for on the fly rendering
+    renderd_processed.req.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_processed.req", @renderers %>
+    renderd_processed.req.label Request Queue
+    renderd_processed.req.draw STACK
+    renderd_processed.req.info Throughput of Metatiles submitted for on the fly rendering
+    renderd_processed.reqLow.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_processed.reqLow", @renderers %>
+    renderd_processed.reqLow.label Low priority request Queue
+    renderd_processed.reqLow.draw STACK
+    renderd_processed.reqLow.info Throughput of Metatiles submitted low priority for on the fly rendering
+    renderd_processed.dirty.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_processed.dirty", @renderers %>
+    renderd_processed.dirty.label Dirty Queue
+    renderd_processed.dirty.draw STACK
+    renderd_processed.dirty.info Throughput of dirty Metatiles submitted for re-render
+    renderd_processed.reqBulk.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_processed.reqBulk", @renderers %>
+    renderd_processed.reqBulk.label Bulk request Queue
+    renderd_processed.reqBulk.draw STACK
+    renderd_processed.reqBulk.info Throughput of Metatiles submitted with background priority
+    renderd_processed.dropped.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_processed.dropped", @renderers %>
+    renderd_processed.dropped.label Dropped (x20)
+    renderd_processed.dropped.draw LINE2
+    renderd_processed.dropped.info Number of Tiles dropped due to queue overload (x20)
+    renderd_processed.dropped.cdef dropped,20,/
+    renderd_zoom.graph_title Renderd throughput by zoom
+    renderd_zoom.graph_args --base 1000 -l 0
+    renderd_zoom.graph_vlabel Metatiles per ${graph_period}
+    renderd_zoom.graph_order z1 z2 z3 z4 z5 z6
+    renderd_zoom.graph_category renderd
+    renderd_zoom.graph_info Displays the number of metatiles being rendered by renderd per ${graph_period}
+    renderd_zoom.z1.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_zoom.z1", @renderers %>
+    renderd_zoom.z1.label zoom z0 - z8
+    renderd_zoom.z1.draw AREA
+    renderd_zoom.z1.info Throughput of Metatiles for z0 - z8
+    renderd_zoom.z2.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_zoom.z2", @renderers %>
+    renderd_zoom.z2.label zoom z9 - z12
+    renderd_zoom.z2.draw STACK
+    renderd_zoom.z2.info Throughput of Metatiles for z9 - z12
+    renderd_zoom.z3.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_zoom.z3", @renderers %>
+    renderd_zoom.z3.label zoom z13 - z14
+    renderd_zoom.z3.draw STACK
+    renderd_zoom.z3.info Throughput of Metatiles for z13 - z14
+    renderd_zoom.z4.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_zoom.z4", @renderers %>
+    renderd_zoom.z4.label zoom z15 - z16
+    renderd_zoom.z4.draw STACK
+    renderd_zoom.z4.info Throughput of Metatiles for z15 - z16
+    renderd_zoom.z5.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_zoom.z5", @renderers %>
+    renderd_zoom.z5.label zoom z17 - z18
+    renderd_zoom.z5.draw STACK
+    renderd_zoom.z5.info Throughput of Metatiles for z17 - z18
+    renderd_zoom.z6.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_zoom.z6", @renderers %>
+    renderd_zoom.z6.label zoom z19 - z20
+    renderd_zoom.z6.draw STACK
+    renderd_zoom.z6.info Throughput of Metatiles for z19 - z20
+    renderd_queue_time.graph_title Renderd time spent by queue
+    renderd_queue_time.graph_args --base 1000 -l 0
+    renderd_queue_time.graph_vlabel metatiles
+    renderd_queue_time.graph_order reqPrio req reqLow dirty reqBulk
+    renderd_queue_time.graph_category renderd
+    renderd_queue_time.reqPrio.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_queue_time.reqPrio", @renderers %>
+    renderd_queue_time.reqPrio.label Priority request queue
+    renderd_queue_time.reqPrio.cdef reqPrio,1000,/
+    renderd_queue_time.reqPrio.draw AREA
+    renderd_queue_time.reqPrio.info Time for priority request queue
+    renderd_queue_time.req.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_queue_time.req", @renderers %>
+    renderd_queue_time.req.label Request queue
+    renderd_queue_time.req.cdef req,1000,/
+    renderd_queue_time.req.draw STACK
+    renderd_queue_time.req.info Time for Request queue
+    renderd_queue_time.reqLow.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_queue_time.reqLow", @renderers %>
+    renderd_queue_time.reqLow.label Low priority request queue
+    renderd_queue_time.reqLow.cdef reqLow,1000,/
+    renderd_queue_time.reqLow.draw STACK
+    renderd_queue_time.reqLow.info Time for low priority request queue
+    renderd_queue_time.dirty.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_queue_time.dirty", @renderers %>
+    renderd_queue_time.dirty.label Dirty queue
+    renderd_queue_time.dirty.cdef dirty,1000,/
+    renderd_queue_time.dirty.draw STACK
+    renderd_queue_time.dirty.info Time for dirty queue
+    renderd_queue_time.reqBulk.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_queue_time.reqBulk", @renderers %>
+    renderd_queue_time.reqBulk.label Bulk queue
+    renderd_queue_time.reqBulk.cdef reqBulk,1000,/
+    renderd_queue_time.reqBulk.draw STACK
+    renderd_queue_time.reqBulk.info Time for bulk queue
+    renderd_zoom_time.graph_title Renderd time spent by zoom
+    renderd_zoom_time.graph_args --base 1000 -l 0
+    renderd_zoom_time.graph_vlabel time spent per ${graph_period}
+    renderd_zoom_time.graph_order zoomtime1 zoomtime2 zoomtime3 zoomtime4 zoomtime5 zoomtime6
+    renderd_zoom_time.graph_category renderd
+    renderd_zoom_time.graph_info Displays the amount of time renderd has spent rendering tiles of a given zoom per ${graph_period}
+    renderd_zoom_time.zoomtime1.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_zoom_time.zoomtime1", @renderers %>
+    renderd_zoom_time.zoomtime1.label zoom z0 - z8
+    renderd_zoom_time.zoomtime1.cdef zoomtime1,1000,/
+    renderd_zoom_time.zoomtime1.draw AREA
+    renderd_zoom_time.zoomtime1.info Time for Metatiles z0 - z8
+    renderd_zoom_time.zoomtime2.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_zoom_time.zoomtime2", @renderers %>
+    renderd_zoom_time.zoomtime2.label zoom z9 - z12
+    renderd_zoom_time.zoomtime2.cdef zoomtime2,1000,/
+    renderd_zoom_time.zoomtime2.draw STACK
+    renderd_zoom_time.zoomtime2.info Time for Metatiles for z9 - z12
+    renderd_zoom_time.zoomtime3.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_zoom_time.zoomtime3", @renderers %>
+    renderd_zoom_time.zoomtime3.label zoom z13 - z14
+    renderd_zoom_time.zoomtime3.cdef zoomtime3,1000,/
+    renderd_zoom_time.zoomtime3.draw STACK
+    renderd_zoom_time.zoomtime3.info Time for Metatiles for z13 - z14
+    renderd_zoom_time.zoomtime4.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_zoom_time.zoomtime4", @renderers %>
+    renderd_zoom_time.zoomtime4.label zoom z15 - z16
+    renderd_zoom_time.zoomtime4.cdef zoomtime4,1000,/
+    renderd_zoom_time.zoomtime4.draw STACK
+    renderd_zoom_time.zoomtime4.info Time for Metatiles for z15 - z16
+    renderd_zoom_time.zoomtime5.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_zoom_time.zoomtime5", @renderers %>
+    renderd_zoom_time.zoomtime5.label zoom z17 - z18
+    renderd_zoom_time.zoomtime5.cdef zoomtime5,1000,/
+    renderd_zoom_time.zoomtime5.draw STACK
+    renderd_zoom_time.zoomtime5.info Time for Metatiles for z17 - z18
+    renderd_zoom_time.zoomtime6.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:renderd_zoom_time.zoomtime6", @renderers %>
+    renderd_zoom_time.zoomtime6.label zoom z19 - z20
+    renderd_zoom_time.zoomtime6.cdef zoomtime6,1000,/
+    renderd_zoom_time.zoomtime6.draw STACK
+    renderd_zoom_time.zoomtime6.info Time for Metatiles for z19 - z20
+<% end -%>
+<% unless @geocoders.empty? -%>
+
+# Configure compound graphs for nominatim.openstreetmap.org
+[nominatim.openstreetmap]
+    update no
+    nominatim_requests.graph_title Requests by API call
+    nominatim_requests.graph_args --base 1000 -l 0
+    nominatim_requests.graph_vlabel requests per minute
+    nominatim_requests.graph_category nominatim
+    nominatim_requests.graph_order z1 z2 z3 z4
+    nominatim_requests.z1.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:nominatim_requests.z1", @geocoders %>
+    nominatim_requests.z1.label reverse
+    nominatim_requests.z1.draw AREA
+    nominatim_requests.z1.type GAUGE
+    nominatim_requests.z2.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:nominatim_requests.z2", @geocoders %>
+    nominatim_requests.z2.label search (successful)
+    nominatim_requests.z2.draw STACK
+    nominatim_requests.z2.type GAUGE
+    nominatim_requests.z3.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:nominatim_requests.z3", @geocoders %>
+    nominatim_requests.z3.label search (no result)
+    nominatim_requests.z3.draw STACK
+    nominatim_requests.z3.type GAUGE
+    nominatim_requests.z4.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:nominatim_requests.z4", @geocoders %>
+    nominatim_requests.z4.label details
+    nominatim_requests.z4.draw STACK
+    nominatim_requests.z4.type GAUGE
+    nominatim_throttled_ips.graph_title Restricted IPs
+    nominatim_throttled_ips.graph_args -l 0
+    nominatim_throttled_ips.graph_vlabel number of IPs
+    nominatim_throttled_ips.graph_category nominatim
+    nominatim_throttled_ips.graph_order bulk block
+    nominatim_throttled_ips.bulk.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:nominatim_throttled_ips.bulk", @geocoders %>
+    nominatim_throttled_ips.bulk.label bulk
+    nominatim_throttled_ips.bulk.draw AREA
+    nominatim_throttled_ips.bulk.type GAUGE
+    nominatim_throttled_ips.block.sum <%= Chef::Munin.expand "%%name%%.openstreetmap:nominatim_throttled_ips.block", @geocoders %>
+    nominatim_throttled_ips.block.label blocked
+    nominatim_throttled_ips.block.draw STACK
+    nominatim_throttled_ips.block.type GAUGE
 <% end -%>