modelRT/deploy/k8s/alloy-configmap.yaml

82 lines
2.0 KiB
YAML

apiVersion: v1
kind: ConfigMap
metadata:
name: alloy-config
namespace: default
data:
config.alloy: |
// 发现集群内所有 Pod
discovery.kubernetes "pods" {
role = "pod"
}
// 重写元数据标签,并只保留带 app label 的 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"
}
rule {
source_labels = ["__meta_kubernetes_pod_label_app"]
target_label = "app"
}
// 只采集有 app label 的 Pod
rule {
source_labels = ["__meta_kubernetes_pod_label_app"]
action = "keep"
regex = ".+"
}
}
// 通过 Kubernetes API 抓取容器日志(无需挂载宿主机日志目录)
loki.source.kubernetes "pods" {
targets = discovery.relabel.pods.output
forward_to = [loki.process.parse.receiver]
}
// 解析 zap 输出的 JSON 日志,并将关键字段提升为 Loki Label
loki.process "parse" {
forward_to = [loki.write.default.receiver]
// 解析结构化字段
stage.json {
expressions = {
level = "level",
traceID = "traceID",
spanID = "spanID",
caller = "caller",
pod = "pod",
namespace = "namespace",
node = "node",
}
}
// 提升为 Label,支持在 Grafana 中按实例/Trace 过滤
stage.labels {
values = {
level = "",
traceID = "",
pod = "",
namespace = "",
node = "",
}
}
}
// 推送到 Loki
loki.write "default" {
endpoint {
url = "http://loki-service:3100/loki/api/v1/push"
}
}