diff --git a/Dockerfile b/Dockerfile
index c12e6b5..cace754 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -62,6 +62,11 @@ WORKDIR /usr/local/src/graphite-web
RUN . /opt/graphite/bin/activate && pip3 install -r requirements.txt \
&& python3 ./setup.py install
+# fixing RRD support (see https://github.com/graphite-project/docker-graphite-statsd/issues/63)
+RUN sed -i \
+'s/return os.path.realpath(fs_path)/return os.path.realpath(fs_path).decode("utf-8")/' \
+/opt/graphite/webapp/graphite/readers/rrd.py
+
# installing nodejs 6
WORKDIR /opt
RUN wget https://nodejs.org/download/release/v6.14.4/node-v6.14.4-linux-x64.tar.gz && \
@@ -98,6 +103,7 @@ RUN apt-get update --fix-missing \
&& apt-get install --yes --no-install-recommends \
git \
redis \
+ collectd \
nginx \
python3-pip \
python3-ldap \
@@ -121,6 +127,9 @@ ADD conf/etc/nginx/sites-enabled/graphite-statsd.conf /etc/nginx/sites-enabled/g
# config redis
ADD conf/etc/redis/redis.conf /etc/redis/redis.conf
+# config collectd
+ADD conf/etc/collectd/collectd.conf /etc/collectd/collectd.conf
+
# logging support
RUN mkdir -p /var/log/carbon /var/log/graphite /var/log/nginx /var/log/graphite/
ADD conf/etc/logrotate.d/graphite-statsd /etc/logrotate.d/graphite-statsd
@@ -132,6 +141,7 @@ ADD conf/etc/service/graphite/run /etc/service/graphite/run
ADD conf/etc/service/statsd/run /etc/service/statsd/run
ADD conf/etc/service/nginx/run /etc/service/nginx/run
ADD conf/etc/service/redis/run /etc/service/redis/run
+ADD conf/etc/service/collectd/run /etc/service/collectd/run
RUN chmod 0755 /etc/service/*/run
# default conf setup
diff --git a/README.md b/README.md
index af3a5b8..cf577c2 100644
--- a/README.md
+++ b/README.md
@@ -73,7 +73,7 @@ DOCKER ASSIGNED | /var/lib/redis | Redis TagDB data (optional)
Built using [Phusion's base image](https://github.com/phusion/baseimage-docker).
* All Graphite related processes are run as daemons & monitored with [runit](http://smarden.org/runit/).
-* Includes additional services such as logrotate.
+* Includes additional services such as logrotate, nginx, optional Redis for TagDB and optional collectd instance.
## Start Using Graphite & Statsd
@@ -160,6 +160,9 @@ Graphite stores tag information in a separate tag database (TagDB). Please check
* GRAPHITE_TAGDB_HTTP_PASSWORD: ('') Password for HTTP TagDB
* GRAPHITE_TAGDB_HTTP_AUTOCOMPLETE: (false) Does the remote TagDB support autocomplete?
+## Collectd
+Use `COLLECTD=1` environment variable to enable local collectd instance
+
## Change the Configuration
Read up on Graphite's [post-install tasks](https://graphite.readthedocs.org/en/latest/install.html#post-install-tasks).
diff --git a/conf/etc/collectd/collectd.conf b/conf/etc/collectd/collectd.conf
new file mode 100644
index 0000000..7467ccd
--- /dev/null
+++ b/conf/etc/collectd/collectd.conf
@@ -0,0 +1,1116 @@
+# Config file for collectd(1).
+#
+# Some plugins need additional configuration and are disabled by default.
+# Please read collectd.conf(5) for details.
+#
+# You should also read /usr/share/doc/collectd-core/README.Debian.plugins
+# before enabling any more plugins.
+
+#Hostname "localhost"
+Hostname "graphite"
+FQDNLookup true
+#BaseDir "/var/lib/collectd"
+#PluginDir "/usr/lib/collectd"
+#TypesDB "/usr/share/collectd/types.db" "/etc/collectd/my_types.db"
+Interval 10
+#Interval 60
+#Timeout 2
+#ReadThreads 5
+
+#LoadPlugin logfile
+LoadPlugin syslog
+
+#
+# LogLevel "info"
+# File STDOUT
+# Timestamp true
+# PrintSeverity false
+#
+
+
+ LogLevel info
+
+
+#LoadPlugin amqp
+#LoadPlugin apache
+#LoadPlugin apcups
+#LoadPlugin ascent
+LoadPlugin battery
+#LoadPlugin bind
+#LoadPlugin conntrack
+#LoadPlugin contextswitch
+LoadPlugin cpu
+#LoadPlugin cpufreq
+#LoadPlugin csv
+#LoadPlugin curl
+#LoadPlugin curl_json
+#LoadPlugin curl_xml
+#LoadPlugin dbi
+LoadPlugin df
+LoadPlugin disk
+#LoadPlugin dns
+#LoadPlugin email
+LoadPlugin entropy
+#LoadPlugin ethstat
+#LoadPlugin exec
+LoadPlugin filecount
+#LoadPlugin fscache
+#LoadPlugin gmond
+#LoadPlugin hddtemp
+LoadPlugin interface
+#LoadPlugin ipmi
+#LoadPlugin iptables
+#LoadPlugin ipvs
+#LoadPlugin irq
+#LoadPlugin java
+#LoadPlugin libvirt
+LoadPlugin load
+#LoadPlugin madwifi
+#LoadPlugin mbmon
+#LoadPlugin md
+#LoadPlugin memcachec
+#LoadPlugin memcached
+LoadPlugin memory
+#LoadPlugin multimeter
+#LoadPlugin mysql
+#LoadPlugin netlink
+#LoadPlugin network
+#LoadPlugin nfs
+LoadPlugin nginx
+#LoadPlugin notify_desktop
+#LoadPlugin notify_email
+#LoadPlugin ntpd
+#LoadPlugin numa
+#LoadPlugin nut
+#LoadPlugin olsrd
+#LoadPlugin openvpn
+#
+# Globals true
+#
+#LoadPlugin pinba
+#LoadPlugin ping
+#LoadPlugin postgresql
+#LoadPlugin powerdns
+LoadPlugin processes
+#LoadPlugin protocols
+#
+# Globals true
+#
+#LoadPlugin rrdcached
+#LoadPlugin rrdtool
+#LoadPlugin sensors
+#LoadPlugin serial
+#LoadPlugin snmp
+LoadPlugin swap
+#LoadPlugin table
+LoadPlugin tail
+#LoadPlugin tcpconns
+#LoadPlugin teamspeak2
+#LoadPlugin ted
+#LoadPlugin thermal
+#LoadPlugin tokyotyrant
+#LoadPlugin unixsock
+#LoadPlugin uptime
+#LoadPlugin users
+#LoadPlugin uuid
+#LoadPlugin varnish
+#LoadPlugin vmem
+#LoadPlugin vserver
+#LoadPlugin wireless
+LoadPlugin write_graphite
+#LoadPlugin write_http
+#LoadPlugin write_mongodb
+
+#
+#
+# Host "localhost"
+# Port "5672"
+# VHost "/"
+# User "guest"
+# Password "guest"
+# Exchange "amq.fanout"
+# RoutingKey "collectd"
+# Persistent false
+# StoreRates false
+#
+#
+
+#
+#
+# URL "https://127.0.0.1/server-status?auto"
+# VerifyPeer false
+# VerifyHost false
+#
+#
+# URL "http://localhost/server-status?auto"
+# User "www-user"
+# Password "secret"
+# VerifyPeer false
+# VerifyHost false
+# CACert "/etc/ssl/ca.crt"
+# Server "apache"
+#
+#
+#
+# URL "http://some.domain.tld/status?auto"
+# Host "some.domain.tld"
+# Server "lighttpd"
+#
+#
+
+#
+# Host "localhost"
+# Port "3551"
+#
+
+#
+# URL "http://localhost/ascent/status/"
+# User "www-user"
+# Password "secret"
+# VerifyPeer false
+# VerifyHost false
+# CACert "/etc/ssl/ca.crt"
+#
+
+#
+# URL "http://localhost:8053/"
+#
+# ParseTime false
+#
+# OpCodes true
+# QTypes true
+# ServerStats true
+# ZoneMaintStats true
+# ResolverStats false
+# MemoryStats true
+#
+#
+# QTypes true
+# ResolverStats true
+# CacheRRSets true
+#
+# Zone "127.in-addr.arpa/IN"
+#
+#
+
+#
+# DataDir "/var/lib/collectd/csv"
+# StoreRates false
+#
+
+#
+#
+# URL "http://finance.google.com/finance?q=NYSE%3AAMD"
+# User "foo"
+# Password "bar"
+# VerifyPeer false
+# VerifyHost false
+# CACert "/etc/ssl/ca.crt"
+# MeasureResponseTime false
+#
+# Regex "]*> *([0-9]*\\.[0-9]+) *"
+# DSType "GaugeAverage"
+# Type "stock_value"
+# Instance "AMD"
+#
+#
+#
+
+#
+## See: http://wiki.apache.org/couchdb/Runtime_Statistics
+#
+# Instance "httpd"
+#
+# Type "http_requests"
+#
+#
+#
+# Type "http_request_methods"
+#
+#
+#
+# Type "http_response_codes"
+#
+#
+## Database status metrics:
+#
+# Instance "dbs"
+#
+# Type "gauge"
+#
+#
+# Type "counter"
+#
+#
+# Type "bytes"
+#
+#
+#
+
+#
+#
+# Host "my_host"
+# Instance "some_instance"
+# User "collectd"
+# Password "thaiNg0I"
+# VerifyPeer true
+# VerifyHost true
+# CACert "/path/to/ca.crt"
+#
+#
+# Type "magic_level"
+# InstancePrefix "prefix-"
+# InstanceFrom "td[1]"
+# ValuesFrom "td[2]/span[@class=\"level\"]"
+#
+#
+#
+
+#
+#
+# Statement "SELECT 'customers' AS c_key, COUNT(*) AS c_value \
+# FROM customers_tbl"
+# MinVersion 40102
+# MaxVersion 50042
+#
+# Type "gauge"
+# InstancePrefix "customer"
+# InstancesFrom "c_key"
+# ValuesFrom "c_value"
+#
+#
+#
+#
+# Driver "mysql"
+# DriverOption "host" "localhost"
+# DriverOption "username" "collectd"
+# DriverOption "password" "secret"
+# DriverOption "dbname" "custdb0"
+# SelectDB "custdb0"
+# Query "num_of_customers"
+# Query "..."
+#
+#
+
+
+ Device "/dev/vda"
+ ReportInodes true
+# Device "/dev/sda1"
+# Device "192.168.0.2:/mnt/nfs"
+# MountPoint "/home"
+# FSType "ext3"
+# IgnoreSelected false
+# ReportByDevice false
+# ReportReserved false
+# ReportInodes false
+
+
+#
+# Disk "hda"
+# Disk "/sda[23]/"
+# IgnoreSelected false
+#
+
+#
+# Interface "eth0"
+# IgnoreSource "192.168.0.1"
+# SelectNumericQueryTypes false
+#
+
+#
+# SocketFile "/var/run/collectd-email"
+# SocketGroup "collectd"
+# SocketPerms "0770"
+# MaxConns 5
+#
+
+#
+# Interface "eth0"
+# Map "rx_csum_offload_errors" "if_rx_errors" "checksum_offload"
+# Map "multicast" "if_multicast"
+# MappedOnly false
+#
+
+#
+# Exec user "/path/to/exec"
+# Exec "user:group" "/path/to/exec"
+# NotificationExec user "/path/to/exec"
+#
+
+
+
+ Instance "whisper"
+ Name "*.wsp"
+#
+# Instance "foodir"
+# Name "*.conf"
+# MTime "-5m"
+# Size "+10k"
+# Recursive true
+# IncludeHidden false
+
+
+
+#
+# MCReceiveFrom "239.2.11.71" "8649"
+#
+#
+# Type "swap"
+# TypeInstance "total"
+# DataSource "value"
+#
+#
+#
+# Type "swap"
+# TypeInstance "free"
+# DataSource "value"
+#
+#
+
+#
+# Host "127.0.0.1"
+# Port 7634
+#
+
+#
+# Interface "eth0"
+# IgnoreSelected false
+#
+
+#
+# Sensor "some_sensor"
+# Sensor "another_one"
+# IgnoreSelected false
+# NotifySensorAdd false
+# NotifySensorRemove true
+# NotifySensorNotPresent false
+#
+
+#
+# Chain "table" "chain"
+#
+
+#
+# Irq 7
+# Irq 8
+# Irq 9
+# IgnoreSelected true
+#
+
+#
+# JVMArg "-verbose:jni"
+# JVMArg "-Djava.class.path=/usr/share/collectd/java/collectd-api.jar"
+#
+# LoadPlugin "org.collectd.java.GenericJMX"
+#
+# # See /usr/share/doc/collectd/examples/GenericJMX.conf
+# # for an example config.
+#
+#
+
+#
+# Connection "xen:///"
+# RefreshInterval 60
+# Domain "name"
+# BlockDevice "name:device"
+# InterfaceDevice "name:device"
+# IgnoreSelected false
+# HostnameFormat name
+# InterfaceFormat name
+#
+
+#
+# Interface "wlan0"
+# IgnoreSelected false
+# Source "SysFS"
+# WatchSet "None"
+# WatchAdd "node_octets"
+# WatchAdd "node_rssi"
+# WatchAdd "is_rx_acl"
+# WatchAdd "is_scan_active"
+#
+
+#
+# Host "127.0.0.1"
+# Port 411
+#
+
+#
+# Device "/dev/md0"
+# IgnoreSelected false
+#
+
+#
+#
+# Server "localhost"
+# Key "page_key"
+#
+# Regex "(\\d+) bytes sent"
+# ExcludeRegex ""
+# DSType CounterAdd
+# Type "ipt_octets"
+# Instance "type_instance"
+#
+#
+#
+
+#
+# Socket "/var/run/memcached.sock"
+# or:
+# Host "127.0.0.1"
+# Port "11211"
+#
+
+#
+#
+# Host "database.serv.er"
+# Port "3306"
+# User "db_user"
+# Password "secret"
+# Database "db_name"
+# MasterStats true
+#
+#
+#
+# Host "localhost"
+# Socket "/var/run/mysql/mysqld.sock"
+# SlaveStats true
+# SlaveNotifications true
+#
+#
+
+#
+# Interface "All"
+# VerboseInterface "All"
+# QDisc "eth0" "pfifo_fast-1:0"
+# Class "ppp0" "htb-1:10"
+# Filter "ppp0" "u32-1:0"
+# IgnoreSelected false
+#
+
+#
+# # client setup:
+# Server "ff18::efc0:4a42" "25826"
+#
+# SecurityLevel Encrypt
+# Username "user"
+# Password "secret"
+# Interface "eth0"
+#
+# TimeToLive "128"
+#
+# # server setup:
+# Listen "ff18::efc0:4a42" "25826"
+#
+# SecurityLevel Sign
+# AuthFile "/etc/collectd/passwd"
+# Interface "eth0"
+#
+# MaxPacketSize 1024
+#
+# # proxy setup (client and server as above):
+# Forward true
+#
+# # statistics about the network plugin itself
+# ReportStats false
+#
+# # "garbage collection"
+# CacheFlush 1800
+#
+
+
+ URL "http://localhost/nginx_status?auto"
+ VerifyPeer false
+ VerifyHost false
+
+
+#
+# OkayTimeout 1000
+# WarningTimeout 5000
+# FailureTimeout 0
+#
+
+#
+# SMTPServer "localhost"
+# SMTPPort 25
+# SMTPUser "my-username"
+# SMTPPassword "my-password"
+# From "collectd@main0server.com"
+# # on .
+# # Beware! Do not use not more than two placeholders (%)!
+# Subject "[collectd] %s on %s!"
+# Recipient "email1@domain1.net"
+# Recipient "email2@domain2.com"
+#
+
+#
+# Host "localhost"
+# Port 123
+# ReverseLookups false
+#
+
+#
+# UPS "upsname@hostname:port"
+#
+
+#
+# Host "127.0.0.1"
+# Port "2006"
+# CollectLinks "Summary"
+# CollectRoutes "Summary"
+# CollectTopology "Summary"
+#
+
+#
+# StatusFile "/etc/openvpn/openvpn-status.log"
+# ImprovedNamingSchema false
+# CollectCompression true
+# CollectIndividualUsers true
+# CollectUserCount false
+#
+
+#
+# IncludeDir "/my/include/path"
+# BaseName "Collectd::Plugins"
+# EnableDebugger ""
+# LoadPlugin Monitorus
+# LoadPlugin OpenVZ
+#
+#
+# Foo "Bar"
+# Qux "Baz"
+#
+#
+
+#
+# Address "::0"
+# Port "30002"
+#
+# Host "host name"
+# Server "server name"
+# Script "script name"
+#
+#
+
+#
+# Host "host.foo.bar"
+# Host "host.baz.qux"
+# Interval 1.0
+# Timeout 0.9
+# TTL 255
+# SourceAddress "1.2.3.4"
+# Device "eth0"
+# MaxMissed -1
+#
+
+#
+#
+# Statement "SELECT magic FROM wizard WHERE host = $1;"
+# Param hostname
+#
+#
+# Type gauge
+# InstancePrefix "magic"
+# ValuesFrom "magic"
+#
+#
+#
+#
+# Statement "SELECT COUNT(type) AS count, type \
+# FROM (SELECT CASE \
+# WHEN resolved = 'epoch' THEN 'open' \
+# ELSE 'resolved' END AS type \
+# FROM tickets) type \
+# GROUP BY type;"
+#
+#
+# Type counter
+# InstancePrefix "rt36_tickets"
+# InstancesFrom "type"
+# ValuesFrom "count"
+#
+#
+#
+#
+# Host "hostname"
+# Port 5432
+# User "username"
+# Password "secret"
+#
+# SSLMode "prefer"
+# KRBSrvName "kerberos_service_name"
+#
+# Query magic
+#
+#
+#
+# Interval 60
+# Service "service_name"
+#
+# Query backend # predefined
+# Query rt36_tickets
+#
+#
+
+#
+#
+# Collect "latency"
+# Collect "udp-answers" "udp-queries"
+# Socket "/var/run/pdns.controlsocket"
+#
+#
+# Collect "questions"
+# Collect "cache-hits" "cache-misses"
+# Socket "/var/run/pdns_recursor.controlsocket"
+#
+# LocalSocket "/opt/collectd/var/run/collectd-powerdns"
+#
+
+#
+# Process "name"
+# ProcessMatch "foobar" "/usr/bin/perl foobar\\.pl.*"
+#
+
+#
+# Value "/^Tcp:/"
+# IgnoreSelected false
+#
+
+#
+# ModulePath "/path/to/your/python/modules"
+# LogTraces true
+# Interactive true
+# Import "spam"
+#
+#
+# spam "wonderful" "lovely"
+#
+#
+
+#
+# DaemonAddress "unix:/var/run/rrdcached.sock"
+# DataDir "/var/lib/rrdcached/db/collectd"
+# CreateFiles true
+# CollectStatistics true
+#
+
+#
+# DataDir "/var/lib/collectd/rrd"
+# CacheTimeout 120
+# CacheFlush 900
+# WritesPerSecond 30
+# RandomTimeout 0
+#
+# The following settings are rather advanced
+# and should usually not be touched:
+# StepSize 10
+# HeartBeat 20
+# RRARows 1200
+# RRATimespan 158112000
+# XFF 0.1
+#
+
+#
+# SensorConfigFile "/etc/sensors3.conf"
+# Sensor "it8712-isa-0290/temperature-temp1"
+# Sensor "it8712-isa-0290/fanspeed-fan3"
+# Sensor "it8712-isa-0290/voltage-in8"
+# IgnoreSelected false
+#
+
+# See /usr/share/doc/collectd/examples/snmp-data.conf.gz for a
+# comprehensive sample configuration.
+#
+#
+# Type "voltage"
+# Table false
+# Instance "input_line1"
+# Scale 0.1
+# Values "SNMPv2-SMI::enterprises.6050.5.4.1.1.2.1"
+#
+#
+# Type "users"
+# Table false
+# Instance ""
+# Shift -1
+# Values "HOST-RESOURCES-MIB::hrSystemNumUsers.0"
+#
+#
+# Type "if_octets"
+# Table true
+# InstancePrefix "traffic"
+# Instance "IF-MIB::ifDescr"
+# Values "IF-MIB::ifInOctets" "IF-MIB::ifOutOctets"
+#
+#
+#
+# Address "192.168.0.2"
+# Version 1
+# Community "community_string"
+# Collect "std_traffic"
+# Inverval 120
+#
+#
+# Address "192.168.0.42"
+# Version 2
+# Community "another_string"
+# Collect "std_traffic" "hr_users"
+#
+#
+# Address "192.168.0.3"
+# Version 1
+# Community "more_communities"
+# Collect "powerplus_voltge_input"
+# Interval 300
+#
+#
+
+#
+# ReportByDevice false
+#
+
+#
+#
+# Instance "slabinfo"
+# Separator " "
+#
+# Type gauge
+# InstancePrefix "active_objs"
+# InstancesFrom 0
+# ValuesFrom 1
+#
+#
+# Type gauge
+# InstancePrefix "objperslab"
+# InstancesFrom 0
+# ValuesFrom 4
+#
+#
+#
+
+
+
+ # cache performance
+
+ Instance "graphite_web"
+
+ Regex "Request-Cache hit "
+ DSType "CounterInc"
+ Type "counter"
+ Instance "request_cache_hit"
+
+
+ Regex "Request-Cache miss "
+ DSType "CounterInc"
+ Type "counter"
+ Instance "request_cache_miss"
+
+
+ Regex "CarbonLink creating a new socket "
+ DSType "CounterInc"
+ Type "counter"
+ Instance "socket_create_count"
+
+
+ Regex "CarbonLink cache-query request "
+ DSType "CounterInc"
+ Type "counter"
+ Instance "query_count"
+
+
+ Regex "CarbonLink set-metadata request "
+ DSType "CounterInc"
+ Type "counter"
+ Instance "set-metadata_count"
+
+
+ Regex "Data-Cache hit "
+ DSType "CounterInc"
+ Type "counter"
+ Instance "data_cache_hit"
+
+
+ Regex "Data-Cache miss "
+ DSType "CounterInc"
+ Type "counter"
+ Instance "data_cache_miss"
+
+
+
+ # rendering performance
+
+ Instance "graphite_web"
+
+ # PNG's
+
+ Regex "Rendered PNG in ([0-9\.]+) seconds"
+ DSType "CounterInc"
+ Type "requests"
+ Instance "render_png_count"
+
+
+ Regex "Rendered PNG in ([0-9\.]+) seconds"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "render_png_time_min"
+
+
+ Regex "Rendered PNG in ([0-9\.]+) seconds"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "render_png_time_max"
+
+
+ Regex "Rendered PNG in ([0-9\.]+) seconds"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "render_png_time_avg"
+
+
+ # pickle (carbonlink)
+
+ Regex "Total pickle rendering time ([0-9\.]+)"
+ DSType "CounterInc"
+ Type "counter"
+ Instance "render_pickle_count"
+
+
+ Regex "Total pickle rendering time ([0-9\.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "render_pickle_time_min"
+
+
+ Regex "Total pickle rendering time ([0-9\.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "render_pickle_time_max"
+
+
+ Regex "Total pickle rendering time ([0-9\.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "render_pickle_time_avg"
+
+
+ # rawData (json, csv, etc)
+
+ Regex "Total rawData rendering time ([0-9\.]+)"
+ DSType "CounterInc"
+ Type "counter"
+ Instance "render_rawdata_count"
+
+
+ Regex "Total rawData rendering time ([0-9\.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "render_rawdata_time_min"
+
+
+ Regex "Total rawData rendering time ([0-9\.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "render_rawdata_time_max"
+
+
+ Regex "Total rawData rendering time ([0-9\.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "render_rawdata_time_avg"
+
+
+ # total render time
+
+ Regex "Total rendering time ([0-9\.]+) seconds"
+ DSType "CounterInc"
+ Type "counter"
+ Instance "total_render_count"
+
+
+ Regex "Total rendering time ([0-9\.]+) seconds"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "total_render_time_min"
+
+
+ Regex "Total rendering time ([0-9\.]+) seconds"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "total_render_time_max"
+
+
+ Regex "Total rendering time ([0-9\.]+) seconds"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "total_render_time_avg"
+
+
+ # cached response time
+
+ Regex "Returned cached response in ([0-9\.]+) seconds"
+ DSType "CounterInc"
+ Type "counter"
+ Instance "cached_response_time_count"
+
+
+ Regex "Returned cached response in ([0-9\.]+) seconds"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "cached_response_time_min"
+
+
+ Regex "Returned cached response in ([0-9\.]+) seconds"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "cached_response_time_max"
+
+
+ Regex "Returned cached response in ([0-9\.]+) seconds"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "cached_response_time_avg"
+
+
+ # data retrieval time
+
+ Regex "Retrieval of [^ ]+ took ([0-9\.]+)"
+ DSType "CounterInc"
+ Type "counter"
+ Instance "retrieval_count"
+
+
+ Regex "Retrieval of [^ ]+ took ([0-9\.]+)"
+ DSType "GaugeMin"
+ Type "response_time"
+ Instance "retrieval_time_min"
+
+
+ Regex "Retrieval of [^ ]+ took ([0-9\.]+)"
+ DSType "GaugeMax"
+ Type "response_time"
+ Instance "retrieval_time_max"
+
+
+ Regex "Retrieval of [^ ]+ took ([0-9\.]+)"
+ DSType "GaugeAverage"
+ Type "response_time"
+ Instance "retrieval_time_avg"
+
+
+#
+# Instance "exim"
+#
+# Regex "S=([1-9][0-9]*)"
+# DSType "CounterAdd"
+# Type "ipt_bytes"
+# Instance "total"
+#
+#
+# Regex "\\"
+# ExcludeRegex "\\.*mail_spool defer"
+# DSType "CounterInc"
+# Type "counter"
+# Instance "local_user"
+#
+#
+
+
+#
+# ListeningPorts false
+# LocalPort "25"
+# RemotePort "25"
+#
+
+#
+# Host "127.0.0.1"
+# Port "51234"
+# Server "8767"
+#
+
+#
+# Device "/dev/ttyUSB0"
+# Retries 0
+#
+
+#
+# ForceUseProcfs false
+# Device "THRM"
+# IgnoreSelected false
+#
+
+#
+# Host "localhost"
+# Port "1978"
+#
+
+#
+# SocketFile "/var/run/collectd-unixsock"
+# SocketGroup "collectd"
+# SocketPerms "0660"
+# DeleteSocket false
+#
+
+#
+# UUIDFile "/etc/uuid"
+#
+
+#
+#
+# CollectCache true
+# CollectBackend true
+# CollectConnections true
+# CollectSHM true
+# CollectESI false
+# CollectFetch false
+# CollectHCB false
+# CollectSMA false
+# CollectSMS false
+# CollectSM false
+# CollectTotals false
+# CollectWorkers false
+#
+#
+#
+# CollectCache true
+#
+#
+
+#
+# Verbose false
+#
+
+
+
+ Host "localhost"
+# Port "2003"
+ Prefix "collectd."
+ Protocol "tcp"
+# Postfix "collectd"
+# StoreRates false
+# AlwaysAppendDS false
+# EscapeCharacter "_"
+
+
+
+#
+#
+# User "collectd"
+# Password "secret"
+# VerifyPeer true
+# VerifyHost true
+# CACert "/etc/ssl/ca.crt"
+# Format "Command"
+# StoreRates false
+#
+#
+
+#
+#
+# Host "localhost"
+# Port "27017"
+# Timeout 1000
+# StoreRates false
+#
+#
+
+Include "/etc/collectd/collectd.conf.d/*.conf"
diff --git a/conf/etc/nginx/sites-enabled/graphite-statsd.conf b/conf/etc/nginx/sites-enabled/graphite-statsd.conf
index 998ed14..46142bb 100644
--- a/conf/etc/nginx/sites-enabled/graphite-statsd.conf
+++ b/conf/etc/nginx/sites-enabled/graphite-statsd.conf
@@ -3,6 +3,13 @@ server {
root /opt/graphite/static;
index index.html;
+ location /nginx_status {
+ stub_status on;
+ access_log off;
+ allow 127.0.0.1;
+ deny all;
+ }
+
location /media {
# django admin static files
alias /usr/local/lib/python3.6/dist-packages/django/contrib/admin/media/;
diff --git a/conf/etc/service/collectd/run b/conf/etc/service/collectd/run
new file mode 100644
index 0000000..57db6a3
--- /dev/null
+++ b/conf/etc/service/collectd/run
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+[[ -n ${COLLECTD} ]] || exit 1
+exec /usr/sbin/collectd -f -C /etc/collectd/collectd.conf
\ No newline at end of file