terraform-google-monitoring

Releases

Terraform Module Registry

Module for managing Google Cloud Monitoring

Features

  • Goal is to support all Google Cloud Monitoring resources that Terraform supports
  • Submodules can be called directly
  • Wrapper module to call all submodules

Submodules

Submodules can be used directly. Some may not be included in the root wrapper module.

Usage

Basic usage of this module is as follows:

module "example" {
    source = "notablehealth/<module>/google"
    # Recommend pinning every module to a specific version
    # version = "x.x.x"

    # Required variables
        gcp_project =
}

Requirements

Name Version
terraform >= 1.5.7

Providers

No providers.

Modules

Name Source Version
alert_policies ./modules/alert-policies n/a
dashboards ./modules/dashboards n/a
groups ./modules/groups n/a
log_metrics ./modules/log-metrics n/a
logging ./modules/logging n/a
metric_descriptors ./modules/metric-descriptors n/a
notification_channels ./modules/notification-channels n/a
project_scope ./modules/project-scope n/a
services ./modules/services n/a
slo ./modules/slo n/a
uptime_checks ./modules/uptime-checks n/a

Resources

No resources.

Inputs

Name Description Type Default Required
alert_policies Alert policy configuration objects
list(object({
alert_strategy = optional(object({
notification_rate_limit = optional(object({
period = optional(number)
}))
auto_close = optional(string)
}))
combiner = string
conditions = list(object({
condition_absent = optional(object({
aggregations = list(object({
alignment_period = optional(string)
cross_series_reducer = optional(string) # validate
group_by_fields = optional(string) # ??
per_series_aligner = optional(string) # validate
}))
duration = string # Valid: minutes in seconds: must be /60
filter = optional(string)
trigger = optional(object({
count = optional(number)
percent = optional(number)
}))
}))
condition_matched_log = optional(object({
filter = optional(string)
label_extractors = optional(map(string))
}))
condition_monitoring_query_language = optional(object({
duration = string
evaluation_missing_data = optional(string) # validate
query = string
trigger = optional(object({
count = optional(number)
percent = optional(number)
}))
}))
condition_threshold = optional(object({
aggregations = optional(list(object({
alignment_period = optional(string) # validate
cross_series_reducer = optional(string) # validate
group_by_fields = optional(list(string)) # ??
per_series_aligner = optional(string) # validate
})))
comparison = string # validate [COMPARISON_GT COMPARISON_GE COMPARISON_LT COMPARISON_LE COMPARISON_EQ COMPARISON_NE]
denominator_aggregations = optional(object({
alignment_period = optional(string)
cross_series_reducer = optional(string) # validate
group_by_fields = optional(string) # ??
per_series_aligner = optional(string) # validate
}))
denominator_filter = optional(string)
duration = string
evaluation_missing_data = optional(string) # validate
filter = optional(string)
threshold_value = optional(number)
trigger = optional(object({
count = optional(number)
percent = optional(number)
}))
}))
display_name = string
}))
display_name = string
documentation = object({
content = string
mime_type = optional(string, "text/markdown")
subject = optional(string)
})
enabled = optional(bool, true)
notification_channels = optional(list(string), [])
severity = optional(string) # validate: CRITICAL, ERROR, WARNING
user_labels = optional(map(string))
}))
[
{
"combiner": "",
"conditions": [
{
"display_name": ""
}
],
"display_name": "",
"documentation": {
"content": ""
}
}
]
no
custom_services List of Custom Service configuration objects
list(object({
display_name = optional(string)
service_id = optional(string)
telemetry = optional(object({
resource_name = optional(string)
}))
user_labels = optional(map(string))
}))
[] no
dashboard_sources_path Path to process dashboard source files string "" no
dashboard_sources_pattern Dashboard json files pattern string "**" no
enable_alert_policies Enable managing Alert Polices bool false no
enable_dashboards Enable managing Dashboards bool false no
enable_groups Enable managing Groups bool false no
enable_log_metrics Enable managing Log Metrics bool false no
enable_logging Enable managing central Logging bool false no
enable_metric_descriptors Enable managing Metric Descriptors bool false no
enable_notification_channels Enable managing Notification Channels bool false no
enable_project_scope Enable managing Project metric scopes bool false no
enable_services Enable managing Services bool false no
enable_slo Enable managing SLOs bool false no
enable_uptime_checks Enable managing Uptime Checks bool false no
gcp_project GCP project to put monitoring in string n/a yes
groups List of group confiiguration object
list(object({
display_name = string
filter = string
is_cluster = optional(bool)
parent_name = optional(string)
}))
[
{
"display_name": "",
"filter": ""
}
]
no
logging_bucket Logging Bucket name string "" no
logging_metrics List of logging metric configuration objects
list(object({
name = string
bucket_name = optional(string)
bucket_options = optional(object({
explicit_buckets = optional(object({
bounds = string
}))
exponential_buckets = optional(object({
growth_factor = optional(number)
num_finite_buckets = optional(number)
scale = optional(number)
}))
linear_buckets = optional(object({
num_finite_buckets = optional(number)
offset = optional(string)
width = optional(number)
}))
}))
description = optional(string)
filter = string
label_extractors = optional(map(string))
metric_descriptor = optional(object({
description = optional(string) # Not supported
display_name = optional(string)
labels = optional(list(object({
description = optional(string)
key = string
value_type = optional(string)
})))
metric_kind = string # validate
type = string # Not supported
unit = optional(string) # validate
value_type = string # validate
}))
value_extractor = optional(string)
}))
[
{
"filter": "",
"name": ""
}
]
no
metric_descriptors List of Metric Dedscriptor configuration objects
list(object({
description = string
display_name = string
labels = optional(object({
description = optional(string)
key = string
value_type = optional(string) # validate
}))
launch_stage = optional(string) # validate
metadata = optional(object({
ingest_delay = optional(string)
sample_period = optional(string)
}))
metric_kind = string # validate
type = string
unit = optional(string)
value_type = string # validate
}))
[
{
"description": "",
"display_name": "",
"metric_kind": "",
"type": "",
"value_type": ""
}
]
no
notification_channels Notification channel configuration objects
list(object({
description = string
display_name = string
enabled = bool
labels = optional(map(string))
sensitive_labels = optional(object({
auth_token = optional(string)
password = optional(string)
service_key = optional(string)
}))
user_labels = optional(map(string))
type = string
}))
[
{
"description": "",
"display_name": "",
"enabled": false,
"type": "sms"
}
]
no
organization_name Organization name string "" no
organization_sink Organization Sink name string "" no
services List of Service configuration objects
list(object({
basic_service = optional(object({
service_labels = optional(map(string))
service_type = optional(string) # validate
}))
display_name = string
service_id = string
user_labels = optional(map(string))
}))
[
{
"display_name": "",
"service_id": ""
}
]
no
slos List of SLO configuration objects
list(object({
basic_sli = optional(object({
availability = optional(object({
enabled = optional(bool)
}))
latency = optional(object({
threshold = string
}))
location = optional(string)
method = optional(string)
version = optional(string)
})) # validate
calendar_period = optional(string) # validate
display_name = string
goal = string
request_based_sli = optional(object({
distribution_cut = optional(object({
distribution_filter = string
range = object({
max = optional(string)
min = optional(string)
})
}))
good_total_ratio = optional(object({
bad_service_filter = optional(string)
good_service_filter = optional(string) #map(string) ?
total_service_filter = optional(string)
}))
})) # validate
rolling_period_days = optional(string)
service = string
slo_id = optional(string)
user_labels = optional(map(string))
windows_based_sli = optional(object({
good_bad_metric_filter = optional(string)
good_total_ratio_threshold = optional(object({
basic_sli_performance = optional(object({
availability = optional(object({
enabled = optional(bool)
}))
latency = optional(object({
threshold = string
}))
location = optional(string)
method = optional(string)
version = optional(string)
}))
performance = optional(object({
distribution_cut = optional(object({
distribution_filter = string
range = object({
max = optional(string)
min = optional(string)
})
}))
good_total_ratio = optional(object({
bad_service_filter = optional(string)
good_service_filter = optional(string)
total_service_filter = optional(string)
}))
}))
threshold = optional(string)
}))
metric_mean_in_range = optional(object({
range = object({
max = optional(string)
min = optional(string)
})
time_series = string
}))
metric_sum_in_range = optional(object({
range = object({
max = optional(string)
min = optional(string)
})
time_series = string
}))
window_period = optional(string)
})) # validate
}))
[
{
"display_name": "",
"goal": "",
"service": ""
}
]
no
uptime_checks Uptime check configuration objects
list(object({
checker_type = optional(string)
content_matchers = optional(object({
content = string
matcher = optional(string)
json_path_matcher = optional(object({
json_path = string
json_matcher = optional(string)
}))
}))
display_name = string
http_check = optional(object({
accepted_response_status_codes = optional(list(object({
status_class = optional(string)
status_value = optional(string) # validate
})))
auth_info = optional(object({
password = string
username = string
}))
body = optional(string)
content_type = optional(string)
headers = optional(map(string))
mark_headers = optional(bool)
path = optional(string)
port = optional(string)
request_method = optional(string)
use_ssl = optional(bool)
validate_ssl = optional(bool)
}))
monitored_resource = optional(object({ # validate
labels = object({
cluster_name = optional(string)
host = optional(string)
instance_id = optional(string)
location = optional(string)
namespace_name = optional(string)
project_id = optional(string)
service_name = optional(string)
zone = optional(string)
})
type = string
}))
period = optional(string) # validate
resource_group = optional(object({
group_id = optional(string)
resource_type = optional(string) # validate
}))
# Requires 3. Either global (default) or 3 US regions
selected_regions = optional(list(string)) # validate
tcp_check = optional(object({
port = string
}))
timeout = string # validate
}))
[
{
"display_name": "",
"monitored_resource": {
"labels": {
"project_id": ""
},
"type": "uptime_url"
},
"timeout": "10s"
}
]
no

Outputs

Name Description
alert_policy_channel_names Notification channels referenced by alert policies
custom_service_ids List of custom service IDs
custom_service_telemetry List of custom service telemetry
dashboards List of dashboard objects
groups_parents Root parent groups
groups_r_subgroups1 Resource: subgroups level 1
groups_r_subgroups2 Resource: subgroups level 2
groups_subgroups1 Subgroups - level 1
groups_subgroups2 Subgroups - level 2
logging_bucket_config Full config of the logging bucket config
logging_metrics All logging metric objects - for debugging
metric_descriptor_monitored_resource_types List of metric descriptor monitored resource types
metric_descriptor_names List of metric descriptor names
metric_scope_projects GCP project settings before any changes
metrics_scope_monitored_projects Monitored projects - Full data for debugging
metrics_scope_project Metrics scope project ID
notification_channel_pagerduty_integrations Pagerduty integrations
notification_channel_pagerduty_refs List of pagerduty service key references
notification_channel_secret_refs List of Google secret manager secret references
service_ids List of service IDs
service_telemetry List of service telemetry
slo_ids List of SLO IDs
uptime_check_ids The IDs of the uptime checks.
uptime_checks All uptime checks managed