From ccd3888829648c7c91ebac51d772d0962b093ec7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rcio=20Fernandes?= Date: Sun, 13 Sep 2026 13:36:16 +0000 Subject: [PATCH] monitoring: add alloy-kube-pod-logs-scraper --- .../alloy/kube-pod-logs-scraper/config.alloy | 104 ++++++++++++++++++ .../kube-pod-logs-scraper/helm-release.yaml | 24 ++++ .../kube-pod-logs-scraper/helm-values.yaml | 35 ++++++ .../kube-pod-logs-scraper/kustomization.yaml | 14 +++ .../overlays/chimera/kustomization.yaml | 1 + 5 files changed, 178 insertions(+) create mode 100644 monitoring/base/alloy/kube-pod-logs-scraper/config.alloy create mode 100644 monitoring/base/alloy/kube-pod-logs-scraper/helm-release.yaml create mode 100644 monitoring/base/alloy/kube-pod-logs-scraper/helm-values.yaml create mode 100644 monitoring/base/alloy/kube-pod-logs-scraper/kustomization.yaml diff --git a/monitoring/base/alloy/kube-pod-logs-scraper/config.alloy b/monitoring/base/alloy/kube-pod-logs-scraper/config.alloy new file mode 100644 index 0000000..c8704f6 --- /dev/null +++ b/monitoring/base/alloy/kube-pod-logs-scraper/config.alloy @@ -0,0 +1,104 @@ +logging { + level = "warn" +} + + +// ============================================ +// Discovery: Kubernetes - pods +// ============================================ + +discovery.kubernetes "kube_pods" { + role = "pod" +} + +// ============================================ +// Logs: Loki config +// ============================================ + +loki.write "loki_srv" { + endpoint { + url = sys.env("LOKI_URL") + } +} + +loki.process "loki_srv" { + stage.static_labels { + values = { + cluster = sys.env("CLUSTER_NAME"), + zone = sys.env("ZONE"), + job = "integrations/kubernetes/pod-logs", + } + } + forward_to = [loki.write.loki_srv.receiver] +} + + +// ============================================ +// Loki.source kube_pod_logs +// Requirements: +// - discovery.relabel: kube_pod_logs +// - discovery.process: loki_srv +// ============================================ + +loki.source.kubernetes "kube_pod_logs" { + targets = discovery.relabel.kube_pod_logs.output + forward_to = [loki.process.loki_srv.receiver] +} + + +// ============================================ +// Discovery:relabel: kube_pod_logs +// Requirements: +// - discovery.kubernetes.role.pod: kube_pods +// ============================================ + +discovery.relabel "kube_pod_logs" { + targets = discovery.kubernetes.kube_pods.targets + rule { + source_labels = ["__meta_kubernetes_namespace"] + target_label = "namespace" + } + + rule { + source_labels = ["__meta_kubernetes_pod_name"] + regex = "^(.+?)-[0-9a-zA-Z]{4,16}(?:-[0-9a-zA-Z]{4,16})?$" + replacement = "$1" + target_label = "pod" + } + + rule { + source_labels = ["__meta_kubernetes_pod_container_name"] + target_label = "container" + } + + rule { + source_labels = ["__meta_kubernetes_node_name"] + target_label = "node_name" + } + + rule { + source_labels = [ + "__meta_kubernetes_pod_controller_name", + ] + regex = "([0-9a-z-.]+?)(-[0-9a-f]{8,10})?" + target_label = "controller" + } + + rule { + source_labels = [ + "__meta_kubernetes_pod_label_app_kubernetes_io_name", + "__meta_kubernetes_pod_label_app", + "controller_name", + "__meta_kubernetes_pod_name", + ] + regex = "^;*([^;]+)(;.*)?$" + target_label = "app" + } + + rule { + source_labels = ["__meta_kubernetes_pod_node_name"] + separator = ":" + target_label = "host" + } +} + diff --git a/monitoring/base/alloy/kube-pod-logs-scraper/helm-release.yaml b/monitoring/base/alloy/kube-pod-logs-scraper/helm-release.yaml new file mode 100644 index 0000000..ca3b130 --- /dev/null +++ b/monitoring/base/alloy/kube-pod-logs-scraper/helm-release.yaml @@ -0,0 +1,24 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: alloy-kube-pod-logs-scraper +spec: + releaseName: alloy-kube-pod-logs-scraper + interval: 1m + chart: + spec: + chart: alloy + version: 1.x.x + sourceRef: + kind: HelmRepository + name: grafana + interval: 40h + valuesFrom: + - kind: ConfigMap + name: alloy-kube-pod-logs-scraper-helm-values + valuesKey: values.yaml + + + + + diff --git a/monitoring/base/alloy/kube-pod-logs-scraper/helm-values.yaml b/monitoring/base/alloy/kube-pod-logs-scraper/helm-values.yaml new file mode 100644 index 0000000..a3695a9 --- /dev/null +++ b/monitoring/base/alloy/kube-pod-logs-scraper/helm-values.yaml @@ -0,0 +1,35 @@ +controller: + type: 'deployment' +alloy: + + # https://grafana.com/docs/alloy/latest/collect/logs-in-kubernetes/ + configMap: + create: false + name: alloy-kube-pod-logs-scraper + key: config.alloy + + extraEnv: + + - name: CLUSTER_NAME + valueFrom: + secretKeyRef: + name: alloy-global + key: cluster_name + + - name: ZONE + valueFrom: + secretKeyRef: + name: alloy-global + key: zone + + - name: LOKI_URL + valueFrom: + secretKeyRef: + name: alloy-global + key: loki_url + + - name: PROMETHEUS_URL + valueFrom: + secretKeyRef: + name: alloy-global + key: prometheus_url \ No newline at end of file diff --git a/monitoring/base/alloy/kube-pod-logs-scraper/kustomization.yaml b/monitoring/base/alloy/kube-pod-logs-scraper/kustomization.yaml new file mode 100644 index 0000000..4d5bf4a --- /dev/null +++ b/monitoring/base/alloy/kube-pod-logs-scraper/kustomization.yaml @@ -0,0 +1,14 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - helm-release.yaml + +configMapGenerator: + - name: alloy-kube-pod-logs-scraper + files: + - config.alloy=config.alloy + - name: alloy-kube-pod-logs-scraper-helm-values + files: + - values.yaml=helm-values.yaml +generatorOptions: + disableNameSuffixHash: true \ No newline at end of file diff --git a/monitoring/overlays/chimera/kustomization.yaml b/monitoring/overlays/chimera/kustomization.yaml index f21a2c9..35958df 100644 --- a/monitoring/overlays/chimera/kustomization.yaml +++ b/monitoring/overlays/chimera/kustomization.yaml @@ -4,5 +4,6 @@ namespace: monitoring resources: - alloy-global - ../../base/alloy/node-scraper + - ../../base/alloy/alloy-kube-pod-logs-scraper generatorOptions: disableNameSuffixHash: true \ No newline at end of file