Skip to content

Constructs & Workloads

synthkit's catalog is a collection of isolated construct and workload modules. As of v1.0.0 there are 42 construct kinds and 2 workload kinds. Each construct is a separate Go package under internal/construct/<kind>/; workloads live under internal/workload/<kind>/. Neither constructs nor workloads import each other or the blueprint package — isolation is enforced by internal/archtest.

Construct granularity principle

A construct boundary is drawn at the smallest unit that is independently declarable in a blueprint AND carries a distinct shared identity or cross-construct join — not at the delivery pipeline.

  • Distinct fixture + distinct declaration + distinct join → separate construct, sharing a mechanic library. ec2, rds, and elasticache are separate because each hangs off its own fixture type (fixture.Node, fixture.DB, fixture.Cache) and joins to other constructs through that identity.
  • Same pipeline + same identity + declared together → one construct with config-gated sub-families. cw_infra bundles ALB/NLB/EBS/NAT/EKS/S3/Firehose off one cloud identity, each family gated by a per-family switch. k8s_cluster gates OpenCost/Kepler/Alloy via k8s_monitoring config.
  • Engine/type variants of one resource → a config discriminator, not a new kind. RDS Postgres vs Aurora Postgres share the rds construct; the engine selects the CloudWatch family variant.

For the emission switch that controls which constructs a declaration fans into, see emission-switches.md.

Kubernetes

Constructs in this group are substrate-scoped — they carry no blueprint label. The cluster name disambiguates across blueprints.

KindDescriptionSignal area
k8s_clusterCore k8s-monitoring substrate: kube-state-metrics, node-exporter, cAdvisor, kubelet. Gates OpenCost/Kepler and the Alloy collector via k8s_monitoring config.k8s
k8s_profilingPyroscope-based continuous profiling substrate for workloads running in the cluster.profiles
ksm_ingressKSM ingress metrics (kube_ingress_*) with cluster disambiguation.k8s
etcdetcd cluster health and Raft metrics.k8s-addons

Kubernetes add-ons

Add-ons are declared under cluster.addons in the blueprint. Each is substrate-scoped and emits pod-joined metrics + logs.

KindDescriptionSignal area
argocdArgo CD controller and application metrics.k8s-addons
cert_managercert-manager certificate lifecycle metrics.k8s-addons
cluster_autoscalerCluster Autoscaler node scaling and utilization metrics.k8s-addons
core_dnsCoreDNS request and cache metrics.k8s-addons
ebs_csiAWS EBS CSI driver metrics (volume attach, provision, I/O).k8s-addons
envoy_gatewayEnvoy Gateway proxy metrics (upstream/downstream request rates, latency).k8s-addons
external_dnsExternalDNS DNS sync and registry metrics.k8s-addons
karpenterKarpenter node provisioner metrics (node lifecycle, disruption, scheduling).k8s-addons
load_balancer_controllerAWS Load Balancer Controller metrics.k8s-addons
vpc_cniAWS VPC CNI IP allocation metrics.k8s-addons

Alloy health

KindDescriptionSignal area
alloy_healthGrafana Alloy / agent health and pipeline metrics.fm

AWS infrastructure (CloudWatch)

These constructs are blueprint-scoped (they carry the blueprint selector label). They use internal/cw for the five-stat CloudWatch expansion (_sum/_average/_maximum/_minimum/_sample_count).

KindDescriptionSignal areaBlueprint declaration
ec2EC2 instance CloudWatch metrics (aws_ec2_*). Shares fixture.Node identity with the k8s cluster.cwGated by cluster.observability.cloudwatch
cw_infraCloudWatch infrastructure families: ALB, NLB, EBS, NAT Gateway, EKS control plane, S3, Kinesis Firehose. Each family is independently gated.cwcloud.cloudwatch.* switches

AWS databases and cache

KindDescriptionSignal areaBlueprint declaration
rdsRDS CloudWatch metrics (aws_rds_*). Shares fixture.DB with dbo11y constructs. Supports Postgres, MySQL, Aurora variants.cwdatabases[].observability.cloudwatch
elasticacheElastiCache CloudWatch metrics (aws_elasticache_*).cwcaches[].observability.cloudwatch
docdbAmazon DocumentDB CloudWatch metrics (aws_docdb_*).cwdatabases[].engine: documentdb
neptuneAmazon Neptune CloudWatch metrics (aws_neptune_*).cwdatabases[].engine: neptune
aossAmazon OpenSearch Serverless (AOSS) CloudWatch metrics.cwintegrations: aoss

AWS managed services

KindDescriptionSignal area
glueAWS Glue job and crawler CloudWatch metrics.cw
mwaaAmazon Managed Workflows for Apache Airflow CloudWatch metrics.cw

Database Observability (dbo11y)

Substrate-scoped. Shares fixture.DB identity with the corresponding CloudWatch construct.

KindDescriptionSignal areaBlueprint declaration
dbo11y_postgresGrafana Database Observability for PostgreSQL — query digests, connection pool, replication.dbo11ydatabases[].observability.dbo11y: true
dbo11y_mysqlGrafana Database Observability for MySQL.dbo11ydatabases[].observability.dbo11y: true

CSP: Azure and GCP

Both are substrate-scoped. Sub-families are gated by sub_signals: [...] in the integration declaration (empty/omitted = all emit).

KindDescriptionSignal area
csp_azureGrafana CSP Azure integration: VMs, App Service, SQL, Storage, Cosmos DB, Functions, and more.cspazure
csp_gcpGrafana CSP GCP integration: Compute, Cloud SQL, Cloud Storage, Pub/Sub, Cloud Run, BigTable.cspgcp

AI & LLM

All AI/LLM constructs are blueprint-scoped and tech-generic. gen_ai metrics go via sink/promrw final names; spans via the hand-encoded OTLP seam. The OTel metrics SDK ban applies.

KindDescriptionSignal areaBlueprint declaration
bedrockAmazon Bedrock CloudWatch model invocation metrics (aws_bedrock_*).bedrockintegrations: bedrock
agentcoreAWS Bedrock AgentCore CloudWatch metrics and Loki logs.agentcoreintegrations: agentcore
portkey_gatewayPortkey AI gateway: request/token/cost metrics scraped from the Portkey API.portkeyintegrations: portkey_gateway
portkey_pollerPortkey native scrape metrics (the separate Portkey Prometheus exporter path).portkeyintegrations: portkey_poller
langsmith_evalLangSmith evaluation metrics: scores, pass rates, latency by evaluator.langsmithintegrations: langsmith_eval
langsmith_platformLangSmith platform-level metrics: run volumes, latency, token counts.langsmithintegrations: langsmith_platform
snowflakeSnowflake Cortex usage and query metrics via the Snowflake Grafana integration.snowflakeintegrations: snowflake
qualification_pipelineAI qualification pipeline metrics (model evaluation + selection flow).qualificationintegrations: qualification_pipeline

Network

KindDescriptionSignal areaBlueprint declaration
network_topologySNMP topology exporter metrics: device availability, interface I/O, link state, federation metrics. Mirrors the external network-topology-exporter signal contract.nettopointegrations: network_topology

Hosts

KindDescriptionSignal areaBlueprint declaration
hostBare-metal or VM host metrics (node_exporter-style) for non-k8s hosts.hosthosts:

Integrations and Grafana products

These constructs model external systems Grafana Cloud ingests, or Grafana Cloud products you have enabled.

KindDescriptionSignal areaBlueprint section
cloudflareCloudflare zone metrics via the Grafana Cloudflare integration (blueprint-scoped).cloudflareintegrations: cloudflare
beyla_agentGrafana Beyla eBPF instrumentation — application RED metrics without SDK instrumentation.beylaintegrations: beyla
synthetic_monitoringGrafana Synthetic Monitoring check data: probe results, latency, reachability.smfeatures: synthetic_monitoring
fleet_managementGrafana Fleet Management collector registration and health.fmfeatures: fleet_management

Workloads

Workloads mint request-correlated telemetry. They share the blueprint's ledger for end-to-end correlation IDs. Both workload kinds may coexist in one blueprint.

KindWhen to useDescription
web_serviceA single serviceEmits RED metrics, traces (browser → backend → DB hops), optional RUM/Faro beacons, optional gen_ai hops. The simple, common case.
appA multi-service graphA declared graph of typed service nodes (services:), each emitting its own custom metrics/logs/spans via the telemetry DSL. One ledger mint drives one correlated trace across the whole graph. Use when you need per-service incident targeting, per-service scaling, or custom metric families per node.

The app workload's telemetry DSL supports typed nodes (frontend/web/grpc/worker/job/stream/gateway/db/cache/llm/agent/tool/workflow/retrieval), ValueModel one-of value generators (const, enum, int_range, float_range, normal, shape, ref), and reusable Profile bundles from the catalog in internal/telemetryspec/profiles.

For workload configuration and the telemetry DSL reference, see workloads.md.