Skip to content

Commit c20f58b

Browse files
committed
fix(grafana): fix circular dependency between grafana <-> cockroachdb_managed
1 parent 8ba973a commit c20f58b

File tree

21 files changed

+202
-149
lines changed

21 files changed

+202
-149
lines changed

infra/tf/cockroachdb_managed/main.tf

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ data "cockroach_cluster_cert" "main" {
5454
}
5555

5656
resource "kubernetes_config_map" "crdb_ca" {
57-
for_each = toset(["rivet-service", "bolt"])
57+
for_each = toset(flatten([
58+
["rivet-service", "bolt"],
59+
var.prometheus_enabled ? ["grafana"] : []
60+
]))
5861

5962
metadata {
6063
name = "crdb-ca"

infra/tf/cockroachdb_managed/vars.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,7 @@ variable "cockroachdb_request_unit_limit" {
1717
variable "cockroachdb_storage_limit" {
1818
type = string
1919
}
20+
21+
variable "prometheus_enabled" {
22+
type = bool
23+
}

infra/tf/grafana/grafana.tf

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
locals {
2+
service_grafana = lookup(var.services, "grafana", {
3+
count = 1
4+
resources = {
5+
cpu = 500
6+
memory = 512
7+
}
8+
})
9+
10+
grafana_dashboards = {
11+
for f in fileset("${path.module}/grafana_dashboards/", "*.json"):
12+
"${trimsuffix(f, ".json")}" => {
13+
body = file("${path.module}/grafana_dashboards/${f}")
14+
}
15+
}
16+
17+
crdb_host = "${try(data.terraform_remote_state.cockroachdb_k8s.outputs.host, data.terraform_remote_state.cockroachdb_managed.outputs.host)}:${try(data.terraform_remote_state.cockroachdb_k8s.outputs.port, data.terraform_remote_state.cockroachdb_managed.outputs.port)}"
18+
}
19+
20+
module "crdb_user_grafana_secrets" {
21+
source = "../modules/secrets"
22+
23+
keys = [ "crdb/user/grafana/username", "crdb/user/grafana/password" ]
24+
}
25+
26+
resource "helm_release" "grafana" {
27+
name = "grafana"
28+
namespace = "grafana"
29+
repository = "https://grafana.github.io/helm-charts"
30+
chart = "grafana"
31+
version = "7.3.9"
32+
values = [yamlencode({
33+
"grafana.ini" = {
34+
auth = {
35+
disable_login_form = true
36+
}
37+
"auth.anonymous" = {
38+
enabled = true
39+
org_role = "Admin"
40+
}
41+
}
42+
43+
resources = var.limit_resources ? {
44+
limits = {
45+
memory = "${local.service_grafana.resources.memory}Mi"
46+
cpu = "${local.service_grafana.resources.cpu}m"
47+
}
48+
} : null
49+
50+
datasources = {
51+
"datasources.yaml" = {
52+
apiVersion = 1
53+
54+
datasources = [
55+
{
56+
name = "Prometheus"
57+
type = "prometheus"
58+
uid = "prometheus"
59+
url = "http://prometheus-kube-prometheus-prometheus.prometheus:9090/"
60+
access = "proxy"
61+
isDefault = true
62+
jsonData = {
63+
httpMethod = "POST"
64+
# prometheus.prometheusSpec.scrapeInterval
65+
timeInterval = "30s"
66+
}
67+
},
68+
{
69+
name = "Loki"
70+
type = "loki"
71+
uid = "loki"
72+
url = "http://loki-gateway.loki.svc.cluster.local:80/"
73+
access = "proxy"
74+
jsonData = {}
75+
},
76+
{
77+
name = "CockroachDB"
78+
type = "postgres"
79+
uid = "crdb"
80+
url = local.crdb_host
81+
user = module.crdb_user_grafana_secrets.values["crdb/user/grafana/username"]
82+
secureJsonData = {
83+
password = module.crdb_user_grafana_secrets.values["crdb/user/grafana/password"]
84+
}
85+
jsonData = {
86+
sslmode = "verify-ca"
87+
sslRootCertFile = "/local/crdb/ca.crt"
88+
}
89+
secret = true
90+
}
91+
]
92+
}
93+
}
94+
95+
extraConfigmapMounts = [
96+
# TLS Cert for postgres datasource
97+
{
98+
name = "crdb-ca"
99+
configMap = "crdb-ca"
100+
mountPath = "/local/crdb/ca.crt"
101+
subPath = "ca.crt"
102+
readOnly = true
103+
}
104+
]
105+
106+
sidecar = {
107+
dashboards = {
108+
enabled = true
109+
}
110+
}
111+
112+
serviceMonitor = {
113+
enabled = true
114+
path = "/metrics"
115+
labels = {}
116+
117+
interval = ""
118+
scheme = "http"
119+
tlsConfig = {}
120+
scrapeTimeout = "15s"
121+
122+
relabelings = []
123+
}
124+
})]
125+
}
126+
127+
resource "kubernetes_config_map" "grafana_dashboard" {
128+
for_each = local.grafana_dashboards
129+
130+
metadata {
131+
namespace = "grafana"
132+
name = "grafana-rivet-${each.key}"
133+
labels = {
134+
grafana_dashboard = "1"
135+
}
136+
}
137+
138+
data = {
139+
"${each.key}.json" = each.value.body
140+
}
141+
}

0 commit comments

Comments
 (0)