Terraform Datadog Belgie (RDS Dashboard) Module

Overview

This Terraform module creates an AWS RDS database monitoring dashboard in Datadog with comprehensive metrics for performance, storage, connections, and replication lag. Designed specifically for Belgian/EU deployments with pre-configured alert recipients and monitoring thresholds.

Features

  • Comprehensive RDS Metrics: CPU, memory, connections, storage, disk queue, latency
  • Dynamic Dashboard: 25+ preconfigured widgets with automatic metric visualization
  • Flexible Alerting: Configurable alert recipients for different severity levels
  • CloudWatch Integration: Leverages AWS RDS CloudWatch metrics
  • Customizable Monitors: Map-based monitor configuration for easy customization

Resources Created

  • datadog_dashboard: RDS Database Dashboard with 25+ widgets including:
    • Query value widgets for read/write latency and IOPS
    • Timeseries for replication lag, connections, CPU, memory, disk metrics
    • Toplist widgets for metric ranking
    • Note widgets for dashboard organization

Dashboard Widgets

The dashboard includes comprehensive monitoring for:

  • Read/Write Latency (query value widgets)
  • Replication Lag (timeseries)
  • Database Connections (timeseries)
  • CPU Utilization (timeseries + toplist)
  • Read/Write Operations (timeseries)
  • Freeable Memory (timeseries + toplist)
  • Disk Queue Depth (timeseries)
  • Free Storage Space (timeseries + toplist)

Requirements

Name Version
terraform >= 0.12
datadog >= 3.1.2
aws >= 2.0

Usage

module "rds_dashboard" {
  source = "./terraform-datadog-belgie"

  region         = "eu-west-1"
  api_key        = var.datadog_api_key
  app_key        = var.datadog_app_key
  datadog_site   = "https://api.datadoghq.eu/"
  aws_profile    = "production"
  cfa_slug       = "my-cfa"
  team           = "platform-team"
  application    = "myapp"
  stage          = "prd"
  
  alert_recipients   = ["team@example.com"]
  recipients         = ["team@example.com"]
  warning_recipients = ["team@example.com"]
  
  dd_rds_monitors = {
    cpu = {
      enabled   = true
      warning   = 75
      critical  = 90
      name      = "RDS CPU High"
    }
    # ... additional monitors
  }
}

Inputs

Name Description Type Required Default
region AWS region for resources string yes -
api_key Datadog API key string yes -
app_key Datadog APP key string yes -
datadog_site Datadog site (EU or US) string no "https://api.datadoghq.eu/"
aws_profile AWS account this integration belongs to string yes -
cfa_slug CFA this integration belongs to string yes -
team Team this integration belongs to string yes -
application Application name string yes -
stage Stage (dev, tst, acc, prd) string yes -
alert_recipients Alert notification recipients list(string) no ["patrick.de.ruiter@sanoma.com"]
recipients General notification recipients list(string) no ["patrick.de.ruiter@sanoma.com"]
warning_recipients Warning notification recipients list(string) no ["patrick.de.ruiter@sanoma.com"]
dd_rds_monitors RDS monitor configuration map map(any) no See variables.tf

RDS Monitors Configuration

The dd_rds_monitors variable accepts a map with the following monitor types:

  • cpu: CPU utilization monitoring
  • memory: Freeable memory monitoring
  • connections: Database connections monitoring
  • storage: Free storage space monitoring
  • disk_queue: Disk queue depth monitoring
  • read_latency: Read latency monitoring
  • write_latency: Write latency monitoring
  • replication_lag: Replication lag monitoring

Each monitor can be configured with:

{
  enabled   = bool    # Enable/disable the monitor
  warning   = number  # Warning threshold
  critical  = number  # Critical threshold
  name      = string  # Monitor name
}

Outputs

Currently, this module does not export any outputs (outputs are commented out).

Local Values

The module uses several local values for dynamic configuration:

  • dbidentifier: Formatted as {application}-{stage}
  • rdsgraphs: Map of 8 RDS metric queries
  • full_message: Constructed alert message with links
  • tags: Standard tags (team, stage, application)

RDS Metrics Monitored

Metric CloudWatch Metric Name Description
CPU aws.rds.cpuutilization CPU utilization percentage
Memory aws.rds.freeable_memory Freeable memory in bytes
Connections aws.rds.database_connections Number of database connections
Storage aws.rds.free_storage_space Free storage space in bytes
Read Latency aws.rds.read_latency Read operation latency
Write Latency aws.rds.write_latency Write operation latency
Disk Queue aws.rds.disk_queue_depth Disk queue depth
Replication Lag aws.rds.replica_lag Replication lag in seconds

Dashboard Layout

  • Layout Type: Free layout (allows custom positioning)
  • Read-Only: No (allows modifications in UI)
  • Widget Organization: Sections with note widgets as headers
  • Conditional Formatting: Metric values color-coded based on thresholds

Tagging Strategy

All resources are tagged with:

  • team:{team}
  • stage:{stage}
  • application:{application}

Notes

  • Default Datadog site is EU (GDPR compliance)
  • Dashboard uses free layout for flexible widget positioning
  • Metrics are sourced from AWS RDS CloudWatch integration
  • Database identifier is auto-generated from application and stage variables
  • Alert messages include links to related monitors

License

Internal use only - Sanoma/WeBuildYourCloud

Authors

Created and maintained by the Platform Engineering team.

Description
Terraform module for creating AWS RDS monitoring dashboards in Datadog with comprehensive metrics for performance, storage, connections, and replication
Readme 33 KiB
Languages
HCL 100%