monitoring: add alloy-kube-pod-logs-scraper

This commit is contained in:
Márcio Fernandes
2026-09-13 13:36:16 +00:00
parent a1e5573330
commit ccd3888829
5 changed files with 178 additions and 0 deletions
@@ -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"
}
}
@@ -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
@@ -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
@@ -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