# Terraform Datadog Synthetics Module ## Overview This Terraform module creates synthetic API tests and associated monitors for endpoint health checking in Datadog. ## Features - **HTTP API Health Checks**: Automated endpoint monitoring - **Multi-Region Testing**: Tests from AWS regions globally - **Pod Health Monitoring**: Kubernetes container monitoring - **15-Minute Intervals**: Regular health check execution - **Live Status**: Tests are active immediately upon creation ## Resources Created - `datadog_synthetics_test` (beacon): HTTP API health check - `datadog_monitor` (beacon): Kubernetes Pod Health metric alert ## Requirements | Name | Version | |------|---------| | terraform | >= 0.12 | | datadog | >= 2.0 | ## Usage ```hcl module "synthetics" { source = "./terraform-datadog-synthetics" datadog_api_key = var.datadog_api_key datadog_app_key = var.datadog_app_key region = "eu-west-1" url = "https://api.example.com/health" dd_synthetics = { name = "API Health Check" tags = ["env:production", "service:api"] } notify = { alert_recipients = ["team@example.com"] } } ``` ## Inputs | Name | Description | Type | Required | Default | |------|-------------|------|----------|---------| | `datadog_api_key` | Datadog API key | `string` | yes | - | | `datadog_app_key` | Datadog APP key | `string` | yes | - | | `dd_synthetics` | Synthetics configuration | `any` | yes | - | | `notify` | Notification configuration | `any` | yes | - | | `region` | AWS region | `string` | no | `"eu-west-1"` | | `url` | URL to monitor | `string` | yes | - | ## Synthetic Test Configuration ### HTTP API Test - **Type**: API test (HTTP subtype) - **Method**: GET - **Interval**: Every 15 minutes (900 seconds) - **Assertion**: HTTP status code equals 200 - **Locations**: AWS regions (EU and US) - **Failure Threshold**: 1 location - **Status**: Live (active immediately) ### Test Locations The synthetic test runs from multiple AWS regions: - EU regions for European coverage - US regions for American coverage ## Pod Health Monitor ### Configuration - **Query**: `docker.containers.running <= 1` - **Type**: Metric alert - **Thresholds**: - OK: 3 containers running - Warning: 2 containers running - Critical: 1 or fewer containers running - **Evaluation**: Last 5 minutes average ## Outputs Currently, this module does not export any outputs. ## Synthetic Test Features ### Assertions - Validates HTTP response status code is 200 - Can be extended with additional assertions: - Response time checks - Response body validation - Header validation ### Locations Tests execute from AWS-based synthetic locations for: - Low latency testing - Geographic distribution - Realistic user perspective ### Timing - **Tick Interval**: 900 seconds (15 minutes) - **Min Failure**: 1 location must fail to trigger alert - **Min Location Success**: Not specified (uses default) ## Notifications Configure notifications through the `notify` variable: ```hcl notify = { alert_recipients = ["critical@example.com"] warning_recipients = ["warnings@example.com"] message = "Custom alert message" } ``` ## Use Cases - **API Health Monitoring**: Ensure endpoints are responding - **SLA Compliance**: Track uptime and availability - **Geographic Testing**: Validate performance from multiple regions - **Container Health**: Monitor Kubernetes pod availability ## Notes - Tests start in "live" status immediately - Minimum 1 location failure required to trigger alert - Pod health monitor uses 5-minute evaluation window - Synthetic tests count towards Datadog billing - Configure appropriate tick intervals to balance cost and monitoring frequency ## Extension Ideas Add additional assertions: ```hcl assertion { type = "responseTime" operator = "lessThan" target = 2000 } assertion { type = "body" operator = "contains" target = "healthy" } ``` ## License Internal use only - Sanoma/WeBuildYourCloud ## Authors Created and maintained by the Platform Engineering team.