mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: start remote writing prometheus data (#16235)
Part of https://github.com/coder/internal/issues/150 - Stop creating the VPC since we rely on an existing VPC in the scaletest GCP project now - Add prometheus remote writer to the new prometheus deployment
This commit is contained in:
@@ -5,23 +5,20 @@ locals {
|
||||
|
||||
traffic_types = {
|
||||
ssh = {
|
||||
wait_duration = "0m"
|
||||
duration = "30m"
|
||||
job_timeout = "35m"
|
||||
duration = "30m"
|
||||
job_timeout = "35m"
|
||||
flags = [
|
||||
"--ssh",
|
||||
]
|
||||
}
|
||||
webterminal = {
|
||||
wait_duration = "5m"
|
||||
duration = "25m"
|
||||
job_timeout = "30m"
|
||||
flags = []
|
||||
duration = "25m"
|
||||
job_timeout = "30m"
|
||||
flags = []
|
||||
}
|
||||
app = {
|
||||
wait_duration = "10m"
|
||||
duration = "20m"
|
||||
job_timeout = "25m"
|
||||
duration = "20m"
|
||||
job_timeout = "25m"
|
||||
flags = [
|
||||
"--app=wsec",
|
||||
]
|
||||
@@ -34,19 +31,14 @@ resource "time_sleep" "wait_baseline" {
|
||||
kubernetes_job.create_workspaces_primary,
|
||||
kubernetes_job.create_workspaces_europe,
|
||||
kubernetes_job.create_workspaces_asia,
|
||||
helm_release.prometheus_chart_primary,
|
||||
helm_release.prometheus_chart_europe,
|
||||
helm_release.prometheus_chart_asia,
|
||||
]
|
||||
|
||||
create_duration = local.wait_baseline_duration
|
||||
}
|
||||
|
||||
resource "time_sleep" "wait_traffic" {
|
||||
for_each = local.traffic_types
|
||||
|
||||
depends_on = [time_sleep.wait_baseline]
|
||||
|
||||
create_duration = local.traffic_types[each.key].wait_duration
|
||||
}
|
||||
|
||||
resource "kubernetes_job" "workspace_traffic_primary" {
|
||||
provider = kubernetes.primary
|
||||
|
||||
@@ -106,7 +98,7 @@ resource "kubernetes_job" "workspace_traffic_primary" {
|
||||
create = local.traffic_types[each.key].job_timeout
|
||||
}
|
||||
|
||||
depends_on = [time_sleep.wait_baseline, time_sleep.wait_traffic[each.key]]
|
||||
depends_on = [time_sleep.wait_baseline]
|
||||
}
|
||||
|
||||
resource "kubernetes_job" "workspace_traffic_europe" {
|
||||
@@ -169,7 +161,7 @@ resource "kubernetes_job" "workspace_traffic_europe" {
|
||||
create = local.traffic_types[each.key].job_timeout
|
||||
}
|
||||
|
||||
depends_on = [time_sleep.wait_baseline, time_sleep.wait_traffic[each.key]]
|
||||
depends_on = [time_sleep.wait_baseline]
|
||||
}
|
||||
|
||||
resource "kubernetes_job" "workspace_traffic_asia" {
|
||||
@@ -232,5 +224,5 @@ resource "kubernetes_job" "workspace_traffic_asia" {
|
||||
create = local.traffic_types[each.key].job_timeout
|
||||
}
|
||||
|
||||
depends_on = [time_sleep.wait_baseline, time_sleep.wait_traffic[each.key]]
|
||||
depends_on = [time_sleep.wait_baseline]
|
||||
}
|
||||
|
||||
@@ -10,21 +10,21 @@ locals {
|
||||
url = "http://${var.name}-scaletest.${var.cloudflare_domain}"
|
||||
region = "us-east1"
|
||||
zone = "us-east1-c"
|
||||
cidr = "10.200.0.0/24"
|
||||
subnet = "scaletest"
|
||||
}
|
||||
europe = {
|
||||
subdomain = "${var.name}-europe-scaletest"
|
||||
url = "http://${var.name}-europe-scaletest.${var.cloudflare_domain}"
|
||||
region = "europe-west1"
|
||||
zone = "europe-west1-b"
|
||||
cidr = "10.201.0.0/24"
|
||||
subnet = "scaletest"
|
||||
}
|
||||
asia = {
|
||||
subdomain = "${var.name}-asia-scaletest"
|
||||
url = "http://${var.name}-asia-scaletest.${var.cloudflare_domain}"
|
||||
region = "asia-southeast1"
|
||||
zone = "asia-southeast1-a"
|
||||
cidr = "10.202.0.0/24"
|
||||
subnet = "scaletest"
|
||||
}
|
||||
}
|
||||
node_pools = {
|
||||
@@ -72,8 +72,8 @@ resource "google_container_cluster" "cluster" {
|
||||
name = "${var.name}-${each.key}"
|
||||
location = each.value.zone
|
||||
project = var.project_id
|
||||
network = google_compute_network.vpc.name
|
||||
subnetwork = google_compute_subnetwork.subnet[each.key].name
|
||||
network = local.vpc_name
|
||||
subnetwork = local.subnet_name
|
||||
networking_mode = "VPC_NATIVE"
|
||||
default_max_pods_per_node = 256
|
||||
ip_allocation_policy { # Required with networking_mode=VPC_NATIVE
|
||||
|
||||
@@ -23,7 +23,7 @@ resource "google_sql_database_instance" "db" {
|
||||
|
||||
ip_configuration {
|
||||
ipv4_enabled = false
|
||||
private_network = google_compute_network.vpc.id
|
||||
private_network = local.vpc_id
|
||||
}
|
||||
|
||||
insights_config {
|
||||
|
||||
@@ -1,20 +1,7 @@
|
||||
|
||||
resource "google_compute_network" "vpc" {
|
||||
project = var.project_id
|
||||
name = var.name
|
||||
auto_create_subnetworks = "false"
|
||||
depends_on = [
|
||||
google_project_service.api["compute.googleapis.com"]
|
||||
]
|
||||
}
|
||||
|
||||
resource "google_compute_subnetwork" "subnet" {
|
||||
for_each = local.deployments
|
||||
name = "${var.name}-${each.key}"
|
||||
project = var.project_id
|
||||
region = each.value.region
|
||||
network = google_compute_network.vpc.name
|
||||
ip_cidr_range = each.value.cidr
|
||||
locals {
|
||||
vpc_name = "scaletest"
|
||||
vpc_id = "projects/${var.project_id}/global/networks/${local.vpc_name}"
|
||||
subnet_name = "scaletest"
|
||||
}
|
||||
|
||||
resource "google_compute_address" "coder" {
|
||||
@@ -32,11 +19,11 @@ resource "google_compute_global_address" "sql_peering" {
|
||||
purpose = "VPC_PEERING"
|
||||
address_type = "INTERNAL"
|
||||
prefix_length = 16
|
||||
network = google_compute_network.vpc.id
|
||||
network = local.vpc_name
|
||||
}
|
||||
|
||||
resource "google_service_networking_connection" "private_vpc_connection" {
|
||||
network = google_compute_network.vpc.id
|
||||
network = local.vpc_id
|
||||
service = "servicenetworking.googleapis.com"
|
||||
reserved_peering_ranges = [google_compute_global_address.sql_peering.name]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
locals {
|
||||
prometheus_helm_repo = "https://prometheus-community.github.io/helm-charts"
|
||||
prometheus_helm_chart = "kube-prometheus-stack"
|
||||
prometheus_release_name = "prometheus"
|
||||
prometheus_remote_write_send_interval = "15s"
|
||||
prometheus_remote_write_metrics_regex = ".*"
|
||||
}
|
||||
|
||||
resource "helm_release" "prometheus_chart_primary" {
|
||||
provider = helm.primary
|
||||
|
||||
repository = local.prometheus_helm_repo
|
||||
chart = local.prometheus_helm_chart
|
||||
name = local.prometheus_release_name
|
||||
namespace = kubernetes_namespace.coder_primary.metadata.0.name
|
||||
values = [templatefile("${path.module}/prometheus_helm_values.tftpl", {
|
||||
nodepool = google_container_node_pool.node_pool["primary_misc"].name,
|
||||
cluster = "primary",
|
||||
prometheus_remote_write_url = var.prometheus_remote_write_url,
|
||||
prometheus_remote_write_metrics_regex = local.prometheus_remote_write_metrics_regex,
|
||||
prometheus_remote_write_send_interval = local.prometheus_remote_write_send_interval,
|
||||
})]
|
||||
}
|
||||
|
||||
resource "kubectl_manifest" "pod_monitor_primary" {
|
||||
provider = kubectl.primary
|
||||
|
||||
yaml_body = <<YAML
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PodMonitor
|
||||
metadata:
|
||||
namespace: ${kubernetes_namespace.coder_primary.metadata.0.name}
|
||||
name: coder-monitoring
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
"app.kubernetes.io/name": coder
|
||||
podMetricsEndpoints:
|
||||
- port: prometheus-http
|
||||
interval: 30s
|
||||
YAML
|
||||
|
||||
depends_on = [helm_release.prometheus_chart_primary]
|
||||
}
|
||||
|
||||
resource "helm_release" "prometheus_chart_europe" {
|
||||
provider = helm.europe
|
||||
|
||||
repository = local.prometheus_helm_repo
|
||||
chart = local.prometheus_helm_chart
|
||||
name = local.prometheus_release_name
|
||||
namespace = kubernetes_namespace.coder_europe.metadata.0.name
|
||||
values = [templatefile("${path.module}/prometheus_helm_values.tftpl", {
|
||||
nodepool = google_container_node_pool.node_pool["europe_misc"].name,
|
||||
cluster = "europe",
|
||||
prometheus_remote_write_url = var.prometheus_remote_write_url,
|
||||
prometheus_remote_write_metrics_regex = local.prometheus_remote_write_metrics_regex,
|
||||
prometheus_remote_write_send_interval = local.prometheus_remote_write_send_interval,
|
||||
})]
|
||||
}
|
||||
|
||||
resource "kubectl_manifest" "pod_monitor_europe" {
|
||||
provider = kubectl.europe
|
||||
|
||||
yaml_body = <<YAML
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PodMonitor
|
||||
metadata:
|
||||
namespace: ${kubernetes_namespace.coder_europe.metadata.0.name}
|
||||
name: coder-monitoring
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
"app.kubernetes.io/name": coder
|
||||
podMetricsEndpoints:
|
||||
- port: prometheus-http
|
||||
interval: 30s
|
||||
YAML
|
||||
|
||||
depends_on = [helm_release.prometheus_chart_europe]
|
||||
}
|
||||
|
||||
resource "helm_release" "prometheus_chart_asia" {
|
||||
provider = helm.asia
|
||||
|
||||
repository = local.prometheus_helm_repo
|
||||
chart = local.prometheus_helm_chart
|
||||
name = local.prometheus_release_name
|
||||
namespace = kubernetes_namespace.coder_asia.metadata.0.name
|
||||
values = [templatefile("${path.module}/prometheus_helm_values.tftpl", {
|
||||
nodepool = google_container_node_pool.node_pool["asia_misc"].name,
|
||||
cluster = "asia",
|
||||
prometheus_remote_write_url = var.prometheus_remote_write_url,
|
||||
prometheus_remote_write_metrics_regex = local.prometheus_remote_write_metrics_regex,
|
||||
prometheus_remote_write_send_interval = local.prometheus_remote_write_send_interval,
|
||||
})]
|
||||
}
|
||||
|
||||
resource "kubectl_manifest" "pod_monitor_asia" {
|
||||
provider = kubectl.asia
|
||||
|
||||
yaml_body = <<YAML
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PodMonitor
|
||||
metadata:
|
||||
namespace: ${kubernetes_namespace.coder_asia.metadata.0.name}
|
||||
name: coder-monitoring
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
"app.kubernetes.io/name": coder
|
||||
podMetricsEndpoints:
|
||||
- port: prometheus-http
|
||||
interval: 30s
|
||||
YAML
|
||||
|
||||
depends_on = [helm_release.prometheus_chart_asia]
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
alertmanager:
|
||||
enabled: false
|
||||
grafana:
|
||||
enabled: false
|
||||
prometheusOperator:
|
||||
affinity:
|
||||
nodeAffinity:
|
||||
requiredDuringSchedulingIgnoredDuringExecution:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: "cloud.google.com/gke-nodepool"
|
||||
operator: "In"
|
||||
values: ["${nodepool}"]
|
||||
prometheus:
|
||||
affinity:
|
||||
nodeAffinity:
|
||||
requiredDuringSchedulingIgnoredDuringExecution:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: "cloud.google.com/gke-nodepool"
|
||||
operator: "In"
|
||||
values: ["${nodepool}"]
|
||||
prometheusSpec:
|
||||
externalLabels:
|
||||
cluster: "${cluster}"
|
||||
podMonitorSelectorNilUsesHelmValues: false
|
||||
remoteWrite:
|
||||
- url: "${prometheus_remote_write_url}"
|
||||
tlsConfig:
|
||||
insecureSkipVerify: true
|
||||
writeRelabelConfigs:
|
||||
- sourceLabels: [__name__]
|
||||
regex: "${prometheus_remote_write_metrics_regex}"
|
||||
action: keep
|
||||
metadataConfig:
|
||||
sendInterval: "${prometheus_remote_write_send_interval}"
|
||||
@@ -85,3 +85,8 @@ variable "provisionerd_image_tag" {
|
||||
description = "Tag to use for Provisionerd image."
|
||||
default = "latest"
|
||||
}
|
||||
|
||||
// Prometheus
|
||||
variable "prometheus_remote_write_url" {
|
||||
description = "URL to push prometheus metrics to."
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user