
resource "aws_apigatewayv2_stage" "tracks" {
  api_id      = aws_apigatewayv2_api.tracks.id
  auto_deploy = true
  name        = "prod"
  access_log_settings {
    destination_arn = aws_cloudwatch_log_group.tracks_access_logs.arn
    format = jsonencode({
      requestId         = "$context.requestId"      
      httpMethod        = "$context.httpMethod"      
      routeKey          = "$context.routeKey"      
      status            = "$context.status"      
      responseLength    = "$context.responseLength"      
      requestTime       = "$context.requestTime"    
    })
  }
  default_route_settings {
    detailed_metrics_enabled = true
    throttling_burst_limit   = 5000    
    throttling_rate_limit    = 10000
  }
}
resource "aws_cloudwatch_log_group" "tracks_lambda_api" {
  name              = "/aws/lambda/tracks_lambda_api"  
  retention_in_days = 90
  tags = {
    "fluidattacks:comp" = "tracks"    "fluidattacks:line" = "cost"    "Name"              = "tracks_lambda_api_function_log_group"  }
}
/aws/api_gateway/[api-name]/aws/lambda/[function-name]Latency - Overall latency of your APIIntegrationLatency - Time between API Gateway and backend4XX / 5XX - Client and server errorsCount - Number of API callsDuration - Execution timeErrors - Number of errorsThrottles - Number of throttled invocationsConcurrentExecutions - Number of concurrent executionsfields @timestamp, requestId, routeKey, status
| filter status = 200
| sort @timestamp desc
                                            fields @timestamp, routeKey, status, errorMessage
| filter status >= 400
| sort @timestamp desc
| limit 20
                                                fields @timestamp, connectionId, eventType, errorMessage| filter eventType = "CONNECT" or eventType = "DISCONNECT"
| sort @timestamp descfields @timestamp, connectionId, eventType, errorMessage
| filter eventType = "MESSAGE" and status >= 400
| sort @timestamp descruns/vpc/infra/alarms.tf:resource "aws_cloudwatch_metric_alarm" "lambda_error_alarm" {
  for_each            = toset(var.lambda_names)
  alarm_name          = "${each.value}_Error_Alarm"  
  metric_name         = "Errors"  
  namespace           = "AWS/Lambda"
  period              = 60
  statistic           = "Sum"
  threshold           = 1
  alarm_actions       = [aws_sns_topic.central_alarms.arn]
}