You can use this docker-compose setup to run Docker for development or in production.
- Running in Simple Scalable Deployment mode with 3 replicas for
readandwritetargets - Memberlist for consistent hash ring
- Minio for S3-compatible storage for chunks & indexes
- nginx gateway which acts as a reverse-proxy to the read/write paths
- Promtail for logs
- An optional log-generator
- Multi-tenancy enabled (
dockeras the tenant ID) - Configuration for interactive debugging (see Debugging section below)
- Prometheus for metric collection
The below diagram describes the various components of this deployment, and how data flows between them.
graph LR
Grafana --> |Query logs| nginx["nginx (port: 8080)"]
Promtail -->|Send logs| nginx
nginx -.-> |read path| QueryFrontend
nginx -.-> |write path| Distributor
subgraph LokiRead["loki -target=read"]
QueryFrontend["query-frontend"]
Querier["querier"]
QueryFrontend -.-> Querier
end
subgraph Minio["Minio Storage"]
Chunks
Indexes
end
subgraph LokiWrite["loki -target=write"]
Distributor["distributor"] -.-> Ingester["ingester"]
Ingester
end
Querier --> |reads| Chunks & Indexes
Ingester --> |writes| Chunks & Indexes
Simply run docker-compose up and all the components will start.
It'll take a few seconds for all the components to start up and register in the ring. Once all instances are ACTIVE, Loki will start accepting reads and writes. All logs will be stored with the tenant ID docker.
All data will be stored in the .data directory.
The nginx gateway runs on port 8080 and you can access Loki through it.
Prometheus runs on port 9090, and you can access all metrics from Loki & Promtail here.
Grafana runs on port 3000, and there are Loki & Prometheus datasources enabled by default.
/ring- view all components registered in the hash ring/config- view the configuration used by Loki/memberlist- view all components in the memberlist cluster- all other Loki API endpoints
First, you'll need to build a Loki image that includes and runs delve.
Run make loki-debug-image from the root of this project. Grab the image name from the output (it'll look like grafana/loki:...-debug) and replace the Loki images in docker-compose.yaml.
Next, view the docker-compose.yaml file and uncomment the sections related to debugging.
You can follow this guide to enable debugging in GoLand, but the basic steps are:
- Bind a host port to one of the Loki services
- Add a Go Remote debug configuration in GoLand and use that port
- Run
docker-compose up - Set a breakpoint and start the debug configuration
- Build/debug something awesome :)