aboutsummaryrefslogtreecommitdiffstats
path: root/kubernetes/namespaces/loki/alloy_values.yml
blob: 8040f1faac31b343a0793cf67e286863e1b1e656 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
alloy:
  configMap:
    content: |-
      // Set Alloy logging to INFO
      logging {
        level = "info"
        format = "logfmt"
      }

      // Discover all Kubernetes pods that are on the current node
      // We only want one instance of Alloy to pick up a pod
      discovery.kubernetes "pods" {
        namespaces {
          own_namespace = false
        }
        role = "pod"
        selectors {
          role = "pod"
          field = "spec.nodeName=" + coalesce(env("HOSTNAME"), constants.hostname)
        }
      }

      // Relabel all __meta labels to labels we want to keep
      discovery.relabel "pods" {
        targets    = discovery.kubernetes.pods.targets

        rule {
            // namespace label
            source_labels = ["__meta_kubernetes_namespace"]
            target_label  = "namespace"
            action        = "replace"
        }

        rule {
            // app label
            source_labels = ["__meta_kubernetes_pod_label_app"]
            target_label  = "app"
            action        = "replace"
        }

        rule {
            // concatenated deployment & container name
            source_labels = ["__meta_kubernetes_pod_label_app", "__meta_kubernetes_pod_container_name"]
            separator     = "/"
            target_label  = "app_container"
            action        = "replace"
        }

        rule {
            // boolean for if the container is an init_container
            source_labels = ["__meta_kubernetes_pod_container_init"]
            target_label  = "is_init"
            action        = "replace"
        }

        rule {
            // service_name is the namespace/pod-name
            source_labels = ["__meta_kubernetes_namespace", "__meta_kubernetes_pod_name"]
            separator     = "/"
            target_label  = "service_name"
            action        = "replace"
        }
      }

      // Write all values into the Loki receiver
      loki.source.kubernetes "pods" {
        targets    = discovery.relabel.pods.output
        forward_to = [loki.write.local.receiver]
      }

      loki.write "local" {
        // Ship logs off to the load balanced loki-gateway
        endpoint {
          url = "http://loki-gateway.loki.svc.cluster.local/loki/api/v1/push"
          headers = {
            "X-Scope-OrgID" = "1",
          }
        }
      }