Skip to content

Blueprint Schema Reference

This reference is generated from the live Go types via just gen and reflects the schema enforced at load time. Decoding is strict: any key not listed here causes a loud load error. If you hit an unexpected load failure, check that your key spellings match exactly.

Regenerating the schema

Run just gen to regenerate BLUEPRINT-SCHEMA.md from the source types. The TestSchemaCurrent gate fails if the committed file drifts from the live types.


Top-level blueprint document

KeyTypeRequiredDescription
namestringyesUnique blueprint identifier; also the determinism seed root.
labelstringyesSelector value stamped on every blueprint-scoped series. Defaults to name.
metadataobjectnoHuman-facing annotation. UI-only; never affects emission.
metadata.descriptionstringnoFree-text summary shown in the UI.
metadata.tags[]stringnoFree-form labels for filtering/grouping.
metadata.ownerstringnoOwning team or person.
metadata.linksmap[string]stringnoNamed external references (name → url).
metadata.categorystringnoSingle classification (e.g. demo/reference/customer).
shapestringnoDefault shape profile for the whole blueprint.
timezonestringnoBusiness-hours anchor. Default Europe/Zurich. Mutually exclusive with regions.
regions[]objectnoFollow-the-sun multi-timezone composite. Mutually exclusive with timezone.
regions[].namestring—Region identifier.
regions[].timezonestring—IANA timezone string.
regions[].weightfloat—Relative traffic weight for this region.
series_budgetintnoPer-blueprint series cap.
environments[]objectyesOne entry per deployment environment.
workloads[]objectnoApplication workloads (request traffic).
featuresmap[string]confignoGrafana Cloud product declarations (synthetic_monitoring, fleet_management).
integrationsmap[string]confignoExternal-source declarations (cloudflare, csp_azure, csp_gcp, etc.).
incidents[]objectnoScheduled or interval-recurring failure activations.
scenarios[]objectnoNamed, reusable failure bundles composed of effects.
hosts[]objectnoTraditional non-Kubernetes machines.
agent_observabilityobjectnoManual Agent Observability management declarations for agento11y-provision. Never enables runtime emission. See agent_observability.

agent_observability

Optional top-level block read only by the source-built agent-observability provisioning command. The emitter ignores it: loading a blueprint with this block does not install runtime admission or change emission.

KeyTypeRequiredDescription
closures[]objectyesOne closure per real agent owner.
closures[].keystringyesBlueprint-unique local key.
closures[].agent.instancestringyesPost-fanout workload instance that declares the agent.
closures[].agent.agent_namestringyesDeclared agent name; it must have a real producer.
closures[].evaluators[], hooks[], rules[], collections[], suites[]objectno{key, spec} entries; spec uses the exact management API request fields.
closures[].actions[]objectno{key, parent_rule, spec}; parent_rule is a rule key in the same closure.
closures[].suites[].draftobjectyes, per suite{key, spec, cases[], bindings: {key, bindings[]}, publication: {key, spec}}.

Decoding is stricter than the rest of the blueprint: anchors, aliases, merge keys, duplicate or case-variant keys, lossy numbers and trailing documents refuse. Scalars must resolve to plain string, integer, float, boolean or null (explicit !!str/!!int/!!float/!!bool/!!null tags are accepted but must match the field type), and null is kept only inside open case maps. Evaluator config and hook/rule match also accept a JSON-object string; a hook's blocked_tools and list form of redact are aliases for tool_filter.blocked_names and redact.patterns. The full field list is in BLUEPRINT-SCHEMA.md.


environments[]

KeyTypeRequiredDescription
environments[].namestringyesEnvironment name (e.g. prod, staging).
environments[].weightfloatnoRelative traffic volume. Default 1.0.
environments[].productionboolnoKeeps weekend traffic at full level. Default: true when name == "prod".
environments[].metadataobjectnoHuman-facing annotation (same sub-keys as top-level metadata).
environments[].cloudobjectnoAWS cloud account and service config.
environments[].clusterobjectnoKubernetes cluster config.
environments[].databases[]objectnoDatabase instances.
environments[].caches[]objectnoCache instances.

environments[].cloud

KeyTypeRequiredDescription
cloud.providerstringyes"aws" (v1).
cloud.account_idstringyesAWS account ID (string to preserve leading zeros).
cloud.regionstringyesAWS region (e.g. us-east-1).
cloud.vpc_idstringyesVPC identifier.
cloud.nat_gatewaysintnoNumber of NAT Gateway instances to emit aws_natgateway_* for.
cloud.cloudwatchobjectnocw_infra sub-family toggles. See cw_infra config below.
cloud.aossobjectnoAmazon OpenSearch Serverless config. Absent ⇒ not emitted. See aoss config.
cloud.mwaaobjectnoAmazon Managed Workflows for Apache Airflow config. Absent ⇒ not emitted. See mwaa config.
cloud.glueobjectnoAWS Glue ETL config. Absent ⇒ not emitted. See glue config.
cloud.bedrockobjectnoAWS Bedrock CloudWatch config. Absent ⇒ not emitted. See bedrock config.
cloud.agentcoreobjectnoAWS Bedrock AgentCore CloudWatch config. Absent ⇒ not emitted. See agentcore config.
cloud.lambdaobjectnoFunction list and account concurrency; captured config, remote-write only.
cloud.sqsobjectnoOrdinary queue list; captured config, remote-write only.
cloud.dynamodbobjectnoProvisioned table list and account quotas; captured config, remote-write only.
cloud.redshiftobjectnoProvisioned cluster snapshots, named queues and optional I/O latency; captured config, remote-write only.
cloud.cloudwatch_logsobjectnoLog-group uncompressed intake and optional independent Lambda delivery observations; captured config, remote-write only.
cloud.schedulerobjectnoEventBridge Scheduler fixed-rate schedules with an opt-in target-error mode; captured config, remote-write only.

Captured CloudWatch config

cloud.lambda, cloud.sqs, cloud.dynamodb, cloud.redshift and cloud.cloudwatch_logs are optional strict-decoded objects; absent means no instance. They require cloudwatch_export: remote_write (the default) and explicit cloud identity. Only one declaration per blueprint/account/region/kind is admitted, even across environments with disjoint resources. See authoring and value assumptions and the canonical emitted subset. These engineering bounds are not AWS service quotas.

ObjectAccepted fields / constraints
cloud.lambdafunctions (1..1000); reserved_concurrency (whole 0..1,000,000).
functions[]name (unique unqualified 1..64 letters/digits/underscore/hyphen); invocations_per_min, throttles_per_min, async_received_per_min, stream_batches_per_min (0..1e9); duration_ms (0..60000); async_age_ms, iterator_age_ms (0..604800000); error_fraction, async_dropped_fraction (0..1); optional duration_ms_min/duration_ms_max (0..60000, declared together, bracketing duration_ms, which stays the mean) widen Duration Minimum/Maximum; optional load: business scales the four arrival rates by the business curve (default constant); with load: business, optional duration_ms_idle (positive, at most duration_ms) makes the mean Duration follow the same curve from that idle value up to duration_ms at the plateau, and any duration_ms_min/duration_ms_max bounds scale with it (omitted keeps constant duration); duration_load: business (requires duration_ms_idle) applies that duration curve without load: business, so a scheduled function keeps its constant invocations while its batch duration follows the curve. Total executions cover admitted async plus stream rates. Optional zero_valued_samples: true makes Throttles and Errors observe every request (executions plus throttled requests) with 0 or 1, as a lab capture reported, instead of only when an event occurs; default output is unchanged.
cloud.sqsqueues (1..64).
queues[]Unique name, unique non-global collector_name; arrivals_per_second, receives_per_second (0..1e6); whole message_bytes (0..1048576, at least 1 for positive arrivals); delay_seconds (integer 0..900), processing_seconds (integer 0..43200); optional load: business scales arrivals by the business curve, with receives_per_second as the consumer throughput ceiling (default constant); optional burst: {period, duty, phase} (unbound queues only; period a Go duration 1s..168h, duty in (0,1], optional phase in [0,period), all epoch-aligned on the tick clock) delivers the same mean arrivals_per_second inside the first duty of each period, offset by phase, at arrivals_per_second / duty (at most 1e6) and none in the rest, so a backlog forms while that exceeds receives_per_second and drains after (default absent: arrivals evenly spread; needs positive arrivals); optional enrichment.
queues[].enrichmentOptional explicit asserts_env, asserts_site, service, environment, owner, purpose, terraform; the last four project tag_* labels, not dimensions.
cloud.dynamodbaccount, tables (empty permits account-only snapshots). All numeric inputs finite/nonnegative and at most 1e9 unless constrained further.
accountPositive max_reads, max_writes, max_table_reads, max_table_writes; table maxima cannot exceed account maxima.
tables[]Unique name, unique non-global collector_name; positive provisioned_reads, provisioned_writes within table/account quotas; optional write_source, replication, conditional_failures_per_second, operations, stream.
operations[]Unique name (GetItem, PutItem, UpdateItem, Query, Scan, SELECT-only ExecuteStatement); requests_per_second, read_units, write_units, positive latency_ms, whole returned_items. Read operations require read units only; PutItem and UpdateItem write units only (UpdateItem emits only SuccessfulRequestLatency on TableName+Operation, takes no throttled_requests_per_second and is excluded from GlobalTable customer writes); returned items only for selection operations. Optional load: business (also on the table, where an operation's own load overrides it) makes requests_per_second the peak rate and scales it, and a GlobalTable's replication.writes_per_second, by the blueprint business curve (default constant); the Build capacity guard still applies to the peak. Optional latency_min_ms and latency_max_ms (both or neither, latency_min_ms <= latency_ms <= latency_max_ms) spread Minimum/Maximum around a mean that drifts per window; omitted keeps constant latency. Optional throttled_requests_per_second (GetItem or PutItem only, 0..1e9, follows the operation's load) adds throttled requests that consume no capacity and emit ThrottledRequests (TableName+Operation) plus table-level ReadThrottleEvents (GetItem) or WriteThrottleEvents (PutItem), one sample of 1 per throttled request and no zero samples; omitted emits none of the three. Optional resource (GetItem or PutItem only) binds the operation to a declared quota resource and requires quota_unit (requests, read_units for GetItem or write_units for PutItem; only with resource): the quota's admitted volume becomes the successful requests and its rejected volume the throttled requests, divided by the operation's read_units or write_units when the quota counts capacity units (one RCU is one strongly consistent or two eventually consistent reads of an item up to 4 KB, one WCU one write of an item up to 1 KB, per AWS). A bound operation omits requests_per_second, throttled_requests_per_second and load; one quota binds one operation; its limit_rps, in units, counts toward the provisioned-capacity guard.
replicationGlobalTable-only required writes_per_second, positive units_per_write; GlobalTable cannot also declare customer write operations. Demand must fit provisioned capacity.
streamNonblank label; requests_per_second, whole records_per_request (0..1000), whole bytes_per_record; positive latency_ms; response size at most 1 MiB. GetRecords operation is selected by this block, not authored.
cloud.redshiftclusters (1..100), no inferred inventory.
clusters[] (Redshift)Unique unpadded name and unique non-global collector_name; required snapshot; optional read_io, write_io, wlm_queues (at most 100).
snapshotAll fields required: finite cpu_percent, disk_used_percent (0..100); whole database_connections, total_tables (0..1e9); boolean healthy, maintenance. Explicit zero/false is valid.
read_io, write_ioFinite operations_per_second (0..1e6, omitted=0); required finite latency_seconds ((0,3600]). Independent sparse completed-I/O assumptions, not throughput.
wlm_queues[]Unique unpadded name within cluster; required whole waiting, running (0..1e9).
cloud.cloudwatch_logslog_groups (1..100), no inferred inventory.
log_groups[]Unique unpadded name; required finite events_per_second (0..1e6, explicit zero valid); required finite whole uncompressed_bytes_per_event (1..65536); optional subscription_filters.
subscription_filters[]At most 100 total across log groups; unique unpadded name within group; required destination_type: Lambda; required period_observation. No target identity or joins.
period_observationAll four required, whole finite nonnegative: delivery_errors, delivery_throttling, forwarded_log_events (0..60000001), forwarded_bytes (0..3932160065536, already compressed). No defaults; explicit zero valid. One observation per active minute, four value stats=x, sample_count=1.
cloud.schedulerschedules (1..1000), no inferred inventory. Same one-declaration-per-blueprint/account/region rule as the kinds above.
schedules[]name (1..64 letters/digits/./_/-, unique within its group); optional group (same character rule, default default); required rate as rate(<whole value> minute(s)\|hour(s)\|day(s)), period at most 366 days, no cron()/at(); optional target_error_fraction (0..1, default 0) makes that fraction of runs target errors, each also counted as dropped (no retries modelled). A function-side failure belongs on the target's cloud.lambda entry instead.

Unspecified traffic is zero only where the Config permits omission; required Redshift/Logs assumptions reject absence. No ESM/fair/info/native switches or cross-service joins exist in these configs. Logs other delivery selectors/profiles and by-data-source, and Redshift user-query/NodeID/managed-storage expansions remain withheld. The generated schema reflects the registered Config types; the loader and Build enforce semantic constraints.

environments[].cluster

KeyTypeRequiredDescription
cluster.typestringyes"eks" (v1).
cluster.namestringyesCluster name. Must be globally unique across all enabled blueprints.
cluster.node_groups[]objectnoNode group definitions.
cluster.node_groups[].namestring—Node group name.
cluster.node_groups[].instance_typestring—EC2 instance type (e.g. m6i.xlarge).
cluster.node_groups[].desiredint—Desired node count.
cluster.node_groups[].provisionerstring—"managed" (default) or "karpenter".
cluster.node_groups[].osstring—linux (default) or windows.
cluster.k8s_monitoringobjectnoGrafana k8s-monitoring Helm chart config.
cluster.k8s_monitoring.enabledbool—Enable the k8s-monitoring substrate.
cluster.k8s_monitoring.chart_versionstring—Helm chart version string.
cluster.k8s_monitoring.alloybool—Deploy alloy-metrics StatefulSet.
cluster.k8s_monitoring.alloy_versionstring—Alloy version (e.g. "1.16.3"; canonicalized to "v1.16.3").
cluster.k8s_monitoring.opencostbool—Enable OpenCost cost-allocation.
cluster.k8s_monitoring.keplerbool—Enable Kepler energy monitoring.
cluster.k8s_monitoring.featuresmap[string]bool—Feature gates for Alloy collectors. Valid keys: cluster_metrics, cluster_events, pod_logs, node_logs, profiling, application_observability. Absent/false ⇒ that collector is not deployed.
cluster.k8s_monitoring.metrics_replicasint—alloy-metrics StatefulSet replica count. 0 ⇒ default 1.
cluster.k8s_monitoring.receiver_as_daemonsetbool—Model alloy-receiver as a per-node DaemonSet instead of a Deployment.
cluster.k8s_monitoring.fleet_managementbool—Register this cluster's Alloy collectors with the Fleet Management API. Requires enabled: true.
cluster.k8s_monitoring.control_planeobject—Gate individual control-plane metric families.
cluster.k8s_monitoring.control_plane.api_serverbool—Emit kube-apiserver metrics.
cluster.k8s_monitoring.control_plane.kube_proxybool—Emit kube-proxy metrics.
cluster.k8s_monitoring.control_plane.kube_schedulerbool—Emit kube-scheduler metrics.
cluster.k8s_monitoring.control_plane.kube_controller_managerbool—Emit kube-controller-manager metrics.
cluster.k8s_monitoring.control_plane.kubelet_probesbool—Emit kubelet probe metrics.
cluster.k8s_monitoring.pod_logs_methodstring—Pod-log collection mechanism. Empty with pod_logs: true defaults to "opentelemetry". Absent pod_logs ⇒ "none".
cluster.observabilityobjectnoGates the per-node EC2 CloudWatch lane.
cluster.observability.cloudwatchboolnoEmit the aws_ec2_* CloudWatch lane for cluster nodes. Default true.
cluster.addons[]objectnoCluster add-ons to deploy. May be bare scalar (- core_dns) or map form (- {name: cluster_autoscaler, min_nodes: 3, max_nodes: 10}).
cluster.addons[].namestring—Add-on construct kind (registry key).
cluster.addons[].<kind config>varies—Add-on construct's own config fields. See per-kind sections below.
cluster.platformobjectnoNode OS and Kubernetes version.
cluster.platform.osstring—"al2", "al2023" (default), or "bottlerocket".
cluster.platform.kubernetes_versionstring—e.g. "1.31" (default).
cluster.platform.kernel_versionstring—Optional override of the node kernel string.

environments[].databases[]

KeyTypeRequiredDescription
databases[].enginestringyes"postgres", "mysql", "docdb", or "neptune".
databases[].versionstringyesEngine version string.
databases[].namestringyesInstance name. Must be globally unique across all enabled blueprints.
databases[].instance_classstringnoe.g. "db.t3.medium". Empty ⇒ resolver default.
databases[].resourcestringnoName of a declared dependency or pool resource (environments[].resources) that drives the database's CloudWatch lane: read and write latency scale with the resource's latency factor and, for a pool, DatabaseConnections follows its in-use connections. A bound database takes no legacy database-axis mode and still needs the CloudWatch lane. PostgreSQL/MySQL may also enable observability.dbo11y: both lanes agree on same-minute pool connections, and dbo11y statement-seconds increments plus existing synthetic query/wait durations follow mean latency without server Lock/IO or SQL-error attribution. DocumentDB/Neptune dbo11y remains unsupported. See database bindings. Supported for postgres, mysql and docdb; a pool-bound docdb cluster reports the pool's in-use connections on its WRITER row only.
databases[].observabilityobjectnoEmission switch. Nil ⇒ CloudWatch only.
databases[].observability.cloudwatchboolnoEmit aws_rds_* CloudWatch family. Default true.
databases[].observability.dbo11yboolnoEmit database_observability_* lane. Default false.
databases[].observability.digestsintnodbo11y query-catalogue size. Default 40. Ignored unless dbo11y: true.

environments[].caches[]

KeyTypeRequiredDescription
caches[].enginestringyes"redis".
caches[].versionstringyesEngine version string.
caches[].namestringyesInstance name. Must be globally unique across all enabled blueprints.
caches[].instance_classstringnoe.g. "cache.r6g.large". Empty ⇒ resolver default.
caches[].observabilityobjectnoEmission switch.
caches[].observability.cloudwatchboolnoEmit the aws_elasticache_* CloudWatch lane. Default true.

workloads[]

KeyTypeRequiredDescription
workloads[].typestringyesWorkload kind registry key (web_service, app, ai_agent).
workloads[].namestringyesUnique workload instance name.
workloads[].runs_onstringyesCluster name this workload runs on. Resolved at load or fails.
workloads[].replicasintnoPod count (default 2).
workloads[].calls[]objectnoDownstream DB/cache hops.
workloads[].calls[].dbstring—Name of a declared database this workload calls.
workloads[].calls[].cachestring—Name of a declared cache this workload calls.
workloads[].<kind config>varies—Workload kind's own config. See web_service config and app config below; ai_agent fields are in the generated schema.
for_each_envboolnoFan this workload into one instance per environment.
envs[]stringnoSubset of environment names to fan into (used with for_each_env: true).

web_service workload config

KeyTypeRequiredDescription
tracingboolnoEnable the OTLP trace lane. Default true.
rumboolnoEnable the Faro/RUM lane (requires GC_FARO_* credentials).
trafficobjectnoTraffic shaping for the metric lane.
traffic.shapestring—Shape profile name (informational).
traffic.off_peak_rpsfloat—Trough request rate. Default 5.
traffic.peak_rpsfloat—Plateau request rate. Default 50.
endpoints[]objectnoRoute catalogue; requests are drawn uniformly.
endpoints[].routestring—e.g. "GET /v1/items".
endpoints[].error_ratefloat—[0,1] base error fraction.
endpoints[].p95_msfloat—p95 latency target in ms.
observabilityobjectnoAdditive emission switch for the Beyla eBPF observation lane.
observability.beylaobject—Beyla lane config.
observability.beyla.modestring—"kubernetes" (default) or "standalone".
observability.beyla.contextstring—"ebpf_only" (default) or "coexist_sdk".
observability.beyla.features[]string—Empty ⇒ Beyla default features for the mode.
pyroscopeobjectnoContinuous profiling lane config.
pyroscope.enabledbool—Enable profiling emission.
pyroscope.modestring—Push mode.
pyroscope.runtimestring—Runtime (e.g. go, jvm).
pyroscope.types[]string—Profile type names.
pyroscope.span_profilesbool—Enable span-correlated profiles.
otelobjectnoNative OTLP application-metrics lane. Absent or metrics: false ⇒ no OTLP metrics.
otel.metricsbool—Enable native OTLP http.server.* metrics emission.
otel.modestring—"naked" (default) or "k8s_monitoring".
contextstringno§5 resource-attr context (Platform, ContentGen, DataGen). Empty ⇒ omitted.
use_casestringno§5 resource-attr use case. Empty ⇒ omitted.
teamstringno§5 resource-attr team. Empty ⇒ omitted.
versionstringnoOverride the default service.version. Empty ⇒ default.

app workload config

The app workload declares a multi-service graph. See workloads.md for a conceptual guide.

KeyTypeRequiredDescription
services[]objectyesGraph nodes.
services[].namestringyesUnique graph identity; stamped as the service / service_name label.
services[].typestringnoSpan semantics + profile fit (e.g. frontend, web, grpc, db, llm, agent).
services[].runtimestringnogo, jvm, node, or python. Selects the runtime profile.
services[].entryboolnoMarks the request entry point (mints invocations).
services[].namespacestringnoKubernetes namespace. Propagates to both substrate placement and emitted telemetry.
services[].contextstringno§5 resource-attr context. Empty ⇒ omitted.
services[].use_casestringno§5 resource-attr use case. Empty ⇒ omitted.
services[].teamstringno§5 resource-attr team. Empty ⇒ omitted.
services[].versionstringnoOverride service.version.
services[].routes[]stringnoRequest routes (e.g. "GET /v1/items").
services[].replicasintnoPod count for this node (default 2).
services[].profiles[]stringnoCatalog profile-template names applied to this node.
services[].signalsobjectnoPer-node telemetry emission. Omitted block or keys leave all signals enabled.
services[].signals.tracesboolnoEmit this node's own spans; false still passes W3C trace context to downstream nodes and does not remove a traced caller's CLIENT span. Must be true for an entry with rum_faro or a node with agentic_flow.
services[].signals.logsboolnoEmit this node's profile and inline app log streams.
services[].signals.metricsboolnoEmit this node's profile and inline app metrics and target_info; false also removes this node's native OTLP inline metrics when otel.metrics: true, but not trace-derived APM or its pods' infrastructure metrics.
services[].calls[]stringnoDownstream node names (graph edges).
services[].db_instancestringnoBase database name to resolve per-env (e.g. "orders-pg" → "orders-pg-<env>").
services[].externalboolnoRemote/managed service: appears as a trace hop but is NOT placed as a k8s pod.
services[].pages[]objectnoRUM navigation inventory (frontend entry nodes only).
services[].pages[].pathstring—SPA route (e.g. /document-library).
services[].pages[].namestring—Human view name.
services[].pages[].actions[]string—User-action intents on this page.
services[].agentic_flowobjectnoIn-process LangGraph orchestration that adds a gen_ai span subtree. Nil ⇒ no agentic flow.
services[].agentic_flow.workflowstring—LangGraph graph name.
services[].agentic_flow.agents[]object—Pool of agents the workflow can invoke.
services[].agentic_flow.agents[].namestring—Agent name.
services[].agentic_flow.agents[].tools[]string—Tool names for this agent.
services[].agentic_flow.omit_chatbool—Drop the chat <model> leaf span (set when a connected gateway hop already models the LLM call).
services[].pyroscopeobjectnoPer-node profiling config. Same sub-keys as web_service.pyroscope.
services[].resourcesobjectnoContainer CPU/memory requests/limits and cAdvisor usage base. Affects only the k8s substrate lane.
services[].resources.cpu_requestfloat—CPU request (cores).
services[].resources.cpu_limitfloat—CPU limit (cores).
services[].resources.mem_requestfloat—Memory request (bytes).
services[].resources.mem_limitfloat—Memory limit (bytes).
services[].resources.cpu_usage_basefloat—cAdvisor CPU usage base (cores).
services[].controllerstringnok8s controller kind: Deployment (default) or StatefulSet.
services[].hpaboolnoEmit kube_horizontalpodautoscaler_* metrics.
services[].volume_claims[]stringnoPVC template names for kube_persistentvolumeclaim_* and kubelet volume stats.
services[].metrics[]objectnoInline custom metric definitions (DSL).
services[].logs[]objectnoInline custom log stream definitions (DSL).
services[].logs[].whenobjectnoWrites the line only for requests whose per-request draw is listed. See gated and dwelled log lines.
services[].logs[].when.request_drawobject—An enum request_draw (key, enum[]; no format), with the same weights in the same order as every other request_draw of that key in the workload's logs.
services[].logs[].when.in[]string—One or more of the enum's values, no repeats.
services[].logs[].dwell_secondsvalue modelnoSeconds the request spent before this line; a bundle's earlier lines are backdated from its completion by their successors' dwells. Numeric models only (const, int_range, float_range, normal, lognormal); a draw is clamped to [0, 86400] s. Keep a bundle's summed dwell well under 1 h (Loki's out-of-order window); the sum is not checked at load.
services[].spans[]objectnoInline custom span attribute definitions (DSL).
trafficobjectnoEntry node invocation volume shaping.
traffic.shapestring—Shape profile name.
traffic.off_peak_rpsfloat—Trough rate. Default 5.
traffic.peak_rpsfloat—Plateau rate. Default 50.
traffic.request_latency_p95_msfloat—Base end-to-end latency p95. Default 0 ⇒ 200ms. LLM/agentic apps should set this to seconds (e.g. 9000).
traffic.client_retryobjectnoEntry-client re-send of a failed request as a new request of the same logical request (the logical request's per-request draws repeat). Graph apps only: rejected with automation, agent_pipeline and traffic.from_resource. Omitted re-sends nothing. See entry-client retry.
traffic.client_retry.retriesint—Re-sends after the first attempt, 1 to 3.
traffic.client_retry.backoff_secondsfloat—Delay before the first re-send, in (0, 600]; doubled for each further re-send.
traffic.client_retry.retry_on[]string—One or more of 5xx (any 5xx status) and throttle (429); no repeats.
models[]objectnoValid (model, provider) routing pairs for AI apps. Empty ⇒ non-AI app.
models[].modelstring—gen_ai.request.model value (e.g. gpt-4o, claude-3.5-sonnet).
models[].providerstring—gen_ai.provider.name value (e.g. azure-openai, bedrock).

Custom-telemetry DSL (app workload metrics[], logs[], spans[])

The DSL value model is a one-of; exactly one of these keys must be present per value spec:

Generator keyTypeDescription
constfloatFixed numeric constant.
const_strstringFixed string constant.
enum[]{value, weight}Weighted random pick from a domain. Required for metric and stream labels.
int_range{min, max, p_zero}Uniform integer range with optional zero-probability.
float_range{min, max}Uniform float range.
normal{mean, stddev}Normal distribution.
bool{p_true}Bernoulli with given probability.
shape{base, mode}Incident-responsive value driven by the shape engine.
shape.batch{period, phase}Counter metric values only: releases the accumulated arrivals once per period ((0, 24h]), boundaries offset by phase ([0, period)), zero between releases. Not valid with stock_of, count_of or incident_value on the same metric. See batch arrivals.
now{stall_mode, arrivals_only, period, phase}Gauge metric values only: the tick time in Unix seconds. stall_mode holds it while that incident mode is active; arrivals_only advances it only on ticks where the node's source had arrivals; period ((0, 24h]) and phase ([0, period)) read the last schedule boundary, held under a stall. An enum label value may add its own stall_mode (one label per metric). See collector self-telemetry.
source_read{measure, per_tick, stall_mode}Counter metric values only. measure is records_inspected, checkpoint (both stop while stalled) or read_failures (only while stalled, needs a stall_mode); per_tick is finite and above 0 and is added per metric tick. See collector self-telemetry.
refstringCorrelation field reference (high-card). Metric/stream labels reject this.

Two further metric keys derive a metric from a counter (see stock gauges): stock_of derives a gauge and replaces its value; count_of sets how many values a histogram observes and keeps the histogram's value:

KeyTypeDescription
stock_of.metricstringThe counter to stock (not the gauge itself). Resolves every same-named counter spec on the node.
stock_of.dwell_secondsfloatFluid stock: finite and above 0. Set exactly one of this and stock_of.residence.
stock_of.residence{median, p95}Item stock of whole items with a lognormal residence: median > 0, p95 >= median, finite. At most 100,000 items per series; arrivals above that are dropped.
stock_of.stall_modestringItem stock only: while that incident mode is active at intensity i, residences advance at 1 - i of real time.
stock_of.fieldstringItem stock only: count (default) or oldest_age_seconds.
labels (on a stock_of gauge)mapOptional projection: each label must be a counter label with values the counter takes, and every combination must match a counter series. value_scale is rejected. Omitted inherits the counter's series.
count_ofstringHistogram only: the name of a counter on the same service node (or the node named by count_of_service); each tick the histogram observes as many values (drawn from its value) as that counter incremented, so _count tracks the counter. Labels must be a subset of the counter's, each value one it takes, and every combination must match a counter series. At most 10,000 observations per series per tick; a batched counter's whole-window release counts (rejected at load). See histogram counts from a counter.
count_of_servicestringWith count_of only: the service node whose counter count_of reads. It must be declared before the histogram's service; unknown or later services are rejected at load. A source that is paused records nothing for the tick.

features

features is a map keyed by feature kind. Each entry accepts enabled: bool (default true) plus kind-specific config.

synthetic_monitoring config

KeyTypeDescription
checks[]objectOne entry per synthetic check.
checks[].namestringRequired. Becomes the Prometheus job label.
checks[].targetstringHTTP URL probed. Default: https://<name>.example.com/health.
checks[].frequencyintPoll interval in milliseconds. Default 60000.
checks[].probestringPrivate probe name. Default "synthkit-private".
checks[].regionstringProbe region. Default "EMEA".
checks[].labelsmap[string]stringUser-defined labels emitted as label_<k>=<v> on every probe series.

fleet_management config

KeyTypeDescription
collectors_per_osmap[string]intOS name (linux/windows/darwin) → desired fake collector count. Absent OS ⇒ not emitted.

integrations

integrations is a map keyed by integration kind. Each entry accepts enabled: bool (default true) plus kind-specific config. The for_each_env and envs keys are also accepted to fan an integration across environments.

cloudflare config

KeyTypeDescription
zonestringCloudflare zone name.
accountstringAccount identifier.
colocations[]stringColocation names.
tunnels[]objectTunnel entries.
tunnels[].namestringTunnel name.

csp_azure config

KeyTypeDescription
subscriptionsintNumber of synthetic Azure subscriptions (default 2).
companystringCompany slug for subscription names (default "demo").
sub_signals[]stringFamilies to emit. Valid: compute, databases, storage, networking, messaging, logs. ai is opt-in and NOT in the default set — must be listed explicitly. Empty ⇒ all default families.
ingestion_pathstring"serverless" (default, GC managed scraper) or "azure_exporter".
credentialstringManaged-scraper credential name (serverless path only). Default "azure".
tagsmap[string]stringResource tags emitted as tag_<key> on every series. Opt-in: omit ⇒ no tag labels.

csp_gcp config

KeyTypeDescription
projectsintNumber of synthetic GCP projects (default 2).
companystringCompany slug for project IDs (default "demo").
sub_signals[]stringFamilies to emit. Valid: compute, databases, storage, networking, loadbalancing, pubsub, cloudrun, bigtable, logs. vertex is opt-in — must be listed explicitly. Empty ⇒ all default families.

portkey_gateway config

KeyTypeDescription
models[]stringLLM model names to spread across label values (default ["gpt-4o"]).
providers[]stringProvider names (default ["azure-openai"]).
appstringService name for the app= label (default "ai-gateway").
envstringEnvironment name for the env= label (default "prod").
sub_signals[]stringValid: "gateway" (14 portkey_* metrics), "runtime" (node_* subset). Empty ⇒ both.

portkey_poller config

KeyTypeDescription
workspacestringPortkey workspace identifier (default "ws-demo").
use_cases[]stringmetadata_use_case dimension values (default ["assistant","summarization"]).
models[]stringai_model dimension values (default ["gpt-4o","gpt-4o-mini","gpt-4.1-mini"]).
use_case_weightsmap[string]floatPer-use-case volume multiplier. Missing key ⇒ 1.0.

langsmith_eval config

KeyTypeDescription
projects[]stringLangSmith project names (default ["assistant-prod"]).
use_cases[]stringUse-case dimension values (default ["assistant","summarization"]).
evaluators[]stringEvaluator keys for langsmith_eval_score (default ["faithfulness","completeness","relevance"]).
use_case_weightsmap[string]floatPer-use-case volume multiplier. Missing key ⇒ 1.0.

langsmith_platform config

KeyTypeDescription
services[]stringService names to emit metrics for. Valid: backend, host-backend, platform-backend, playground, clickhouse, redis, postgres, nginx. Empty ⇒ all eight.

snowflake config

KeyTypeDescription
accountstringSnowflake account identifier (default "demo-acct").
warehouses[]stringVirtual warehouse names (default ["wh_compute","wh_etl"]).
databases[]stringDatabase names for per-database metrics (default ["analytics","raw"]).

network_topology config

KeyTypeDescription
instancestringExporter scrape endpoint (e.g. "netobs-dc1:9100"). Required; must be unique across blueprints.
jobstringPrometheus job label (default "integrations/network-topology-exporter").
rolestringFederation role: standalone (default), hub, or spoke.
spoke_idstringSpoke identity (required when role: spoke).
protocols[]stringDiscovery walker protocols (default [lldp, bgp]).
fabricobjectOptional topology generator config.
fabric.kindstringspine_leaf, clos, linear, or star.
fabric.spinesintSpine count (spine_leaf/clos).
fabric.leavesintLeaf count (spine_leaf/clos).
fabric.hosts_per_leafintOptional access hosts per leaf.
fabric.vendor_mix[]stringRound-robin vendor assignment (default [arista]).
fabric.sitestringDevice site label.
devices[]objectExplicit device declarations (augment/override generated fabric).
devices[].idstringDevice identifier.
devices[].vendorstringVendor name.
devices[].os_versionstringOS/firmware version.
devices[].sitestringSite label.
devices[].uptimeintInitial uptime (seconds).
links[]objectExplicit link declarations.
links[].src_devicestringSource device ID.
links[].src_portstringSource port.
links[].dst_devicestringDestination device ID.
links[].dst_portstringDestination port.
links[].protostringProtocol.
links[].link_kindstringLink kind.
session_poolboolGate the snmp_session_pool_* family.
out_of_scope_neighboursintSteady-state out-of-scope neighbour count.
otlp_outputboolGate the otlp_push_total family.
federationobjectHub-mode wiring.
federation.spokes[]stringSpoke instance names aggregated by this hub.

beyla_agent config

KeyTypeDescription
modestring"kubernetes" (default) or "standalone".
instrumented_processesinteBPF-instrumented process count (default 4).
versionstringBeyla version for build-info gauge (default "1.9.0").
revisionstringBeyla git revision (default "unknown").
clusterstringCluster name (kubernetes mode identity).
nodestringNode name (kubernetes mode identity).
hoststringHost name (standalone mode identity).

qualification_pipeline config

KeyTypeDescription
stages[]stringPipeline stage names. Default: ["verification","build","test","test-tokens-usage","autovalidate","pdf"].
jobs[]stringCI job names. Default: ["validation-sbom","iac-tests","functional-tests"].
suites[]stringTest suite names (coined qualification_* metrics). Default: ["infra","functional"].
clouds[]stringCloud target names. Default: ["aws","azure","gcp","common"].

Cluster add-on configs

Add-ons are listed under cluster.addons[]. Most have no configurable fields; only those with config are shown.

cw_infra config (cloud.cloudwatch)

KeyTypeDescription
albsintALB instance count. Nil/omitted ⇒ default 1. Explicit 0 disables the ALB family.
s3_bucketsintS3 bucket count. Nil/omitted ⇒ default 2. Explicit 0 disables the S3 family.
firehoseboolEmit aws_firehose_* (default true).
nlbboolEmit aws_networkelb_* (default true).
ebsboolEmit aws_ebs_* (default true).
nat_gatewayboolEmit aws_natgateway_* (default true).
eksboolEmit aws_eks_* control-plane (default true).
private_linkboolEmit aws_privatelink_* endpoints and services (default true).

bedrock config

KeyTypeDescription
models[]stringModel IDs to emit per-model series for. Empty ⇒ default model list.
sub_signals[]stringFamilies to emit. Valid: models, agents, guardrails, invocation_logs. Empty ⇒ all four.

agentcore config

KeyTypeDescription
agents[]stringAgent logical names for resource-usage dimensions. Default: ["planner","retriever"].
sub_signals[]stringFamilies to emit. Valid: runtime, resource_usage, usage_logs. Empty ⇒ runtime + resource_usage + app logs. usage_logs is opt-in.
runtimes[]objectBinds an agent's runtime to a causal resource: {agent, resource}. agent names an entry of agents; resource names a concurrency resource under environments[].resources (one runtime per resource). The runtime then emits its own invocations, throttles, system_errors, total_errors and latency series, named by the runtime ARN, from the resource model. Needs the runtime family. Absent ⇒ unchanged output.

aoss config

KeyTypeDescription
collections[]stringOpenSearch Serverless collection names. Empty ⇒ one synthetic collection.

mwaa config

KeyTypeDescription
environments[]stringMWAA environment names. Empty ⇒ one synthetic environment.

glue config

KeyTypeDescription
jobs[]stringAWS Glue job names. Empty ⇒ one synthetic job.

cluster_autoscaler config

KeyTypeDescription
min_nodesintMinimum node count for autoscaler metrics.
max_nodesintMaximum node count for autoscaler metrics.

cert_manager config

KeyTypeDescription
job_modestring"" or "autodiscovery" ⇒ job="cert-manager". "integration" ⇒ job="integrations/cert-manager".

ksm_ingress config

KeyTypeDescription
ingresses[]objectIngress declarations.
ingresses[].namestringIngress name.
ingresses[].namespacestringNamespace (default: first workload's namespace).
ingresses[].hoststringHostname (default: <name>.example.com).
ingresses[].pathstringPath (default: "/").
ingresses[].service_namestringRequired. Service name.
ingresses[].service_portintService port (default 80).
ingresses[].tlsboolTLS enabled (default false).

Add-ons with no configurable fields: alloy_health, argocd, core_dns, ebs_csi, envoy_gateway, etcd, external_dns, karpenter, load_balancer_controller, vpc_cni.


incidents[]

KeyTypeDescription
incidents[].kindstringFailure mode name. Mutually exclusive with scenario.
incidents[].scenariostringScenario name to fire (fires the whole bundle). Mutually exclusive with kind/target.
incidents[].targetstringInstance name to target. "" ⇒ blueprint-wide (single-axis modes only).
incidents[].atstringRFC3339 or "2006-01-02T15:04[:05]" (blueprint timezone). One-shot activation.
incidents[].everystringGo duration (e.g. "10m"). Makes the incident interval-recurring. Mutually exclusive with at.
incidents[].forstringGo duration (e.g. "20m"). Active window per every cycle (or one-shot duration).
incidents[].intensityfloat[0,1] effect intensity.

scenarios[]

KeyTypeDescription
scenarios[].namestringScenario identifier used in incidents[].scenario and control-plane API calls.
scenarios[].titlestringHuman display name. Defaults to name.
scenarios[].summarystringOne-line description of what the scenario causes.
scenarios[].effects[]objectEffect list.
scenarios[].effects[].modestringFailure mode name.
scenarios[].effects[].targetstringInstance name, <axis>:* wildcard, or empty (single-axis modes only).
scenarios[].effects[].intensityfloat[0,1] effect intensity. Default 1.0.

hosts[]

KeyTypeDescription
hosts[].namestringHostname. Required, unique. Becomes the instance label.
hosts[].osstringExporter vocabulary: linux (default), windows, or macos.
hosts[].ipstringOptional private IP address. Omitted when empty.
hosts[].cpusintLogical CPU count. Default 2.
hosts[].memory_gbintTotal RAM in GiB. Default 8.
hosts[].metrics_profilestring"integration" (GC integration allowlist, default) or "full" (broad default-Alloy surface).
hosts[].os_versionstringOS version string (e.g. "22.04", "Server 2022"). Optional.
hosts[].kernelstringKernel string for node_uname_info (linux/macos). Optional.
hosts[].observabilityobjectGates the Docker cadvisor lane and host logs.
hosts[].observability.dockerboolEmit Docker cadvisor metrics and container log streams. Default false.
hosts[].observability.logsboolEmit host log streams (journal/winevent/file). Default true.

Failure modes

The table below lists every valid mode value for incidents[].kind or scenarios[].effects[].mode.

ModeAxisDescription
agentcore_throttlecloudAgentCore request throttles + system_errors spike (region-scoped capacity constraint).
bedrock_throttlecloudBedrock invocation throttling climbs.
connection_saturationdatabaseActive connections climb toward max.
cpu_hotspotservice / workload / clusterElevated CPU concentrated in a hot frame.
error_burstworkloadElevated 5xx error rate.
error_spikeserviceElevated 5xx error rate on the targeted service node.
eval_quality_degradedcloudLangSmith eval quality regresses — scores drop, retry/HITL rates climb.
fallback_stormserviceElevated gateway fallback rate on the targeted service node.
goroutine_leakservice / workloadGoroutine accumulation.
latency_spikeworkloadElevated request latency (up to 4× at full intensity).
latency_stormserviceElevated request latency on the targeted service node.
lock_contentionservice / workload / databaseElevated mutex/block contention or database lock waits.
memory_leakworkload / serviceGrowing heap — raises memory inuse/alloc profile values.
nettopo_auth_failuresnetworkSNMP credential trials fail.
nettopo_devices_unreachablenetworkSNMP polling fails for a fraction of devices.
nettopo_discovery_slownetworkDiscovery cycle duration inflates.
nettopo_spoke_downnetworkA federation spoke goes offline.
nettopo_walker_degradednetworkWalker outcome errors climb; edge count under-reports.
node_not_readyclusterA node flips NotReady; its pods go Pending.
oom_killclusterContainers OOM-killed; restart count climbs, status reason OOMKilled.
pod_crashloopclusterPods crash-looping; restarts climb, phase Pending.
portkey_scrape_degradedcloudPortkey Analytics scrape degrades — error rate, latency, and poller lag climb.
replication_lagdatabaseReplica falls behind primary.
retry_stormserviceElevated gateway retry rate on the targeted service node.
slow_query_stormdatabaseQuery latency right-tail spikes.
throughput_dropserviceReduced throughput on the targeted service node.
web_vitals_degradedserviceBrowser web-vitals degrade (LCP/INP/TTFB/FCP and CLS spike).