diff --git a/alloy/Chart.yaml b/alloy/Chart.yaml new file mode 100644 index 0000000..583c97e --- /dev/null +++ b/alloy/Chart.yaml @@ -0,0 +1,9 @@ +--- +apiVersion: v2 +name: alloy +version: "1.0.0" + +dependencies: + - name: alloy + version: 1.1.2 + repository: https://grafana.github.io/helm-charts diff --git a/alloy/values-development.yaml b/alloy/values-development.yaml new file mode 100644 index 0000000..37731fb --- /dev/null +++ b/alloy/values-development.yaml @@ -0,0 +1,97 @@ +alloy: + alloy: + configMap: + content: |- + loki.write "default" { + endpoint { + url = "http://loki.loki.svc.cluster.local:3100/loki/api/v1/push" + tenant_id = "luna" + } + } + + // discovery.kubernetes allows you to find scrape targets from Kubernetes resources. + // It watches cluster state and ensures targets are continually synced with what is currently running in your cluster. + discovery.kubernetes "pod" { + role = "pod" + } + + // discovery.relabel rewrites the label set of the input targets by applying one or more relabeling rules. + // If no rules are defined, then the input targets are exported as-is. + discovery.relabel "pod_logs" { + targets = discovery.kubernetes.pod.targets + + // Label creation - "namespace" field from "__meta_kubernetes_namespace" + rule { + source_labels = ["__meta_kubernetes_namespace"] + action = "replace" + target_label = "namespace" + } + + // Label creation - "pod" field from "__meta_kubernetes_pod_name" + rule { + source_labels = ["__meta_kubernetes_pod_name"] + action = "replace" + target_label = "pod" + } + + // Label creation - "container" field from "__meta_kubernetes_pod_container_name" + rule { + source_labels = ["__meta_kubernetes_pod_container_name"] + action = "replace" + target_label = "container" + } + + // Label creation - "app" field from "__meta_kubernetes_pod_label_app_kubernetes_io_name" + rule { + source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_name"] + action = "replace" + target_label = "app" + } + + // Label creation - "job" field from "__meta_kubernetes_namespace" and "__meta_kubernetes_pod_container_name" + // Concatenate values __meta_kubernetes_namespace/__meta_kubernetes_pod_container_name + rule { + source_labels = ["__meta_kubernetes_namespace", "__meta_kubernetes_pod_container_name"] + action = "replace" + target_label = "job" + separator = "/" + replacement = "$1" + } + + // Label creation - "container" field from "__meta_kubernetes_pod_uid" and "__meta_kubernetes_pod_container_name" + // Concatenate values __meta_kubernetes_pod_uid/__meta_kubernetes_pod_container_name.log + rule { + source_labels = ["__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"] + action = "replace" + target_label = "__path__" + separator = "/" + replacement = "/var/log/pods/*$1/*.log" + } + + // Label creation - "container_runtime" field from "__meta_kubernetes_pod_container_id" + rule { + source_labels = ["__meta_kubernetes_pod_container_id"] + action = "replace" + target_label = "container_runtime" + regex = "^(\\S+):\\/\\/.+$" + replacement = "$1" + } + } + + // loki.source.kubernetes tails logs from Kubernetes containers using the Kubernetes API. + loki.source.kubernetes "pod_logs" { + targets = discovery.relabel.pod_logs.output + forward_to = [loki.process.pod_logs.receiver] + } + + // loki.process receives log entries from other Loki components, applies one or more processing stages, + // and forwards the results to the list of receivers in the component's arguments. + loki.process "pod_logs" { + stage.static_labels { + values = { + cluster = "development", + } + } + + forward_to = [loki.write.default.receiver] + } diff --git a/apps/alloy.yaml b/apps/alloy.yaml new file mode 100644 index 0000000..0f1e583 --- /dev/null +++ b/apps/alloy.yaml @@ -0,0 +1,40 @@ +apiVersion: argoproj.io/v1alpha1 +kind: ApplicationSet +metadata: + name: alloy +spec: + goTemplate: true + goTemplateOptions: ["missingkey=error"] + generators: + - list: + elements: + - cluster: production + url: https://kubernetes.default.svc + - cluster: staging + url: https://k3s-ctrl-lb.lab.kill0.net:6443 + - cluster: development + url: https://k0s-ctrl-vip.lab.kill0.net:6443 + template: + metadata: + name: 'alloy-{{.cluster}}' + spec: + project: default + source: + path: alloy + repoURL: https://git.kill0.net/ryanc/argocd.git + targetRevision: HEAD + helm: + releaseName: alloy + valueFiles: + - values.yaml + - values-{{.cluster}}.yaml + ignoreMissingValueFiles: true + destination: + server: '{{.url}}' + namespace: alloy + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true