1+
2+ // Blackbox Exporter - Probe Observability Stack
3+ prometheus.exporter.blackbox "probe_observability_stack" {
4+ config_file = "/etc/alloy/blackbox.yml"
5+ target {
6+ name = "grafana"
7+ address = "cogstack-observability-traefik-1/grafana/api/health"
8+ module = "http_get_200"
9+ labels = {
10+ "name" = "grafana",
11+ "host" = "localhost",
12+ }
13+ }
14+
15+ target {
16+ name = "prometheus"
17+ address = "cogstack-observability-traefik-1/prometheus/-/healthy"
18+ module = "http_get_200"
19+ labels = {
20+ "name" = "prometheus",
21+ "host" = "localhost",
22+ }
23+ }
24+ }
25+ discovery.relabel "probe_observability_stack_results" {
26+ targets = prometheus.exporter.blackbox.probe_observability_stack.targets
27+
28+ rule {
29+ source_labels = ["__param_target"]
30+ target_label = "instance"
31+ regex = "([^/]+)/(.*)"
32+ replacement = "prometheus-host/$2"
33+ }
34+
35+ rule {
36+ target_label = "job"
37+ replacement = "probe-observability-stack"
38+ }
39+ rule {
40+ target_label = "host"
41+ replacement = "prometheus-host"
42+ }
43+ }
44+
45+ // Blackbox Exporter - Probe External Services
46+ discovery.file "probe_target_files" {
47+ files = ["/etc/alloy/probes/*.yml"]
48+ refresh_interval = "5m"
49+ }
50+
51+ discovery.relabel "probe_target_files_with_defaults" {
52+ targets = discovery.file.probe_target_files.targets
53+
54+ rule {
55+ source_labels = ["job"] // Alloy overrides the job field, this works around it.
56+ target_label = "group"
57+ }
58+ rule {
59+ // Add default module to all calls
60+ source_labels = ["module"]
61+ target_label = "module"
62+ regex = ""
63+ replacement = "http_200_ok"
64+ }
65+ rule {
66+ // Alloy takes the "name" field from the yml file, puts it into the job field as a suffix, then removes name. This brings name back.
67+ source_labels = ["name"]
68+ target_label = "service_name"
69+ }
70+ }
71+
72+ prometheus.exporter.blackbox "probe_discovered_targets" {
73+ config_file = "/etc/alloy/blackbox.yml"
74+ targets = discovery.relabel.probe_target_files_with_defaults.output
75+ }
76+
77+
78+ discovery.relabel "probe_discovered_targets_results" {
79+ targets = prometheus.exporter.blackbox.probe_discovered_targets.targets
80+
81+ rule {
82+ source_labels = ["__param_target"]
83+ target_label = "instance"
84+ }
85+ rule {
86+ // Bring name back
87+ source_labels = ["service_name"]
88+ target_label = "name"
89+ }
90+ rule {
91+ // Bring job back
92+ source_labels = ["group"]
93+ target_label = "job"
94+ }
95+
96+ rule {
97+ regex = "group"
98+ action = "labeldrop"
99+ }
100+ rule {
101+ regex = "service_name"
102+ action = "labeldrop"
103+ }
104+ }
105+
106+ // Scrape Probe targets
107+ prometheus.scrape "blackbox_exporter" {
108+ scrape_interval = "15s"
109+ targets = array.concat(
110+ discovery.relabel.probe_discovered_targets_results.output,
111+ discovery.relabel.probe_observability_stack_results.output,
112+ )
113+ forward_to = [prometheus.remote_write.default.receiver]
114+ }
0 commit comments