1
1
locals {
2
- prometheus_helm_repo = " https ://charts.bitnami.com/bitnami "
2
+ prometheus_helm_repo = " oci ://registry-1.docker.io/bitnamicharts "
3
3
prometheus_helm_chart = " kube-prometheus"
4
- prometheus_exporter_helm_repo = " https://prometheus-community.github.io/helm-charts"
5
- prometheus_exporter_helm_chart = " prometheus-postgres-exporter"
6
4
prometheus_release_name = " prometheus"
7
- prometheus_exporter_release_name = " prometheus-postgres-exporter"
8
5
prometheus_namespace = " prometheus"
9
6
prometheus_remote_write_send_interval = " 15s"
10
7
prometheus_remote_write_metrics_regex = " .*"
@@ -28,51 +25,128 @@ resource "helm_release" "prometheus_chart_primary" {
28
25
chart = local. prometheus_helm_chart
29
26
name = local. prometheus_release_name
30
27
namespace = kubernetes_namespace. prometheus_namespace_primary . metadata . 0 . name
31
- values = [<< EOF
32
- alertmanager:
33
- enabled: false
34
- blackboxExporter:
35
- affinity:
36
- nodeAffinity:
37
- requiredDuringSchedulingIgnoredDuringExecution:
38
- nodeSelectorTerms:
39
- - matchExpressions:
40
- - key: "cloud.google.com/gke-nodepool"
41
- operator: "In"
42
- values: ["${ google_container_node_pool . node_pool [" primary_misc" ]. name } "]
43
- operator:
44
- affinity:
45
- nodeAffinity:
46
- requiredDuringSchedulingIgnoredDuringExecution:
47
- nodeSelectorTerms:
48
- - matchExpressions:
49
- - key: "cloud.google.com/gke-nodepool"
50
- operator: "In"
51
- values: ["${ google_container_node_pool . node_pool [" primary_misc" ]. name } "]
52
- prometheus:
53
- affinity:
54
- nodeAffinity:
55
- requiredDuringSchedulingIgnoredDuringExecution:
56
- nodeSelectorTerms:
57
- - matchExpressions:
58
- - key: "cloud.google.com/gke-nodepool"
59
- operator: "In"
60
- values: ["${ google_container_node_pool . node_pool [" primary_misc" ]. name } "]
61
- externalLabels:
62
- cluster: "primary"
63
- persistence:
64
- enabled: true
65
- storageClass: standard
66
- remoteWrite:
67
- - url: "${ var . prometheus_remote_write_url } "
68
- tlsConfig:
69
- insecureSkipVerify: true
70
- writeRelabelConfigs:
71
- - sourceLabels: [__name__]
72
- regex: "${ local . prometheus_remote_write_metrics_regex } "
73
- action: keep
74
- metadataConfig:
75
- sendInterval: "${ local . prometheus_remote_write_send_interval } "
76
- EOF
77
- ]
28
+ values = [templatefile (" ${ path . module } /prometheus_helm_values.tftpl" , {
29
+ nodepool = google_container_node_pool.node_pool[" primary_misc" ].name,
30
+ cluster = " primary" ,
31
+ prometheus_remote_write_url = var.prometheus_remote_write_url,
32
+ prometheus_remote_write_metrics_regex = local.prometheus_remote_write_metrics_regex,
33
+ prometheus_remote_write_send_interval = local.prometheus_remote_write_send_interval,
34
+ })]
35
+ }
36
+
37
+ resource "kubectl_manifest" "pod_monitor_primary" {
38
+ provider = kubectl. primary
39
+
40
+ yaml_body = << YAML
41
+ apiVersion: monitoring.coreos.com/v1
42
+ kind: PodMonitor
43
+ metadata:
44
+ namespace: ${ kubernetes_namespace . coder_primary . metadata . 0 . name }
45
+ name: coder-monitoring
46
+ spec:
47
+ selector:
48
+ matchLabels:
49
+ "app.kubernetes.io/name": coder
50
+ podMetricsEndpoints:
51
+ - port: prometheus-http
52
+ interval: 30s
53
+ YAML
54
+
55
+ depends_on = [ helm_release . prometheus_chart_primary ]
56
+ }
57
+
58
+ resource "kubernetes_namespace" "prometheus_namespace_europe" {
59
+ provider = kubernetes. europe
60
+
61
+ metadata {
62
+ name = local. prometheus_namespace
63
+ }
64
+ lifecycle {
65
+ ignore_changes = [timeouts , wait_for_default_service_account ]
66
+ }
67
+ }
68
+
69
+ resource "helm_release" "prometheus_chart_europe" {
70
+ provider = helm. europe
71
+
72
+ repository = local. prometheus_helm_repo
73
+ chart = local. prometheus_helm_chart
74
+ name = local. prometheus_release_name
75
+ namespace = kubernetes_namespace. prometheus_namespace_europe . metadata . 0 . name
76
+ values = [templatefile (" ${ path . module } /prometheus_helm_values.tftpl" , {
77
+ nodepool = google_container_node_pool.node_pool[" europe_misc" ].name,
78
+ cluster = " europe" ,
79
+ prometheus_remote_write_url = var.prometheus_remote_write_url,
80
+ prometheus_remote_write_metrics_regex = local.prometheus_remote_write_metrics_regex,
81
+ prometheus_remote_write_send_interval = local.prometheus_remote_write_send_interval,
82
+ })]
83
+ }
84
+
85
+ resource "kubectl_manifest" "pod_monitor_europe" {
86
+ provider = kubectl. europe
87
+
88
+ yaml_body = << YAML
89
+ apiVersion: monitoring.coreos.com/v1
90
+ kind: PodMonitor
91
+ metadata:
92
+ namespace: ${ kubernetes_namespace . coder_europe . metadata . 0 . name }
93
+ name: coder-monitoring
94
+ spec:
95
+ selector:
96
+ matchLabels:
97
+ "app.kubernetes.io/name": coder
98
+ podMetricsEndpoints:
99
+ - port: prometheus-http
100
+ interval: 30s
101
+ YAML
102
+
103
+ depends_on = [ helm_release . prometheus_chart_europe ]
104
+ }
105
+
106
+ resource "kubernetes_namespace" "prometheus_namespace_asia" {
107
+ provider = kubernetes. asia
108
+
109
+ metadata {
110
+ name = local. prometheus_namespace
111
+ }
112
+ lifecycle {
113
+ ignore_changes = [timeouts , wait_for_default_service_account ]
114
+ }
115
+ }
116
+
117
+ resource "helm_release" "prometheus_chart_asia" {
118
+ provider = helm. asia
119
+
120
+ repository = local. prometheus_helm_repo
121
+ chart = local. prometheus_helm_chart
122
+ name = local. prometheus_release_name
123
+ namespace = kubernetes_namespace. prometheus_namespace_asia . metadata . 0 . name
124
+ values = [templatefile (" ${ path . module } /prometheus_helm_values.tftpl" , {
125
+ nodepool = google_container_node_pool.node_pool[" asia_misc" ].name,
126
+ cluster = " asia" ,
127
+ prometheus_remote_write_url = var.prometheus_remote_write_url,
128
+ prometheus_remote_write_metrics_regex = local.prometheus_remote_write_metrics_regex,
129
+ prometheus_remote_write_send_interval = local.prometheus_remote_write_send_interval,
130
+ })]
131
+ }
132
+
133
+ resource "kubectl_manifest" "pod_monitor_asia" {
134
+ provider = kubectl. asia
135
+
136
+ yaml_body = << YAML
137
+ apiVersion: monitoring.coreos.com/v1
138
+ kind: PodMonitor
139
+ metadata:
140
+ namespace: ${ kubernetes_namespace . coder_asia . metadata . 0 . name }
141
+ name: coder-monitoring
142
+ spec:
143
+ selector:
144
+ matchLabels:
145
+ "app.kubernetes.io/name": coder
146
+ podMetricsEndpoints:
147
+ - port: prometheus-http
148
+ interval: 30s
149
+ YAML
150
+
151
+ depends_on = [ helm_release . prometheus_chart_asia ]
78
152
}
0 commit comments