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!
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
That's it, you're done ... almost.
- Nginx - reverse proxies the graphite dashboard
- Graphite - front-end dashboard
- Carbon - back-end
- Statsd - UDP based back-end proxy
Host | Container | Service |
---|---|---|
80 | 80 | nginx |
2003 | 2003 | carbon receiver - plaintext |
2004 | 2004 | carbon receiver - pickle |
2023 | 2023 | carbon aggregator - plaintext |
2024 | 2024 | carbon aggregator - pickle |
8125 | 8125 | statsd |
8126 | 8126 | statsd admin |
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 STATSD_INTERFACE
to tcp
when running the container.
Host | Container | Notes |
---|---|---|
DOCKER ASSIGNED | /opt/graphite/conf | graphite config |
DOCKER ASSIGNED | /opt/graphite/storage | graphite stats storage |
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.
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
Open Graphite in a browser.
Update the default Django admin user account. The default is insecure.
- username: root
- password: root
- email: [email protected]
First login at: http://localhost/account/login Then update the root user's profile at: http://localhost/admin/auth/user/1/
Read up on Graphite's post-install tasks. Focus on the storage-schemas.conf.
- 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 /opt/graphite/conf/storage-schemas.conf
be sure to delete the old whisper files under /opt/graphite/storage/whisper/
.
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.
flushInterval: 10000
Ensure that 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
A management interface (default on port 8126) allows you to manage statsd & retrieve stats.
# show all current counters
echo counters | nc localhost 8126
More info & additional commands.
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
/opt/graphite
, /opt/graphite/conf
, /opt/graphite/storage
, or /opt/statsd
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:
-e "MEMCACHE_HOST=127.0.0.1:11211,10.0.0.1:11211"
- 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 --build-arg
:
version
will set the version/branch used for graphite-web, carbon & whispergraphite_version
,carbon_version
&whisper_version
set the version/branch used for individual componentsstatsd_version
sets the version/branch used for statsd (note statsd version is prefixed with v)
Alternate repositories can also be specified with the build args graphite_repo
, carbon_repo
, whisper_repo
& statsd_repo
.
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