modules/slos/main.tf (71 lines of code) (raw):
data "google_project" "project" {
project_id = var.project_id
}
resource "google_monitoring_service" "service" {
project = var.project_id
service_id = var.service_name
display_name = var.service_name
basic_service {
service_type = "ISTIO_CANONICAL_SERVICE"
service_labels = {
mesh_uid = "proj-${data.google_project.project.number}"
canonical_service_namespace = var.service_name
canonical_service = var.service_name
}
}
}
module "slo_latency" {
source = "terraform-google-modules/slo/google//modules/slo-native"
config = {
project_id = var.project_id
service = var.service_name
slo_id = "${var.service_name}-latency-slo"
display_name = "Latency - ${var.latency_threshold}ms - ${var.latency_goal} - Calendar ${var.latency_calendar_period} Day"
goal = var.latency_goal
calendar_period = var.latency_calendar_period
type = "basic_sli"
method = "latency"
latency_threshold = "${var.latency_threshold}s"
}
depends_on = [google_monitoring_service.service]
}
resource "google_monitoring_alert_policy" "latency_alert_policy" {
project = var.project_id
display_name = "${var.service_name}-latency-alert"
combiner = "OR"
conditions {
display_name = " Burn rate for ${var.service_name} Latency with ${var.latency_alert_threshold} for ${var.latency_alert_lookback_duration}s lookback period"
condition_threshold {
filter = "select_slo_burn_rate(${module.slo_latency.name},${var.latency_alert_lookback_duration}s)"
duration = "0s"
comparison = "COMPARISON_GT"
}
}
}
module "slo_availability" {
source = "terraform-google-modules/slo/google//modules/slo-native"
config = {
project_id = var.project_id
service = var.service_name
slo_id = "${var.service_name}-availability-slo"
display_name = "Availability - ${var.availability_goal} - Calendar ${var.availability_calendar_period} Day"
goal = var.availability_goal
calendar_period = var.availability_calendar_period
type = "basic_sli"
method = "availability"
}
depends_on = [google_monitoring_service.service]
}
resource "google_monitoring_alert_policy" "availability_alert_policy" {
project = var.project_id
display_name = "${var.service_name}-availability-alert"
combiner = "OR"
conditions {
display_name = " Burn rate for ${var.service_name} Availability with ${var.availability_alert_threshold} for ${var.availability_alert_lookback_duration}s lookback period"
condition_threshold {
filter = "select_slo_burn_rate(${module.slo_availability.name},${var.availability_alert_lookback_duration}s)"
duration = "0s"
comparison = "COMPARISON_GT"
}
}
}