This repo was based on @hopsoft's docker-graphite-statsd docker image and was used as base for "official" Graphite docker image with his permission. Also, it contains parts of famous @obfuscurity's synthesize Graphite installer. Thanks a lot, Nathan and Jason!
Any suggestions / patches etc. are welcome!
Docker Image for Graphite & Statsd
Get Graphite & Statsd running instantly
Graphite & Statsd can be complex to setup. This image will have you running & collecting stats in just a few minutes.
docker run -d\ --name graphite\ --restart=always\ -p 80:80\ -p 2003-2004:2003-2004\ -p 2023-2024:2023-2024\ -p 8125:8125/udp\ -p 8126:8126\ graphiteapp/graphite-statsd
This starts a Docker container named: graphite
Please also note that you can freely remap container port to any host port in case of corresponding port is already occupied on host. It's also not mandatory to map all ports, map only required ports - please see table below.
That's it, you're done ... almost.
Includes the following components
- Nginx - reverse proxies the graphite dashboard
- Graphite - front-end dashboard
- Carbon - back-end
- Statsd - UDP based back-end proxy
|2003||2003||carbon receiver - plaintext|
|2004||2004||carbon receiver - pickle|
|2023||2023||carbon aggregator - plaintext|
|2024||2024||carbon aggregator - pickle|
|8080||8080||Graphite internal gunicorn port (without Nginx proxying).|
By default, statsd listens on the UDP port 8125. If you want it to listen on the TCP port 8125 instead, you can set the environment variable
tcp when running the container.
Please also note that you can freely remap container port to any host port in case of corresponding port is already occupied on host.
|DOCKER ASSIGNED||/opt/graphite/conf||graphite config|
|DOCKER ASSIGNED||/opt/graphite/storage||graphite stats storage|
|DOCKER ASSIGNED||/opt/graphite/webapp/graphite/functions/custom||graphite custom functions dir|
|DOCKER ASSIGNED||/etc/nginx||nginx config|
|DOCKER ASSIGNED||/opt/statsd||statsd config|
|DOCKER ASSIGNED||/etc/logrotate.d||logrotate config|
|DOCKER ASSIGNED||/var/log||log files|
Built using Phusion's base image.
- All Graphite related processes are run as daemons & monitored with runit.
- Includes additional services such as logrotate.
Start Using Graphite & Statsd
Send Some Stats
Let's fake some stats with a random counter to prove things are working.
while true; do echo -n "example:$((RANDOM % 100))|c" | nc -w 1 -u 127.0.0.1 8125; done
Visualize the Data
Open Graphite in a browser.
Secure the Django Admin
Update the default Django admin user account. The default is insecure.
- username: root
- password: root
- email: email@example.com
Change the Configuration
- Stop the container
docker stop graphite.
- Find the configuration files on the host by inspecting the container
docker inspect graphite.
- Update the desired config files.
- Restart the container
docker start graphite.
Note: If you change settings in
be sure to delete the old whisper files under
Important: Ensure your Statsd flush interval is at least as long as the highest-resolution retention.
For example, if
/opt/statsd/config.js looks like this.
storage-schemas.conf retentions are no finer grained than 10 seconds.
[all] pattern = .* retentions = 5s:12h # WRONG retentions = 10s:12h # OK retentions = 60s:12h # OK
Statsd Admin Management Interface
A management interface (default on port 8126) allows you to manage statsd & retrieve stats.
# show all current counters echo counters | nc localhost 8126
A Note on Volumes
You may find it useful to mount explicit volumes so configs & data can be managed from a known location on the host.
Simply specify the desired volumes when starting the container.
docker run -d\ --name graphite\ --restart=always\ -v /path/to/graphite/configs:/opt/graphite/conf\ -v /path/to/graphite/data:/opt/graphite/storage\ -v /path/to/statsd:/opt/statsd\ graphiteapp/graphite-statsd
Note: The container will initialize properly if you mount empty volumes at
If you have a Memcached server running, and want to Graphite use it, you can do it using environment variables, like this:
docker run -d\ --name graphite\ --restart=always\ -p 80:80\ -p 2003-2004:2003-2004\ -p 2023-2024:2023-2024\ -p 8125:8125/udp\ -p 8126:8126\ -e "MEMCACHE_HOST=127.0.0.1:11211"\ # Memcached host. Separate by comma more than one servers. -e "CACHE_DURATION=60"\ # in seconds graphiteapp/graphite-statsd
Also, you can specify more than one memcached server, using commas:
Running through docker-compose
The following command will start the graphite statsd container through docker-compose
- Introduction to Docker
- Official Statsd Documentation
- Practical Guide to StatsD/Graphite Monitoring
- Configuring Graphite for StatsD
Build the image yourself.
git clone https://github.com/graphite-project/docker-graphite-statsd.git
docker build -t graphiteapp/graphite-statsd .
Alternate versions can be specified via
versionwill set the version/branch used for graphite-web, carbon & whisper
whisper_versionset the version/branch used for individual components
statsd_versionsets the version/branch used for statsd (note statsd version is prefixed with v)
Alternate repositories can also be specified with the build args
To build an image from latest graphite, whisper & carbon master, run:
docker build -t graphiteapp/graphite-statsd . --build-arg version=master
To build an image using a fork of graphite-web, run:
docker build -t forked/graphite-statsd . --build-arg version=master --build-arg graphite_repo=https://github.com/forked/graphite-web.git