Files
homelab/kubernetes/apps/monitoring/helmrelease-loki.yaml
k.renner 3ec5802e62
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
monitoring: pin Loki resources to prevent OOM-kills
Chart ships no defaults for singleBinary.resources, which let the kernel
OOM-kill loki-0 on 2026-05-14 (exit 137 during initial install). Pin
requests at 100m / 512Mi and limit memory to 2Gi (~4x steady-state RSS
of 540Mi at current 37 lines/sec ingest). CPU stays unburstable.
2026-05-20 14:01:19 +02:00

144 lines
3.4 KiB
YAML

apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: grafana
namespace: monitoring
spec:
interval: 24h
url: https://grafana.github.io/helm-charts
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: loki
namespace: monitoring
spec:
interval: 30m
chart:
spec:
chart: loki
version: ">=6.0.0"
sourceRef:
kind: HelmRepository
name: grafana
namespace: monitoring
install:
remediation:
retries: 3
upgrade:
remediation:
retries: 3
values:
deploymentMode: SingleBinary
loki:
auth_enabled: false
commonConfig:
replication_factor: 1
storage:
type: filesystem
limits_config:
retention_period: 2160h
ingestion_rate_mb: 10
ingestion_burst_size_mb: 20
max_streams_per_user: 10000
max_query_length: 720h
max_entries_limit_per_query: 5000
schemaConfig:
configs:
- from: "2024-01-01"
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: loki_index_
period: 24h
singleBinary:
replicas: 1
persistence:
enabled: true
storageClass: ceph-block
size: 80Gi
# Chart ships no defaults. Without a memory limit the pod is OOM-
# killed by the kernel when WAL replay / large queries spike RSS
# (lost loki-0 once on 2026-05-14 to exit 137 during initial
# install). Steady-state RSS is ~540Mi at current ingest (~37
# lines/sec); 2Gi limit gives 4x headroom for replay/query bursts.
# CPU is left unlimited so queries can burst.
resources:
requests:
cpu: 100m
memory: 512Mi
limits:
memory: 2Gi
gateway:
enabled: false
chunksCache:
enabled: false
resultsCache:
enabled: false
# Disable components not needed in SingleBinary mode
backend:
replicas: 0
read:
replicas: 0
write:
replicas: 0
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: alloy
namespace: monitoring
spec:
interval: 30m
chart:
spec:
chart: alloy
version: ">=0.12.0"
sourceRef:
kind: HelmRepository
name: grafana
namespace: monitoring
install:
remediation:
retries: 3
upgrade:
remediation:
retries: 3
values:
alloy:
configMap:
content: |
// Discover and collect K8s pod logs
discovery.kubernetes "pods" {
role = "pod"
}
discovery.relabel "pods" {
targets = discovery.kubernetes.pods.targets
rule {
source_labels = ["__meta_kubernetes_namespace"]
target_label = "namespace"
}
rule {
source_labels = ["__meta_kubernetes_pod_name"]
target_label = "pod"
}
rule {
source_labels = ["__meta_kubernetes_pod_container_name"]
target_label = "container"
}
}
loki.source.kubernetes "pods" {
targets = discovery.relabel.pods.output
forward_to = [loki.write.default.receiver]
}
loki.write "default" {
endpoint {
url = "http://loki.monitoring.svc.cluster.local:3100/loki/api/v1/push"
}
}