Hello,
I’m using Alloy discovery.kubernetes with role as pod .
My logs are present at the location on hostPath:
/var/log/pods/app-namespace_app-pod-deployment-856f4c4d55-vh4d8_c5f09df9-9676-48ac-9c33-df2a7ef457e4/app-containername/0.log
I’m using source_labels for app-namespace_app, app-pod-deployment-856f4c4d55-vh4d8, c5f09df9-9676-48ac-9c33-df2a7ef457e4, container-name
“__meta_kubernetes_namespace”,
“__meta_kubernetes_pod_name”,
“__meta_kubernetes_pod_uid”,
“__meta_kubernetes_pod_container_name”
My rule looks something like this
rule {
source_labels = [“__meta_kubernetes_namespace”, “__meta_kubernetes_pod_name”, “__meta_kubernetes_pod_uid”, “_meta_kubernetes_pod_container_name"]
action = “replace”
target_label = “path”
separator = “”
regex = "(.*)_(.)_(.)_(.*)"
replacement = "/var/log/pods/$1_$2_$3/$4/*.log”
}
By using _ , my paths are printed something like this(noticied during the debug)
/var/log/pods/c5f09df9-9676-48ac-9c33-df2a7ef457e4/container-name/.log
Just to see if the source_labels have any values at all, i changed my replacement to use /, as below
rule {
source_labels = [“__meta_kubernetes_namespace”, “__meta_kubernetes_pod_name”, “__meta_kubernetes_pod_uid”, “__meta_kubernetes_pod_container_name”]
action = “replace”
target_label = “path”
separator = “"
regex = "(.*)_(.)_(.)_(.)"
replacement = "/var/log/pods/$1/$2/$3/$4/.log”
}
I get below value
/var/log/pods/app-namespace_app/app-pod-deployment-856f4c4d55-vh4d8/c5f09df9-9676-48ac-9c33-df2a7ef457e4/container-name/.log
The wildcard is not getting resolved in both the cases.
I’m using alloy:v1.10.2
Could you please help ? I’m stuck here from days!!
My Entire Config
discovery.kubernetes "pods" {
role = "pod"
}
discovery.relabel "pod_logs" {
targets = discovery.kubernetes.pods.targets
rule {
source_labels = ["__meta_kubernetes_namespace"]
action = "replace"
target_label = "namespace"
}
rule {
source_labels = ["__meta_kubernetes_pod_name"]
action = "replace"
target_label = "pod"
}
rule {
source_labels = ["__meta_kubernetes_pod_container_name"]
action = "replace"
target_label = "container"
}
rule {
source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_name"]
action = "replace"
target_label = "app"
}
rule {
source_labels = ["__meta_kubernetes_namespace", "__meta_kubernetes_pod_container_name"]
action = "replace"
target_label = "job"
separator = "/"
replacement = "$1"
}
rule {
source_labels = ["__meta_kubernetes_namespace", "__meta_kubernetes_pod_name", "__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"]
action = "replace"
target_label = "__path__"
separator = "_"
regex = "(.*)_(.*)_(.*)_(.*)"
replacement = "/var/log/pods/$1_$2_$3/$4/0.log"
}
rule {
source_labels = ["__meta_kubernetes_pod_container_id"]
action = "replace"
target_label = "container_runtime"
regex = "^(\\S+):\\/\\/.+$"
replacement = "$1"
}
}
loki.write "loki_output" {
endpoint {
url = "https://vm.de.xx.com/logs/loki/api/v1/push"
tls_config {
insecure_skip_verify = true
}
}
external_labels = {
source = "alloy_k8s",
}
}
loki.process "pod_logs" {
stage.static_labels {
values = {
cluster = env("HOSTNAME"),
}
}
forward_to = [loki.write.loki_output.receiver]
}
loki.source.file "pod_logs" {
targets = discovery.relabel.pod_logs.output
forward_to = [loki.process.pod_logs.receiver]
}
discovery.relabel "container_logs" {
targets = discovery.kubernetes.pods.targets
rule {
source_labels = ["__meta_kubernetes_namespace"]
action = "replace"
target_label = "namespace"
}
rule {
source_labels = ["__meta_kubernetes_pod_name"]
action = "replace"
target_label = "pod"
}
rule {
source_labels = ["__meta_kubernetes_pod_container_name"]
action = "replace"
target_label = "container"
}
rule {
source_labels = ["__meta_kubernetes_pod_name", "__meta_kubernetes_namespace", "__meta_kubernetes_pod_container_name", "__meta_kubernetes_pod_uid"]
separator = "_"
regex = "(.*)_(.*)_(.*)_(.*)"
target_label = "__path__"
replacement = "/var/log/containers/$1_$2_$3-$4.log"
action = "replace"
}
}
loki.source.file "container_logs" {
targets = discovery.relabel.container_logs.output
forward_to = [loki.process.pod_logs.receiver]
}