Skip to main content
Monitor the CGIAR Risk Intelligence Tool’s Lambda functions, CloudWatch logs, and system metrics to ensure reliable operation.

CloudWatch Log Groups

All Lambda functions automatically create CloudWatch log groups with structured logging:

API Lambda

Log Group: /aws/lambda/alliance-risk-api
  • HTTP request/response logs
  • Authentication events (Cognito token verification)
  • Database connection status
  • Error stack traces

Worker Lambda

Log Group: /aws/lambda/alliance-risk-worker
  • Job processing lifecycle (PENDING → PROCESSING → COMPLETED/FAILED)
  • Bedrock model invocations
  • SQL execution logs (migrations via run-sql action)
  • Job retry attempts and failures

Accessing CloudWatch Logs

AWS Console

  1. Navigate to CloudWatch → Log Groups
  2. Select /aws/lambda/alliance-risk-api or /aws/lambda/alliance-risk-worker
  3. Click Search all log streams
  4. Use filter patterns (see below)

AWS CLI

Log Filter Patterns

Error Detection

Authentication Issues

Performance Monitoring

Key Metrics to Monitor

Lambda Metrics (CloudWatch)

API Lambda Alerts

Worker Lambda Alerts

Log Analysis Examples

Find Failed Jobs

Track Bedrock Usage

Identify Prisma Connection Issues

Structured Logging

The application uses NestJS Logger with structured output:

Log Levels

Sample Log Entries

Successful Request:
Prisma Error:
Bedrock Invocation:

Setting Up CloudWatch Alarms

Create Error Rate Alarm (AWS CLI)

Create Duration Alarm

Lambda Cold Starts

Identifying Cold Starts

Look for INIT_START messages in logs:

Cold Start Duration

Cold starts add 2-5 seconds to first invocation:
  • NestJS module initialization (~1-2s)
  • Prisma client generation (~500ms-1s)
  • Database connection pool setup (~500ms)

Mitigation Strategies

  1. Provisioned Concurrency (costs $$$):
  2. Keep-Warm Schedule (EventBridge):
    • Invoke Lambda every 5 minutes with warmup event
    • Filter in code: if (event.source === 'warmup') return
  3. Accept Cold Starts (recommended for MVP):
    • Cold starts are infrequent with moderate traffic
    • First request after inactivity will be slower

Database Monitoring

RDS CloudWatch Metrics

Connection Pool Monitoring

Prisma uses a connection pool per Lambda instance. Check logs for:
Warning Signs:
  • Multiple “Database connected” per invocation (connection leak)
  • Lambda timeouts with no error (event loop not draining)

Bedrock Monitoring

Throttling Detection

Bedrock has model-specific rate limits. Check for:

Circuit Breaker Status

The app uses a circuit breaker for Bedrock calls:
  • CLOSED: Normal operation
  • OPEN: 3+ consecutive failures, all requests fail fast
  • HALF_OPEN: Testing recovery, 2 successes → CLOSED
Look for: "Circuit breaker is open" in logs

Retry Behavior

Bedrock calls retry 3 times with exponential backoff:
  • Base delay: 200ms
  • Max delay: 5s
  • Retries: ThrottlingException, ServiceUnavailableException

Next Steps