AWS

Every CloudWatch metric, every Step Functions execution, one wizard.

Launch a CloudFormation stack, paste the role ARN, pick the services you care about. The PulseBoard cloud-poller assumes the role with a server-minted ExternalId and starts streaming samples in seconds — across every region you tick.

Connect AWS → AWS docs

Integrations

Five GA AWS integrations. Toggle them per workspace from the cloud onboarding wizard.

CloudWatch metrics GA

GetMetricData across every namespace AWS exposes — EC2, RDS, ELB, ALB, NLB, Lambda, ECS, EKS, S3, SQS, SNS, DynamoDB, ApiGateway, CloudFront, Kinesis and the rest. Dimensions land as labels, statistics (Sum/Avg/Max/Min/p90/p99) as a Stat="..." label. Series shape: aws_cloudwatch_<snake>{Namespace,Stat,Dimension="..."}.

CloudWatch Logs GA

FilterLogEvents against log groups matching a configurable prefix. Per-event severity inferred from FATAL/ERROR/WARN/DEBUG/TRACE keywords. Stream name carried inline. Tenant pinned via workspace API key so no account/region in the body.

CloudTrail management events GA

LookupEvents API every tick. Service derived from EventSource. Level error when the embedded event carries an errorCode, else info. Resources truncated to first three. Opt-in (volume can surprise).

Lambda function metrics GA

Per-function Invocations / Errors / Throttles / Duration (Sum, Avg, p99) at 60-second granularity. Plus a Lambda extension — bundled as a separate layer — for in-process OTLP egress with cold-start cost <5ms.

Step Functions waterfall GA

EventBridge rule on aws.states → Kinesis Firehose → PulseBoard. Execution-status changes become root spans; task-status changes become child spans. FAILED / TIMED_OUT / ABORTED emit exception span events. Re-deliveries collapse to the same span via SHA-256 derived IDs.

Lambda extension GA

An Extension API Layer (Amazon Linux 2 + Graviton) you attach via --layers ${LAYER_ARN}. Forwards logs and OTLP from your function to PulseBoard with zero code changes.

How onboarding works

  1. 1
    Create the cloud account

    From the portal, give it a name and pick regions. We mint a 256-bit hex ExternalId and remember it across role-ARN rotations.

  2. 2
    Launch the CloudFormation stack

    One-click into your AWS console with the template URL pre-filled. The stack provisions an IAM role with up to 18 conditional per-integration policies (all List*/Describe*/Get*) and the optional Firehose delivery stream for Step Functions.

  3. 3
    Paste the role ARN

    The wizard immediately calls STS AssumeRole + GetCallerIdentity with an anti-spoof check that the returned account ID matches the one you entered.

  4. 4
    Pick your integrations

    Cloudwatch, cloudwatch-logs, cloudtrail, lambda, stepfunctions — each opt-in. Defaults to the four highest-signal services.

  5. 5
    Watch the samples arrive

    Per-(account,kind,region) leases in Postgres mean horizontal scale-out is automatic. The portal shows the last run, last error and samples-per-run for every lease.

What you can do with it

Dashboards

Multi-account, multi-region

Variable templates over AccountId and Region labels mean one dashboard covers your whole AWS estate. Switch the dropdown to flip between accounts.

Alerts

Alert on CloudWatch like Prometheus

Every metric is a Prom series. Use full PromQL — rate(), avg by(), joins — to alert on CloudWatch values that AWS's own console can't express.

Traces

Serverless waterfalls

Step Functions executions are rendered in the Traces view with full task children, exception events and per-task duration histograms. No source-code instrumentation.

Security & cost

Read-only by construction

Every action in the IAM template is List* / Describe* / Get*. The role can be revoked at any time and the deployed CFN stack uninstalled in seconds. Server-minted ExternalId means no one else can assume the role even if they steal the ARN.

Predictable AWS billing

GetMetricData is batched five metrics per call, paginated. Typical 50-metric CloudWatch run costs ~$0.10 / day / account / region. CloudTrail LookupEvents is rate-capped. The poller never tail-loads more than the configured per-tick budget.

Ready to wire AWS in?

Start with Basic → AWS docs