# Pinned chart: grafana/alloy 1.12.1 (app v1.19.2). # Install (deferred to deploy task, namespace prometheus): # helm upgrade --install alloy grafana/alloy --version 1.12.1 \ # --namespace prometheus --values loki/k8s/alloy-values.yaml --wait # DaemonSet ships k8s pod logs (API-tailed, no hostPath mounts) to Loki. # Scope phase 1: k8s only, compose leftovers out. controller: type: daemonset # config-reloader sidecar: p95 33M, max 43M. The chart keeps it at the top level, # not under `alloy:`. configReloader: resources: requests: memory: "32Mi" cpu: "10m" limits: memory: "128Mi" image: tag: "v1.19.2" alloy: # p95 275M, max 287M. Alloy tails every pod log and ships it to Loki, so it sits # on the same IronWolf read path the node is I/O bound on. Request is set at p95. # The chart key is `alloy.resources`. `controller.resources` is ignored silently, # which is why this pod shipped with no limits at all. resources: requests: memory: "288Mi" cpu: "50m" limits: memory: "512Mi" configMap: create: true content: | 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-gateway.prometheus.svc.cluster.local/loki/api/v1/push" } }