Some checks failed
Sync infra to hosts / sync-beta (push) Has been skipped
Sync infra to hosts / sync-prod (push) Has been skipped
Sync infra to hosts / sync-dev (push) Failing after 6s
secrets-guard / encrypted (push) Successful in 6s
shell-lint / shellcheck (push) Successful in 13s
Validate observability stack / validate (push) Successful in 17s
PR build (required check) / changes (pull_request) Successful in 6s
secrets-guard / encrypted (pull_request) Successful in 5s
PR build (required check) / build-backend (pull_request) Has been skipped
shell-lint / shellcheck (pull_request) Successful in 6s
PR build (required check) / build-frontend (pull_request) Has been skipped
PR build (required check) / validate-observability (pull_request) Successful in 18s
PR build (required check) / gate (pull_request) Successful in 2s
72 lines
2.2 KiB
YAML
72 lines
2.2 KiB
YAML
# Loki — the single log store for the whole Thermograph fleet: prod and beta
|
|
# (both on vps2, as separate Swarm stacks) and dev (vps1, mesh-only, its own
|
|
# compose project). 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
|