summaryrefslogtreecommitdiff
path: root/f3s/argocd-apps/monitoring/alloy.yaml
blob: c5574b157d1ae430c3fc3eea444ee765de2bafcc (plain)
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: alloy
  namespace: cicd
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  project: default
  source:
    repoURL: https://grafana.github.io/helm-charts
    chart: alloy
    targetRevision: 0.3.2
    helm:
      releaseName: alloy
      valuesObject:
        alloy:
          service:
            ports:
              otlp-grpc:
                enabled: true
                port: 4317
                targetPort: 4317
                protocol: TCP
              otlp-http:
                enabled: true
                port: 4318
                targetPort: 4318
                protocol: TCP

          configMap:
            content: |
              discovery.kubernetes "pods" {
                role = "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"
                }
              }

              loki.source.kubernetes "pods" {
                targets    = discovery.relabel.pods.output
                forward_to = [loki.write.default.receiver]
              }

              loki.write "default" {
                endpoint {
                  url = "http://loki.monitoring.svc.cluster.local:3100/loki/api/v1/push"
                }
              }

              // ========================================
              // TRACES COLLECTION
              // ========================================

              // OTLP receiver for traces via gRPC and HTTP
              otelcol.receiver.otlp "default" {
                grpc {
                  endpoint = "0.0.0.0:4317"
                }

                http {
                  endpoint = "0.0.0.0:4318"
                }

                output {
                  traces = [otelcol.processor.batch.default.input]
                }
              }

              // Batch processor for efficient trace forwarding
              otelcol.processor.batch "default" {
                timeout = "5s"
                send_batch_size = 100
                send_batch_max_size = 200

                output {
                  traces = [otelcol.exporter.otlp.tempo.input]
                }
              }

              // OTLP exporter to send traces to Tempo
              otelcol.exporter.otlp "tempo" {
                client {
                  endpoint = "tempo.monitoring.svc.cluster.local:4317"

                  tls {
                    insecure = true
                  }

                  compression = "gzip"
                }
              }

  destination:
    server: https://kubernetes.default.svc
    namespace: monitoring

  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=false
    retry:
      limit: 3
      backoff:
        duration: 5s
        factor: 2
        maxDuration: 1m