Skip to content

Instantly share code, notes, and snippets.

@cdelaitre
Last active March 22, 2021 20:01
Show Gist options
  • Star 33 You must be signed in to star a gist
  • Fork 11 You must be signed in to fork a gist
  • Save cdelaitre/85949d8b697359a319e30a678e23d8bd to your computer and use it in GitHub Desktop.
Save cdelaitre/85949d8b697359a319e30a678e23d8bd to your computer and use it in GitHub Desktop.
Monitor Docker Swarm with the InfluxData TICK Stack
version: '3'
services:
# FRONT
chronograf:
# Full tag list: https://hub.docker.com/r/library/chronograf/tags/
image: chronograf
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
restart_policy:
condition: on-failure
volumes:
# Mount for chronograf database
- chronograf-data:/var/lib/chronograf
ports:
# The WebUI for Chronograf is served on port 8888
- "8888:8888"
networks:
- influx
depends_on:
- kapacitor
- influxdb
# MIDDLE
kapacitor:
# Full tag list: https://hub.docker.com/r/library/kapacitor/tags/
image: kapacitor
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
restart_policy:
condition: on-failure
volumes:
# Mount for kapacitor data directory
- kapacitor-data:/var/lib/kapacitor
# Mount for kapacitor configuration
- /etc/kapacitor/config:/etc/kapacitor
ports:
# The API for Kapacitor is served on port 9092
- "9092:9092"
networks:
- influx
depends_on:
- influxdb
# BACK
telegraf:
# Full tag list: https://hub.docker.com/r/library/telegraf/tags/
image: telegraf
deploy:
mode: global
restart_policy:
condition: on-failure
volumes:
# Mount for telegraf configuration
- /etc/telegraf:/etc/telegraf
# Mount for Docker API access
- /var/run/docker.sock:/var/run/docker.sock
networks:
- influx
depends_on:
- influxdb
# DATABASE
influxdb:
# Full tag list: https://hub.docker.com/r/library/influxdb/tags/
image: influxdb
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
restart_policy:
condition: on-failure
volumes:
# Mount for influxdb data directory
- influxdb-data:/var/lib/influxdb
# Mount for influxdb configuration
- /etc/influxdb/config:/etc/influxdb
ports:
# The API for InfluxDB is served on port 8086
- "8086:8086"
networks:
- influx
networks:
influx:
volumes:
chronograf-data:
kapacitor-data:
influxdb-data:
@cdelaitre
Copy link
Author

cdelaitre commented Jun 24, 2017

Requirements

  • a docker swarm with n managers, p workers

1/ Prepare configuration files

2/ Copy and Run the stack

  • on a manager :
    • copy the above docker-compose-tick.yml file
    • run command :
docker stack deploy --compose-file docker-compose-tick.yml tick

Advises
If you have more than one manager (and you should), as distributed filesystem is not yet available within docker, to avoid data loss upon restart, I advise you to :

  • In docker-compose-tick.yml set the constraint node to one manager by hostname :
constraints:
  - node.hostname == <ONE_MANAGER_NODE_HOSTNAME>
  • At the end of telegraf.conf, only keep inputs.influxdb configuration on the manager node where influxdb is constrained :
[[inputs.influxdb]]
  urls = ["http://influxdb:8086/debug/vars"]

3/ Set up

Caution

  • influxdb and kapacitor components are not clustered

@cdelaitre
Copy link
Author

cdelaitre commented Jun 24, 2017

screen shot 06-28-17 at 11 08 am
screen shot 06-26-17 at 11 12 pm
screen shot 06-28-17 at 11 17 am

@jackzampolin
Copy link

This looks awesome! I would definitely advise taking the sample documentation server out of there. Also we now ship an official chronograf image. If you ever have any issues pop over to community.influxdata.com!

@cdelaitre
Copy link
Author

cdelaitre commented Jun 26, 2017

Thanks, I've updated the stack with the new official chronograf image.

@rdxmb
Copy link

rdxmb commented Jan 23, 2018

Hello, thanks for sharing this stack-file. I've just made a fork and updated things for docker stack - deployments.
I think this file should be updated with the fork - for it is linked in the official influx docs.
Here it is: https://gist.github.com/rdxmb/cfc9a6bec31b36048ba2cfd8a908e198

What I have changed:

Kind regards!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment