// Grafana Alloy -- ships the logs of every pod in the cluster to Loki. // Reads through the Kubernetes API (no /var/log mount required). logging { level = "info" format = "logfmt" } discovery.kubernetes "pods" { role = "pod" } discovery.relabel "pod_logs" { 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" } rule { source_labels = ["__meta_kubernetes_pod_node_name"] target_label = "node" } rule { source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_name"] target_label = "app" } rule { source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_component"] target_label = "component" } // job = /: the usual Loki convention. rule { source_labels = ["__meta_kubernetes_namespace", "__meta_kubernetes_pod_container_name"] separator = "/" target_label = "job" } // Only collect containers on the current node (DaemonSet). rule { source_labels = ["__meta_kubernetes_pod_node_name"] regex = env("HOSTNAME_NODE") action = "keep" } } loki.source.kubernetes "pods" { targets = discovery.relabel.pod_logs.output forward_to = [loki.write.default.receiver] } loki.write "default" { endpoint { url = "http://loki:3100/loki/api/v1/push" } external_labels = { cluster = "orbstack", } }