1+ // Traces
2+ otelcol.receiver.otlp "default" {
3+ grpc {
4+ endpoint = "0.0.0.0:4317"
5+ }
6+
7+ http {
8+ endpoint = "0.0.0.0:4318"
9+ }
10+
11+ output {
12+ traces = [otelcol.processor.batch.default.input]
13+ }
14+ }
15+
16+ otelcol.processor.batch "default" {
17+ output {
18+ metrics = []
19+ logs = []
20+ traces = [
21+ grafana_cloud.stack.receivers.traces,
22+ ]
23+ }
24+ }
25+
26+ // Metrics: kube-state-metrics
27+ // TODO: install kube-state-metrics in your minikube cluster:
28+ discovery.kubernetes "kube_state_metrics" {
29+ role = "pod"
30+ selectors {
31+ role = "pod"
32+ label = "app.kubernetes.io/name=kube-state-metrics"
33+ }
34+ namespaces {
35+ names = ["kube-system", "monitoring"]
36+ }
37+ }
38+
39+ discovery.relabel "kube_state_metrics" {
40+ rule {
41+ source_labels = ["__meta_kubernetes_pod_container_port_name"]
42+ regex = "http"
43+ action = "keep"
44+ }
45+ // rule {
46+ // source_labels = ["__meta_kubernetes_pod_container_port_name"]
47+ // regex = "http-metrics"
48+ // action = "keep"
49+ // }
50+ rule {
51+ target_label = "service"
52+ replacement = "quickpizza"
53+ }
54+ rule {
55+ target_label = "service_namespace"
56+ replacement = "quickpizza"
57+ }
58+ rule {
59+ target_label = "cluster"
60+ replacement = "minikube"
61+ }
62+ rule {
63+ target_label = "job"
64+ replacement = "kube-state-metrics"
65+ }
66+ rule {
67+ target_label = "instance"
68+ source_labels = [
69+ "__meta_kubernetes_pod_name",
70+ ]
71+ }
72+ rule {
73+ target_label = "namespace"
74+ source_labels = [
75+ "__meta_kubernetes_pod_namespace",
76+ ]
77+ }
78+ rule {
79+ source_labels = ["__meta_kubernetes_pod_annotation_prometheus_io_scrape"]
80+ regex = "true"
81+ action = "keep"
82+ }
83+ targets = discovery.kubernetes.kube_state_metrics.targets
84+ }
85+ prometheus.scrape "kube_state_metrics" {
86+ scrape_interval = "10s"
87+ forward_to = [grafana_cloud.stack.receivers.metrics]
88+ targets = discovery.relabel.kube_state_metrics.output
89+ }
90+
91+
92+ discovery.kubernetes "application_pods" {
93+ selectors {
94+ label = "app.k8s.io/name=quickpizza"
95+ role = "pod"
96+ }
97+ role = "pod"
98+ namespaces {
99+ own_namespace = true
100+ }
101+ }
102+
103+ discovery.relabel "application_pods" {
104+ rule {
105+ target_label = "instance"
106+ source_labels = [
107+ "__meta_kubernetes_pod_name",
108+ ]
109+ }
110+ rule {
111+ target_label = "service_namespace"
112+ source_labels = [
113+ // quickpizza
114+ "__meta_kubernetes_pod_label_app_k8s_io_name",
115+ ]
116+ }
117+ rule {
118+ target_label = "service_name"
119+ source_labels = [
120+ "__meta_kubernetes_pod_label_app_kubernetes_io_instance",
121+ ]
122+ }
123+ rule {
124+ target_label = "cluster"
125+ replacement = "minikube"
126+ }
127+ targets = discovery.kubernetes.application_pods.targets
128+ }
129+
130+ // Metrics: application pods
131+ prometheus.scrape "application_pods" {
132+ scrape_interval = "10s"
133+ forward_to = [grafana_cloud.stack.receivers.metrics]
134+ targets = discovery.relabel.application_pods.output
135+ }
136+
137+ // Logs: application pods
138+ loki.source.kubernetes "application_pods" {
139+ forward_to = [grafana_cloud.stack.receivers.logs]
140+ targets = discovery.relabel.application_pods.output
141+ }
142+
143+
144+ // TODO: not working
145+ pyroscope.receive_http "default" {
146+ forward_to = [grafana_cloud.stack.receivers.profiles]
147+ http {
148+ listen_address = "127.0.0.1"
149+ listen_port = 9999
150+ }
151+ }
152+
153+ import.git "grafana_cloud" {
154+ repository = "https://github.com/grafana/alloy-modules.git"
155+ revision = "main"
156+ path = "modules/cloud/grafana/cloud/module.alloy"
157+ pull_frequency = "0s"
158+ }
159+
160+ grafana_cloud.stack "receivers" {
161+ stack_name = env("GRAFANA_CLOUD_STACK")
162+ token = env("GRAFANA_CLOUD_TOKEN")
163+ }
0 commit comments