Skip to content

Setting up Grafana Loki

Prerequisites

  1. Debian12
  2. Have Grafana & Prometheus installed on the machine

Start to finish script

A script that does it for you
#!/usr/bin/env bash
set -euo pipefail

# Update and install Loki
sudo apt update
sudo apt install -y loki

# Replace config with provided default
sudo tee /etc/loki/config.yml > /dev/null <<'YAML'
auth_enabled: false

server:
http_listen_port: 3100
grpc_listen_port: 9096
log_level: debug
grpc_server_max_concurrent_streams: 1000

common:
instance_addr: 127.0.0.1
path_prefix: /tmp/loki
storage:
    filesystem:
    chunks_directory: /tmp/loki/chunks
    rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
    kvstore:
    store: inmemory

query_range:
results_cache:
    cache:
    embedded_cache:
        enabled: true
        max_size_mb: 100

limits_config:
metric_aggregation_enabled: true
enable_multi_variant_queries: true

schema_config:
configs:
    - from: 2020-10-24
    store: tsdb
    object_store: filesystem
    schema: v13
    index:
        prefix: index_
        period: 24h

pattern_ingester:
enabled: true
metric_aggregation:
    loki_address: localhost:3100

ruler:
alertmanager_url: http://localhost:9093

frontend:
encoding: protobuf
YAML

# Enable and start Loki
sudo systemctl enable --now loki

# Check status and show result
if systemctl is-active --quiet loki; then
    echo "✅ Loki is running successfully."
else
    echo "❌ Loki failed to start. Check logs with: sudo journalctl -u loki -xe"
    exit 1
fi

Step-by-step

1. Update machine and install loki

sudo apt update
sudo apt install -y loki

2. Replace the config file

Info

The current config file could be invalid, that is why you will need to replace it.

Replace the config file sudo vim /etc/loki/config.yml

Default config.yml file
auth_enabled: false

server:
http_listen_port: 3100
grpc_listen_port: 9096
log_level: debug
grpc_server_max_concurrent_streams: 1000

common:
instance_addr: 127.0.0.1
path_prefix: /tmp/loki
storage:
    filesystem:
    chunks_directory: /tmp/loki/chunks
    rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
    kvstore:
    store: inmemory

query_range:
results_cache:
    cache:
    embedded_cache:
        enabled: true
        max_size_mb: 100

limits_config:
metric_aggregation_enabled: true
enable_multi_variant_queries: true

schema_config:
configs:
    - from: 2020-10-24
    store: tsdb
    object_store: filesystem
    schema: v13
    index:
        prefix: index_
        period: 24h

pattern_ingester:
enabled: true
metric_aggregation:
    loki_address: localhost:3100

ruler:
alertmanager_url: http://localhost:9093

frontend:
encoding: protobuf


# By default, Loki will send anonymous, but uniquely-identifiable usage and configuration
# analytics to Grafana Labs. These statistics are sent to https://stats.grafana.org/
#
# Statistics help us better understand how Loki is used, and they show us performance
# levels for most users. This helps us prioritize features and documentation.
# For more information on what's sent, look at
# https://github.com/grafana/loki/blob/main/pkg/analytics/stats.go
# Refer to the buildReport method to see what goes into a report.
#
# If you would like to disable reporting, uncomment the following lines:
#analytics:
#  reporting_enabled: false