{
  "leansignal_demand_export": "1.0",
  "exported_at": "2026-07-17T00:00:00Z",
  "source_tenant": "leansignal-catalog",
  "catalog": {
    "slug": "aws-cloudwatch-otel-demand-standard",
    "integration": "aws-cloudwatch",
    "variant": "standard",
    "title": "AWS CloudWatch — Standard",
    "category": "Infrastructure",
    "dashboards": 1,
    "panels": 16,
    "alerts": 9,
    "docs_url": "https://docs.leansignal.io/integrations/aws-cloudwatch/"
  },
  "demand": {
    "ref": "demand",
    "name": "AWS CloudWatch — Standard (OpenTelemetry)",
    "description": "A rounded operational view per service: adds EC2 network traffic, ALB latency and target health, RDS connections and memory, Lambda invocations and duration, and SQS queue depth, with warning/critical alerting. The recommended default.",
    "dashboards": [
      {
        "ref": "dash-aws-cloudwatch",
        "name": "AWS CloudWatch — Standard",
        "description": "AWS CloudWatch metrics for EC2, Application Load Balancer, RDS, Lambda, and SQS via YACE — CPU, status checks, 5xx rates, storage headroom, error ratios, throttles, and queue backlogs (standard variant).",
        "data": {
          "display": {
            "name": "AWS CloudWatch — Standard"
          },
          "panels": {
            "ec2_cpu_utilization": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "CPU utilization",
                  "description": "Per-instance CPU from the hypervisor — the first thing to check on a slow instance."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "percent"
                      },
                      "min": 0,
                      "max": 100
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "avg by (region, dimension_InstanceId) (aws_ec2_cpuutilization_average{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_InstanceId}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "ec2_status_check_failed": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Status checks failed",
                  "description": "Instance or system status check failures — nonzero means AWS itself considers the instance impaired."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "decimal"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "max by (region, dimension_InstanceId) (aws_ec2_status_check_failed_maximum{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_InstanceId}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "ec2_network_io": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Network in / out (bytes per 5m)",
                  "description": "Bytes on the instance network interface per CloudWatch period."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "bytes"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (region, dimension_InstanceId) (aws_ec2_network_in_average{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_InstanceId}} · in"
                        }
                      }
                    }
                  },
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (region, dimension_InstanceId) (aws_ec2_network_out_average{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_InstanceId}} · out"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "alb_requests": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Requests (per 5m)",
                  "description": "Requests handled per load balancer per CloudWatch period."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "decimal"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (region, dimension_LoadBalancer) (aws_applicationelb_request_count_sum{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_LoadBalancer}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "alb_5xx": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "5xx responses (per 5m)",
                  "description": "Errors from your targets vs errors generated by the load balancer itself (no healthy target, timeouts)."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "decimal"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (region, dimension_LoadBalancer) (aws_applicationelb_httpcode_target_5_xx_count_sum{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_LoadBalancer}} · target"
                        }
                      }
                    }
                  },
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (region, dimension_LoadBalancer) (aws_applicationelb_httpcode_elb_5_xx_count_sum{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_LoadBalancer}} · elb"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "alb_target_response_time": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Target response time (p90)",
                  "description": "Time from the load balancer sending the request to receiving the target response headers."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "seconds"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "max by (region, dimension_LoadBalancer) (aws_applicationelb_target_response_time_p90{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_LoadBalancer}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "alb_target_health": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Healthy / unhealthy targets",
                  "description": "Registered targets per target group, split by health-check state."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "decimal"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "max by (region, dimension_TargetGroup) (aws_applicationelb_healthy_host_count_maximum{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_TargetGroup}} · healthy"
                        }
                      }
                    }
                  },
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "max by (region, dimension_TargetGroup) (aws_applicationelb_un_healthy_host_count_maximum{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_TargetGroup}} · unhealthy"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "rds_cpu_utilization": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "CPU utilization",
                  "description": "Per-DB-instance CPU."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "percent"
                      },
                      "min": 0,
                      "max": 100
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "avg by (region, dimension_DBInstanceIdentifier) (aws_rds_cpuutilization_average{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_DBInstanceIdentifier}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "rds_free_storage": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Free storage",
                  "description": "A database that fills its storage stops accepting writes — watch the trend, not just the level."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "bytes"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "min by (region, dimension_DBInstanceIdentifier) (aws_rds_free_storage_space_average{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_DBInstanceIdentifier}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "rds_connections": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Database connections",
                  "description": "In-use connections per instance — read against your instance class’s max_connections."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "decimal"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "max by (region, dimension_DBInstanceIdentifier) (aws_rds_database_connections_average{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_DBInstanceIdentifier}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "rds_freeable_memory": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Freeable memory",
                  "description": "Available RAM on the DB host — a steady decline ends in swapping and latency spikes."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "bytes"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "min by (region, dimension_DBInstanceIdentifier) (aws_rds_freeable_memory_average{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_DBInstanceIdentifier}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "lambda_errors": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Errors & throttles (per 5m)",
                  "description": "Failed invocations and rejected-for-concurrency invocations per function."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "decimal"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (region, dimension_FunctionName) (aws_lambda_errors_sum{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_FunctionName}} · errors"
                        }
                      }
                    }
                  },
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (region, dimension_FunctionName) (aws_lambda_throttles_sum{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_FunctionName}} · throttles"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "lambda_invocations": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Invocations (per 5m)",
                  "description": "Invocation volume per function."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "decimal"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "sum by (region, dimension_FunctionName) (aws_lambda_invocations_sum{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_FunctionName}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "lambda_duration": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Duration (avg)",
                  "description": "Average execution time per function (CloudWatch reports milliseconds; charted as seconds)."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "seconds"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "avg by (region, dimension_FunctionName) (aws_lambda_duration_average{region=~\"$instance\"}) / 1000",
                          "seriesNameFormat": "{{dimension_FunctionName}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "sqs_oldest_message": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Oldest message age",
                  "description": "Age of the oldest undelivered message — the single best signal that consumers have stalled."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "seconds"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "max by (region, dimension_QueueName) (aws_sqs_approximate_age_of_oldest_message_maximum{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_QueueName}}"
                        }
                      }
                    }
                  }
                ]
              }
            },
            "sqs_messages_visible": {
              "kind": "Panel",
              "spec": {
                "display": {
                  "name": "Messages visible",
                  "description": "Queue depth — messages waiting to be received."
                },
                "plugin": {
                  "kind": "TimeSeriesChart",
                  "spec": {
                    "legend": {
                      "position": "bottom",
                      "mode": "table",
                      "values": [
                        "last-number",
                        "mean",
                        "max"
                      ]
                    },
                    "yAxis": {
                      "format": {
                        "unit": "decimal"
                      },
                      "min": 0
                    }
                  }
                },
                "queries": [
                  {
                    "kind": "TimeSeriesQuery",
                    "spec": {
                      "plugin": {
                        "kind": "PrometheusTimeSeriesQuery",
                        "spec": {
                          "query": "max by (region, dimension_QueueName) (aws_sqs_approximate_number_of_messages_visible_average{region=~\"$instance\"})",
                          "seriesNameFormat": "{{dimension_QueueName}}"
                        }
                      }
                    }
                  }
                ]
              }
            }
          },
          "layouts": [
            {
              "kind": "Grid",
              "spec": {
                "display": {
                  "title": "EC2",
                  "collapse": {
                    "open": true
                  }
                },
                "items": [
                  {
                    "x": 0,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/ec2_cpu_utilization"
                    }
                  },
                  {
                    "x": 12,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/ec2_status_check_failed"
                    }
                  },
                  {
                    "x": 0,
                    "y": 8,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/ec2_network_io"
                    }
                  }
                ]
              }
            },
            {
              "kind": "Grid",
              "spec": {
                "display": {
                  "title": "Load Balancing",
                  "collapse": {
                    "open": true
                  }
                },
                "items": [
                  {
                    "x": 0,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/alb_requests"
                    }
                  },
                  {
                    "x": 12,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/alb_5xx"
                    }
                  },
                  {
                    "x": 0,
                    "y": 8,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/alb_target_response_time"
                    }
                  },
                  {
                    "x": 12,
                    "y": 8,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/alb_target_health"
                    }
                  }
                ]
              }
            },
            {
              "kind": "Grid",
              "spec": {
                "display": {
                  "title": "RDS",
                  "collapse": {
                    "open": true
                  }
                },
                "items": [
                  {
                    "x": 0,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/rds_cpu_utilization"
                    }
                  },
                  {
                    "x": 12,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/rds_free_storage"
                    }
                  },
                  {
                    "x": 0,
                    "y": 8,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/rds_connections"
                    }
                  },
                  {
                    "x": 12,
                    "y": 8,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/rds_freeable_memory"
                    }
                  }
                ]
              }
            },
            {
              "kind": "Grid",
              "spec": {
                "display": {
                  "title": "Lambda",
                  "collapse": {
                    "open": true
                  }
                },
                "items": [
                  {
                    "x": 0,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/lambda_errors"
                    }
                  },
                  {
                    "x": 12,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/lambda_invocations"
                    }
                  },
                  {
                    "x": 0,
                    "y": 8,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/lambda_duration"
                    }
                  }
                ]
              }
            },
            {
              "kind": "Grid",
              "spec": {
                "display": {
                  "title": "SQS",
                  "collapse": {
                    "open": true
                  }
                },
                "items": [
                  {
                    "x": 0,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/sqs_oldest_message"
                    }
                  },
                  {
                    "x": 12,
                    "y": 0,
                    "width": 12,
                    "height": 8,
                    "content": {
                      "$ref": "#/spec/panels/sqs_messages_visible"
                    }
                  }
                ]
              }
            }
          ],
          "variables": [
            {
              "kind": "ListVariable",
              "spec": {
                "name": "instance",
                "display": {
                  "name": "Instance"
                },
                "allowAllValue": true,
                "allowMultiple": true,
                "customAllValue": ".*",
                "defaultValue": ".*",
                "plugin": {
                  "kind": "PrometheusLabelValuesVariable",
                  "spec": {
                    "labelName": "region"
                  }
                }
              }
            }
          ],
          "duration": "1h",
          "refreshInterval": "30s",
          "datasources": {}
        }
      }
    ],
    "alert_rules": [
      {
        "ref": "alert-aws-ec2-status-check-failed",
        "name": "EC2 status check failed",
        "description": null,
        "query": "max by (region, dimension_InstanceId) (aws_ec2_status_check_failed_maximum)",
        "condition_op": "gt",
        "threshold": 0,
        "interval": "1m",
        "for": "10m",
        "severity": "critical",
        "message": "EC2 instance {{labels.dimension_InstanceId}} ({{labels.region}}) is failing its status checks — AWS considers it impaired.",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      },
      {
        "ref": "alert-aws-alb-high-5xx-ratio",
        "name": "ALB high 5xx ratio",
        "description": null,
        "query": "(sum by (region, dimension_LoadBalancer) (aws_applicationelb_httpcode_target_5_xx_count_sum) + sum by (region, dimension_LoadBalancer) (aws_applicationelb_httpcode_elb_5_xx_count_sum)) / clamp_min(sum by (region, dimension_LoadBalancer) (aws_applicationelb_request_count_sum), 1)",
        "condition_op": "gt",
        "threshold": 0.05,
        "interval": "1m",
        "for": "10m",
        "severity": "warning",
        "message": "ALB {{labels.dimension_LoadBalancer}} ({{labels.region}}) is serving {{value | percent:1}} 5xx responses.",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      },
      {
        "ref": "alert-aws-rds-low-free-storage",
        "name": "RDS low free storage",
        "description": null,
        "query": "min by (region, dimension_DBInstanceIdentifier) (aws_rds_free_storage_space_average)",
        "condition_op": "lt",
        "threshold": 5368709120,
        "interval": "1m",
        "for": "15m",
        "severity": "critical",
        "message": "RDS instance {{labels.dimension_DBInstanceIdentifier}} ({{labels.region}}) has {{value | bytes}} of storage left — it stops accepting writes at zero.",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      },
      {
        "ref": "alert-aws-lambda-high-error-ratio",
        "name": "Lambda high error ratio",
        "description": null,
        "query": "sum by (region, dimension_FunctionName) (aws_lambda_errors_sum) / clamp_min(sum by (region, dimension_FunctionName) (aws_lambda_invocations_sum), 1)",
        "condition_op": "gt",
        "threshold": 0.05,
        "interval": "1m",
        "for": "10m",
        "severity": "warning",
        "message": "Lambda {{labels.dimension_FunctionName}} ({{labels.region}}) is failing {{value | percent:1}} of invocations.",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      },
      {
        "ref": "alert-aws-sqs-backlog-age",
        "name": "SQS message backlog aging",
        "description": null,
        "query": "max by (region, dimension_QueueName) (aws_sqs_approximate_age_of_oldest_message_maximum)",
        "condition_op": "gt",
        "threshold": 600,
        "interval": "1m",
        "for": "10m",
        "severity": "warning",
        "message": "SQS queue {{labels.dimension_QueueName}} ({{labels.region}}) has messages {{value}}s old — consumers are stalled or falling behind.",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      },
      {
        "ref": "alert-aws-ec2-high-cpu",
        "name": "EC2 high CPU",
        "description": null,
        "query": "avg by (region, dimension_InstanceId) (aws_ec2_cpuutilization_average)",
        "condition_op": "gt",
        "threshold": 90,
        "interval": "1m",
        "for": "30m",
        "severity": "warning",
        "message": "EC2 instance {{labels.dimension_InstanceId}} ({{labels.region}}) has averaged {{value}}% CPU for 30 minutes.",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      },
      {
        "ref": "alert-aws-rds-high-cpu",
        "name": "RDS high CPU",
        "description": null,
        "query": "avg by (region, dimension_DBInstanceIdentifier) (aws_rds_cpuutilization_average)",
        "condition_op": "gt",
        "threshold": 90,
        "interval": "1m",
        "for": "15m",
        "severity": "warning",
        "message": "RDS instance {{labels.dimension_DBInstanceIdentifier}} ({{labels.region}}) is at {{value}}% CPU.",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      },
      {
        "ref": "alert-aws-alb-unhealthy-targets",
        "name": "ALB unhealthy targets",
        "description": null,
        "query": "max by (region, dimension_TargetGroup) (aws_applicationelb_un_healthy_host_count_maximum)",
        "condition_op": "gt",
        "threshold": 0,
        "interval": "1m",
        "for": "10m",
        "severity": "critical",
        "message": "Target group {{labels.dimension_TargetGroup}} ({{labels.region}}) has {{value}} unhealthy target(s).",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      },
      {
        "ref": "alert-aws-lambda-throttling",
        "name": "Lambda throttling",
        "description": null,
        "query": "sum by (region, dimension_FunctionName) (aws_lambda_throttles_sum)",
        "condition_op": "gt",
        "threshold": 0,
        "interval": "1m",
        "for": "10m",
        "severity": "warning",
        "message": "Lambda {{labels.dimension_FunctionName}} ({{labels.region}}) is being throttled ({{value}} rejections per period) — check reserved/account concurrency.",
        "notify_on_resolve": true,
        "paused": false,
        "channels": []
      }
    ]
  }
}
