Graphite, Statsd, and Grafana
1.6K
This repo is based on the official docker repo.
Run the test script in the test directory. Then go to port 80 on the container, log in as admin/admin, and create a chart that looks at stats/counters/example/statsd/counter/changed/count. You should see the graph working there.
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 -p 80:80 -p 81:81 -p 2003-2004:2003-2004 -p 2023-2024:2023-2024 -p 8125:8125/udp -p 8126:8126 kenwdelong/docker-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.
| 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 |
| 8080 | 8080 | Graphite internal gunicorn port (without Nginx proxying). |
| 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.
Please also note that you can freely remap container port to any host port in case of corresponding port is already occupied on host.
| Host | Container | Notes |
|---|---|---|
| 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 |
| DOCKER ASSIGNED | /var/lib/redis | Redis TagDB data (optional) |
Built using Phusion's base image.
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.
First login at: http://localhost/account/login Then update the root user's profile at: http://localhost/admin/auth/user/1/
Additional environment variables can be set to adjust performance.
Graphite stores tag information in a separate tag database (TagDB). Please check tags documentation for details.
Use COLLECTD=1 environment variable to enable local collectd instance
Use RELAY=1 environment variable to enable carbon relay instance. Use [relay] section of carbon.conf to configure it.
Read up on Graphite's post-install tasks. Focus on the storage-schemas.conf.
docker stop graphite.docker inspect graphite.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/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"
The following command will start the graphite statsd container through docker-compose
docker-compose up
Build the image yourself.
git clone https://github.com/graphite-project/docker-graphite-statsd.gitdocker 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
Content type
Image
Digest
Size
438 MB
Last updated
about 8 years ago
docker pull kenwdelong/docker-graphite-statsd