Files
alo-cluster/services/loki.hcl
2025-11-04 12:58:15 +00:00

136 lines
3.5 KiB
HCL

job "loki" {
datacenters = ["alo"]
type = "service"
update {
max_parallel = 1
health_check = "checks"
min_healthy_time = "10s"
healthy_deadline = "3m"
progress_deadline = "5m"
}
group "loki" {
count = 1
# Run on primary storage node (zippy) for local disk performance
# TODO: move to fractal once it's converted to NixOS (spinning disks OK for log data)
constraint {
attribute = "${meta.storage_role}"
value = "primary"
}
restart {
attempts = 3
interval = "5m"
delay = "25s"
mode = "delay"
}
network {
port "loki" {
# static so that it can be hardcoded in the grafana data source
static = 3100
}
}
task "loki" {
driver = "docker"
config {
image = "grafana/loki:2.9.13"
args = [
"-config.file",
"local/loki/local-config.yaml",
]
ports = ["loki"]
volumes = ["/data/services/loki:/loki"]
}
template {
data = <<EOH
auth_enabled: false
server:
http_listen_port: 3100
ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
# Any chunk not receiving new logs in this time will be flushed
chunk_idle_period: 1h
# All chunks will be flushed when they hit this age, default is 1h
max_chunk_age: 1h
# Loki will attempt to build chunks up to 1.5MB, flushing if chunk_idle_period or max_chunk_age is reached first
chunk_target_size: 1048576
# Must be greater than index read cache TTL if using an index cache (Default index read cache TTL is 5m)
chunk_retain_period: 30s
max_transfer_retries: 0 # Chunk transfers disabled
wal:
dir: "/tmp/wal"
schema_config:
configs:
- from: 2023-01-01
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
storage_config:
boltdb_shipper:
active_index_directory: /loki/boltdb-shipper-active
cache_location: /loki/boltdb-shipper-cache
cache_ttl: 24h # Can be increased for faster performance over longer query periods, uses more disk space
shared_store: filesystem
filesystem:
directory: /loki/chunks
compactor:
working_directory: /tmp/loki/boltdb-shipper-compactor
shared_store: filesystem
retention_enabled: true
limits_config:
reject_old_samples: true
reject_old_samples_max_age: 168h
ingestion_rate_strategy: local
ingestion_rate_mb: 10
ingestion_burst_size_mb: 20
per_stream_rate_limit: 5MB
per_stream_rate_limit_burst: 10MB
retention_period: 744h
chunk_store_config:
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: true
retention_period: 744h
EOH
destination = "local/loki/local-config.yaml"
}
resources {
cpu = 512
memory = 256
}
service {
name = "loki"
port = "loki"
check {
name = "Loki healthcheck"
port = "loki"
type = "http"
path = "/ready"
interval = "20s"
timeout = "5s"
check_restart {
limit = 3
grace = "60s"
ignore_warnings = false
}
}
tags = [
"traefik.enable=true",
"traefik.http.routers.loki.entryPoints=websecure",
"traefik.http.routers.loki.middlewares=oidc-auth@file",
"metrics",
]
}
}
}
}