The slo-native
submodule deploys SLOs to Google Cloud Service Monitoring API. It uses the native Terraform resource google_monitoring_slo
to achieve this.
Use this module if:
-
Your SLOs will use metrics from Cloud Monitoring backend only, not other backends.
-
You want to use the Service Monitoring UI to monitor your SLOs.
Deploy your SLO directly to the Service Monitoring API:
module "slo_basic" {
source = "terraform-google-modules/slo/google//modules/slo-native"
config = {
project_id = var.app_engine_project_id
service = data.google_monitoring_app_engine_service.default.service_id
slo_id = "gae-slo"
display_name = "90% of App Engine default service HTTP response latencies < 500ms over a day"
goal = 0.9
calendar_period = "DAY"
type = "basic_sli"
method = "latency"
latency_threshold = "0.5s"
}
}
See examples/native/simple_example
for another example.
You can also write an SLO in a YAML definition file and load it into the module:
locals {
config = yamldecode(file("configs/my_slo_config.yaml"))
}
module "slo_basic" {
source = "terraform-google-modules/slo/google//modules/slo-native"
config = local.config
}
A standard SRE practice is to write SLO definitions as YAML files, and follow DRY principles. See examples/slo-generator/yaml_example
for an example of how to write re-usable YAML templates loaded into Terraform.
The slo-generator
module deploys the slo-generator
in Cloud Run in order to compute and export SLOs on a schedule.
SLO Configurations are pushed to Google Cloud Storage, and schedules are maintained using Google Cloud Schedulers.
Use this setup if:
-
You are using other metrics backends than Cloud Monitoring that you want to create SLOs out of (e.g: Elastic, Datadog, Prometheus, ...).
-
You want to have custom reporting and exporting for your SLO data, along with historical data (e.g: BigQuery, DataStudio, custom metrics).
-
You want to have a common configuration format for all SLOs (see documentation).
This module is meant for use with Terraform 0.13+ and tested using Terraform 1.0+. If you find incompatibilities using Terraform >=0.13, please open an issue. If you haven't upgraded and need a Terraform 0.12.x-compatible version of this module, the last released version intended for Terraform 0.12.x is v1.0.2.
Deploy the SLO generator service with some SLO configs:
locals {
config = yamldecode(file("configs/config.yaml"))
slo_configs = [
for cfg in fileset(path.module, "/configs/slo_*.yaml") :
yamldecode(file(cfg))
]
}
module "slo-generator" {
source = "terraform-google-modules/slo/google//modules/slo-generator"
project_id = "<PROJECT_ID>"
config = local.config
slo_configs = local.slo_configs
}
For information on the config formats, please refer to the slo-generator
documentation:
See examples/slo-generator/
for more examples with different setups.
Refer to the contribution guidelines for information on contributing to this module.