1+ discovery.kubernetes "kubernetes_pods" {
2+ role = "pod"
3+ }
4+
5+ discovery.relabel "kubernetes_pods" {
6+ targets = discovery.kubernetes.kubernetes_pods.targets
7+
8+ rule {
9+ source_labels = ["__meta_kubernetes_pod_controller_name"]
10+ regex = "([0-9a-z-.]+?)(-[0-9a-f]{8,10})?"
11+ target_label = "__tmp_controller_name"
12+ }
13+
14+ rule {
15+ source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_name", "__meta_kubernetes_pod_label_app", "__tmp_controller_name", "__meta_kubernetes_pod_name"]
16+ regex = "^;*([^;]+)(;.*)?$"
17+ target_label = "app"
18+ }
19+
20+ rule {
21+ source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_instance", "__meta_kubernetes_pod_label_instance"]
22+ regex = "^;*([^;]+)(;.*)?$"
23+ target_label = "instance"
24+ }
25+
26+ rule {
27+ source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_component", "__meta_kubernetes_pod_label_component"]
28+ regex = "^;*([^;]+)(;.*)?$"
29+ target_label = "component"
30+ }
31+
32+ rule {
33+ source_labels = ["__meta_kubernetes_pod_node_name"]
34+ target_label = "node_name"
35+ }
36+
37+ rule {
38+ source_labels = ["__meta_kubernetes_namespace"]
39+ target_label = "namespace"
40+ }
41+
42+ rule {
43+ source_labels = ["namespace", "app"]
44+ separator = "/"
45+ target_label = "job"
46+ }
47+
48+ rule {
49+ source_labels = ["__meta_kubernetes_pod_name"]
50+ target_label = "pod"
51+ }
52+
53+ rule {
54+ source_labels = ["__meta_kubernetes_pod_container_name"]
55+ target_label = "container"
56+ }
57+
58+ rule {
59+ source_labels = ["__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"]
60+ separator = "/"
61+ target_label = "__path__"
62+ replacement = "/var/log/pods/*$1/*.log"
63+ }
64+
65+ rule {
66+ source_labels = ["__meta_kubernetes_pod_annotationpresent_kubernetes_io_config_hash", "__meta_kubernetes_pod_annotation_kubernetes_io_config_hash", "__meta_kubernetes_pod_container_name"]
67+ separator = "/"
68+ regex = "true/(.*)"
69+ target_label = "__path__"
70+ replacement = "/var/log/pods/*$1/*.log"
71+ }
72+ }
73+
74+ local.file_match "kubernetes_pods" {
75+ path_targets = discovery.relabel.kubernetes_pods.output
76+ }
77+
78+ loki.process "kubernetes_pods" {
79+ forward_to = [loki.write.default.receiver]
80+
81+ stage.cri { }
82+
83+ stage.json {
84+ expressions = {
85+ Cluster = "join('/',[Cluster.namespace,Cluster.name])",
86+ KubeadmControlPlane = "join('/',[KubeadmControlPlane.namespace,KubeadmControlPlane.name])",
87+ Machine = "join('/',[Machine.namespace,Machine.name])",
88+ MachineDeployment = "join('/',[MachineDeployment.namespace,MachineDeployment.name])",
89+ MachinePool = "join('/',[MachinePool.namespace,MachinePool.name])",
90+ MachineSet = "join('/',[MachineSet.namespace,MachineSet.name])",
91+ controller = "",
92+ }
93+ }
94+
95+ stage.labels {
96+ values = {
97+ Cluster = null,
98+ KubeadmControlPlane = null,
99+ Machine = null,
100+ MachineDeployment = null,
101+ MachinePool = null,
102+ MachineSet = null,
103+ controller = null,
104+ }
105+ }
106+ }
107+
108+ loki.source.file "kubernetes_pods" {
109+ targets = local.file_match.kubernetes_pods.targets
110+ forward_to = [loki.process.kubernetes_pods.receiver]
111+ legacy_positions_file = "/run/promtail/positions.yaml"
112+ }
113+
114+ loki.write "default" {
115+ endpoint {
116+ url = "http://loki:3100/loki/api/v1/push"
117+ tenant_id = "1"
118+ }
119+ external_labels = {}
120+ }
0 commit comments