metric_filters

Type list(object({ name = string, pattern = string, metric_name = string, metric_namespace = string, metric_value = optional(string, "1") }))
Default null

Metric filters to create on the log group. Each filter transforms log data into CloudWatch metrics.

Example

metric_filters = [{name = "ErrorCount", pattern = "ERROR", metric_name = "ErrorCount", metric_namespace = "MyApp"}]

Overview

Metric filters define how CloudWatch Logs transforms log data into CloudWatch metrics. Use metric filters to extract metric observations from ingested log events and create alarms.

Filter Object Structure

metric_filters = [
  {
    name             = "error-count"
    pattern          = "ERROR"
    metric_name      = "ErrorCount"
    metric_namespace = "MyApp"
    metric_value     = "1"
  }
]
FieldRequiredDescription
nameYesUnique name for the filter
patternYesFilter pattern to match log events
metric_nameYesName of the CloudWatch metric
metric_namespaceYesNamespace for the metric
metric_valueNoValue to publish (default: “1”)

Common Patterns

Error Counting

{
  name             = "errors"
  pattern          = "[timestamp, level=ERROR, ...]"
  metric_name      = "ErrorCount"
  metric_namespace = "Application"
}

Latency Extraction

{
  name             = "latency"
  pattern          = "[timestamp, level, message, latency]"
  metric_name      = "RequestLatency"
  metric_namespace = "Application"
  metric_value     = "$latency"
}

Best Practices

  • Use descriptive filter names
  • Group related metrics in the same namespace
  • Create alarms on critical metrics
  • Test patterns with sample log data first

Full Module Example

module "cloudwatch_logs" {
  source  = "registry.patterneddesigns.ca/essentials/cloudwatch-logs/aws"
  version = "1.0.0"

  # metric_filters
  metric_filters = [{name = "ErrorCount", pattern = "ERROR", metric_name = "ErrorCount", metric_namespace = "MyApp"}]

  # Other required inputs
  log_group_name = "/aws/lambda/my-function"
}