thermograph/observability/loki/config.yml
emi 0862395dda
All checks were successful
secrets-guard / encrypted (push) Successful in 5s
shell-lint / shellcheck (push) Successful in 7s
Validate observability stack / validate (push) Successful in 12s
Log hygiene: Alloy CPU, Loki chunks/limits, Caddy field-stripping (#36)
2026-07-24 04:37:41 +00:00

71 lines
2.1 KiB
YAML

# Loki — the single log store for the whole Thermograph fleet (prod, beta, LAN
# dev). Every node's Alloy agent pushes here over the WireGuard mesh; Grafana
# reads from here. Single-binary, filesystem-backed: no object storage, no
# clustering — right for a three-node hobby fleet, and everything lives on one
# volume you can back up or blow away.
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
log_level: warn
common:
instance_addr: 127.0.0.1
path_prefix: /loki
storage:
filesystem:
chunks_directory: /loki/chunks
rules_directory: /loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
schema_config:
configs:
- from: 2024-01-01
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
# 30 low-rate streams almost always hit chunk_idle_period (30m default) long before
# they'd ever fill chunk_target_size, so chunks were flushed 1.98% full on average
# (972 near-empty chunks for 30MB of actual log data). Give idle streams far longer
# to accumulate before an idle flush, and cap age/size so a chunk still can't grow
# unbounded.
ingester:
chunk_idle_period: 2h
max_chunk_age: 12h
chunk_target_size: 1572864
chunk_encoding: snappy
limits_config:
# A hobby fleet's volume is tiny; keep 30 days and cap ingestion generously.
retention_period: 720h
reject_old_samples: true
reject_old_samples_max_age: 168h
max_query_series: 5000
allow_structured_metadata: true
volume_enabled: true
# No explicit ingestion/stream limits meant Loki fell back to its (much stricter)
# built-in defaults, which is why 25 pushes came back HTTP 429 with nothing in
# this file explaining why. These are sized for a three-node hobby fleet, not the
# multi-tenant defaults.
ingestion_rate_mb: 8
ingestion_burst_size_mb: 16
per_stream_rate_limit: 3MB
per_stream_rate_limit_burst: 10MB
max_global_streams_per_user: 1000
compactor:
working_directory: /loki/compactor
retention_enabled: true
delete_request_store: filesystem
# No analytics phone-home from a private box.
analytics:
reporting_enabled: false