Skip to content

Commit 2bbe650

Browse files
johnstcnmafredri
andauthored
chore: scaletest: collect database metrics using prometheus-postgres-exporter (#7945)
Co-authored-by: Mathias Fredriksson <mafredri@gmail.com>
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy