82 lines
2.0 KiB
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"
|
|
}
|
|
}
|