Run a basic Thanos setup for local development using Docker and Docker Compose.
- You need to have Docker and docker-compose installed on your machine.
- We use GNU Make to run common tasks, you need to have
makeinstalled on your machine. You can runmake -vto check if it is already installed. - Thanos source code. The easiest way to achieve this is by cloning the Thanos git repository locally using
git clone https://github.com/thanos-io/thanos. - You need to have Go installed as it is required to build Thanos.
- Modify the
THANOS_SOURCEvariable in theMakefileso that it points to the directory containing Thanos source code. This step is required to buildthanosbinary from this directory.
- Run
make up
NOTE: If you are using MacOS, run
GOOS=linux make up. This target tries to build the binary by runningmake buildinside the$THANOS_SOURCEdirectory defined in the Makefile, and then gets thethanosbinary from$GOPATH/bin/thanos. You need to set up theTHANOS_SOURCEvariable for this to work.
- Run
make down
- We need to build the
thanosbinary again in case of changes in source code, just runmake upto restart the containers with new changes, it takes care of building the binary for you. - If you want to skip building the binary, and just restart the docker containers (for example when you are testing different flags), you can run
make restartto restart the containers.
- You can run
docker-compose psto list all containers running. - Run
docker-compose logs <container-name>to view logs for a container.
Refer to docker-compose documentation for a full overview.
After running make up you would be able to access minio at http://localhost:9000. The access key is myaccesskey and the secret key is mysecretkey.
| Service | Ports | |
|---|---|---|
| prometheus_one | The first Prometheus server | 9001 |
| prometheus_two | The second Prometheus server | |
| minio | A minio instance serving as Object Storage for store, compactor and sidecars | 9000 |
| thanos_sidecar_one | First Thanos sidecar for prometheus_one | |
| thanos_sidecar_two | Second Thanos sidecar for prometheus_two | |
| thanos_querier | Thanos querier instance connected to both sidecars and Thanos store | 10902 |
| thanos_query_frontend | Thanos query frontend connected to querier | 19090 |
| thanos_compactor | Thanos compactor running with --wait and --wait-interval=3m |
10922 |
| thanos_store | A Thanos store instance connected to minio | 10912 |
There are some services which are commented out in the docker-compose.yml. You can uncomment and use them if needed.
| Service | Ports | |
|---|---|---|
| grafana | A Grafana instance with username = admin, and password = admin | 3000 |
| bucket_web | Thanos Bucket Inspector WebUI | 8080 |
| debug | A debug container running on ubuntu with thanos binary. You can use this to debug services from inside |
10902 |
| alertmanager | Prometheus Alertmanager to send alerts | 9093 |
| thanos_rule | Thanos Rule instance to create recording and alerting rules | 10932 |
You can start a debug container and/or Thanos Bucket WebUI by uncommenting the corresponding definition in docker-compose.yml.
For Alertmanager to work, you need to set the Slack webhook URL in prometheus/alertmanager.yml.
The docker-compose.yml is based on PR#2583 on Thanos GitHub repo by Darshan Chaudhary