Table of Contents
- Docker Image for Graphite & Statsd
NOTICE: Check out the official Graphite & Statsd Docker image at https://github.com/graphite-project/docker-graphite-statsd
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.
Quick Start
docker run -d\
--name graphite\
--restart=always\
-p 80:80\
-p 81:81\
-p 2003-2004:2003-2004\
-p 2023-2024:2023-2024\
-p 8125:8125/udp\
-p 8126:8126\
hopsoft/graphite-statsd
This starts a Docker container named: graphite
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
- Grafana - front-end dashboard (more refined than Graphite)
Mapped Ports
Host, Container, Service
----, ---------, -------------------------------------------------------------------------------------------------------------------
80, 80, nginx - grafana
81, 81, nginx - graphite
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.
Mounted Volumes
Host, Container, Notes
-----------------, --------------------------, -------------------------------
DOCKER ASSIGNED, /opt/graphite/conf, graphite config
DOCKER ASSIGNED, /opt/graphite/storage, graphite stats storage
DOCKER ASSIGNED, /etc/grafana, grafana config
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
Base Image
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.
- http://localhost:81/dashboard
- http://localhost:81/render?from=-10mins&until=now&target=stats.example
Secure the Django Admin
Update the default Django admin user account. The default is insecure.
- username: root
- password: root
- email: root.graphite@mailinator.com
First login at: http://localhost:81/account/login
Then update the root user's profile at: http://localhost:81/admin/auth/user/1/
Change the Configuration
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
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
More info & additional commands.
Secure Grafana
Update the default Grafana admin account. The default is insecure.
- username: admin
- password: admin
- email: admin@localhost
First login at: http://localhost
Then update the admin user's profile at: http://localhost/admin/users/edit/1
Connect Grafana to Graphite
Visit http://localhost/datasources/new
Then configure the Graphite data source with the URL http://localhost:81
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\
hopsoft/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
Memcached config
If you want Graphite to use an existing Memcached server, set the following environment variables:
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(s) comma delimited
-e "CACHE_DURATION=60"\ # in seconds
hopsoft/graphite-statsd
Additional Reading
- Introduction to Docker
- Official Statsd Documentation
- Practical Guide to StatsD/Graphite Monitoring
- Configuring Graphite for StatsD
Contributors
Build the image yourself.
git clone https://github.com/hopsoft/docker-graphite-statsd.git
docker build -t hopsoft/graphite-statsd .