Loki is a horizontally scalable, highly available, multi-tenant log aggregation system inspired by Prometheus. It indexes metadata about logs rather than the full log content, making it cost-effective and simple to operate.
Explore these resources to deepen your understanding and implementation of Loki:
- Grafana Labs Loki: Logs Collector and Monitoring System
- Docker Container Logs using Fluentd and Grafana Loki
- Log Monitoring and Alerting with Grafana Loki
Enhance your monitoring experience with pre-built dashboards for Loki:
Set up your Loki stack efficiently with these guides:
For a distributed Loki stack setup, consider this resource:
Integrate your applications and services with Loki using various logging clients. The Loki Docker driver is a popular choice for containerized environments.
Install the Loki Docker driver to enable your Docker containers to send logs directly to Loki:
$ sudo docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
Configure your docker-compose.yml to direct logs from specific services to your Loki instance:
version: '3.7'
services:
website:
image: nginx
container_name: website
restart: unless-stopped
logging:
driver: loki
options:
loki-url: http://192.168.0.4:3100/loki/api/v1/push
loki-external-labels: job=dockerlogs,stack=nginx
loki-pipeline-stages: |
- regex:
expression: '(level|lvl|severity)=(?P<level>\w+)'
- labels:
level:
To have all containers log to Loki by default, configure the Docker daemon's daemon.json file:
$ cat /etc/docker/daemon.json
{
"debug" : true,
"log-driver": "loki",
"log-opts": {
"loki-url": "https://docker:[email protected]/loki/api/v1/push",
"loki-batch-size": "300",
"loki-external-labels": "job=dev/dockerlogs,container_name={{.Name}},cluster_name=dev-ecs-cluster,hostname=ip-172-31-50-37.eu-west-1.compute.internal,aws_account=dev,environment=development"
}
}
After modifying daemon.json, restart the Docker service:
$ sudo systemctl restart docker
You can test this default configuration by running a container without explicitly setting the log driver:
$ docker run --rm -it --name foobar12 alpine echo hi
The logs from this container will be sent to Loki.
If the daemon.json is not configured for default logging, you can specify the Docker logging driver per container:
$ docker run --rm -it --log-driver loki --log-opt loki-url="https://x:[email protected]/loki/api/v1/push" --log-opt loki-external-labels="job=debug/dockerlogs" hello-world
Observe your logs within Loki:
LogCLI is a powerful command-line interface for querying and exploring logs stored in Loki. It allows you to efficiently search, filter, and analyze your log data directly from your terminal.
Refer to the LogCLI Cheatsheet to learn how to effectively use this tool for your log management needs.