Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2bbe650

Browse files
johnstcnmafredri
andauthored
chore: scaletest: collect database metrics using prometheus-postgres-exporter (#7945)
Co-authored-by: Mathias Fredriksson <[email protected]>
1 parent 175561b commit 2bbe650

File tree

4 files changed

+66
-14
lines changed

4 files changed

+66
-14
lines changed

scaletest/scaletest.sh

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,10 @@ fi
8484
if [[ -z "${SCALETEST_PROMETHEUS_REMOTE_WRITE_USER}" ]] || [[ -z "${SCALETEST_PROMETHEUS_REMOTE_WRITE_PASSWORD}" ]]; then
8585
echo "SCALETEST_PROMETHEUS_REMOTE_WRITE_USER or SCALETEST_PROMETHEUS_REMOTE_WRITE_PASSWORD not specified."
8686
echo "No prometheus metrics will be collected!"
87-
read -pr "Continue (y/N)? " choice
88-
case "$choice" in
89-
y | Y | yes | YES) ;;
90-
*) exit 1 ;;
91-
esac
87+
read -p "Continue (y/N)? " -n1 -r
88+
if [[ "${REPLY}" != [yY] ]]; then
89+
exit 1
90+
fi
9291
fi
9392

9493
SCALETEST_SCENARIO_VARS="${PROJECT_ROOT}/scaletest/terraform/scenario-${SCALETEST_SCENARIO}.tfvars"

scaletest/terraform/coder.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ resource "kubernetes_namespace" "coder_namespace" {
3434
]
3535
}
3636

37-
resource "random_password" "postgres-admin-password" {
37+
resource "random_password" "coder-postgres-password" {
3838
length = 12
3939
}
4040

41-
resource "random_password" "coder-postgres-password" {
41+
resource "random_password" "prometheus-postgres-password" {
4242
length = 12
4343
}
4444

scaletest/terraform/gcp_db.tf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,13 @@ resource "google_sql_user" "coder" {
5151
# required for postgres, otherwise user fails to delete
5252
deletion_policy = "ABANDON"
5353
}
54+
55+
resource "google_sql_user" "prometheus" {
56+
project = var.project_id
57+
instance = google_sql_database_instance.db.id
58+
name = "${var.name}-prometheus"
59+
type = "BUILT_IN"
60+
password = random_password.prometheus-postgres-password.result
61+
# required for postgres, otherwise user fails to delete
62+
deletion_policy = "ABANDON"
63+
}

scaletest/terraform/prometheus.tf

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
locals {
2-
prometheus_helm_repo = "https://charts.bitnami.com/bitnami"
3-
prometheus_helm_chart = "kube-prometheus"
4-
prometheus_helm_version = null // just use latest
5-
prometheus_release_name = "prometheus"
6-
prometheus_namespace = "prometheus"
7-
prometheus_remote_write_enabled = var.prometheus_remote_write_password != ""
2+
prometheus_helm_repo = "https://charts.bitnami.com/bitnami"
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+
prometheus_release_name = "prometheus"
7+
prometheus_exporter_release_name = "prometheus-postgres-exporter"
8+
prometheus_namespace = "prometheus"
9+
prometheus_remote_write_enabled = var.prometheus_remote_write_password != ""
810
}
911

1012
# Create a namespace to hold our Prometheus deployment.
@@ -37,7 +39,6 @@ resource "helm_release" "prometheus-chart" {
3739
repository = local.prometheus_helm_repo
3840
chart = local.prometheus_helm_chart
3941
name = local.prometheus_release_name
40-
version = local.prometheus_helm_version
4142
namespace = kubernetes_namespace.prometheus_namespace.metadata.0.name
4243
values = [<<EOF
4344
alertmanager:
@@ -97,6 +98,48 @@ prometheus:
9798
]
9899
}
99100

101+
resource "kubernetes_secret" "prometheus-postgres-password" {
102+
type = "kubernetes.io/basic-auth"
103+
metadata {
104+
name = "prometheus-postgres"
105+
namespace = kubernetes_namespace.prometheus_namespace.metadata.0.name
106+
}
107+
data = {
108+
username = google_sql_user.prometheus.name
109+
password = google_sql_user.prometheus.password
110+
}
111+
}
112+
113+
# Install Prometheus Postgres exporter helm chart
114+
resource "helm_release" "prometheus-exporter-chart" {
115+
repository = local.prometheus_exporter_helm_repo
116+
chart = local.prometheus_exporter_helm_chart
117+
name = local.prometheus_exporter_release_name
118+
namespace = local.prometheus_namespace
119+
values = [<<EOF
120+
affinity:
121+
nodeAffinity:
122+
requiredDuringSchedulingIgnoredDuringExecution:
123+
nodeSelectorTerms:
124+
- matchExpressions:
125+
- key: "cloud.google.com/gke-nodepool"
126+
operator: "In"
127+
values: ["${google_container_node_pool.misc.name}"]
128+
config:
129+
datasource:
130+
host: "${google_sql_database_instance.db.private_ip_address}"
131+
user: "${google_sql_user.prometheus.name}"
132+
database: "${google_sql_database.coder.name}"
133+
passwordSecret:
134+
name: "${kubernetes_secret.prometheus-postgres-password.metadata.0.name}"
135+
key: password
136+
autoDiscoverDatabases: true
137+
serviceMonitor:
138+
enabled: true
139+
EOF
140+
]
141+
}
142+
100143
# NOTE: this is created as a local file before being applied
101144
# as the kubernetes_manifest resource needs to be run separately
102145
# after creating a cluster, and we want this to be brought up

0 commit comments

Comments
 (0)