api.NodePipelineMetricsSnapshot
api.NodePipelineMetricsSnapshot API schema defining 2 fields, including connection state and pipelines.
pipelines object
property name* object[]
BytesInput / BytesOutput are the per-stage byte totals (bytes) over the batch interval, matching the pipeline_bytes_total{stage} counter. Always serialized (no omitempty) so a zero-throughput window reads as 0, not a gap.
components object[]
Components carries per-component throughput + latency, one entry per Benthos component path (e.g. "root.pipeline.processors.1").
ComponentName is the component's plugin/type name (e.g. "generate", "http_server", "mapping") -- the component_name label on the OTLP/Prometheus series. Empty for an older edge that does not report it, or a component that carries no name attribute.
latency object
Latency is the component latency histogram (seconds).
Bounds are the explicit upper bounds (le), ascending.
BucketCounts are the per-bucket counts; len == len(Bounds)+1, where the
final entry is the +Inf overflow bucket. NOTE: these are OTel DELTA
(non-cumulative) per-bucket counts. A Prometheus _bucket{le} series /
PromQL histogram_quantile needs CUMULATIVE counts, so a remote-write must
ascending-cumsum them first. The counts are consistent with Count
(sum(BucketCounts) == Count).
seconds for durations
Path is the Benthos component path, e.g. "root.pipeline.processors.1".
Received / Sent / Errors are message counts over the batch interval.
Stage is the component's stage: "input", "processor", or "output" (derived from the emitting metric name; reconstructs the series name).
OrchestrationErrors is the pipeline.orchestration.errors count over the batch interval (pipeline-level; no per-component attribution). Always serialized (no omitempty): zero is a meaningful value for a health series, and a consumer charting it must not see the field vanish on a healthy window.
readiness object
Readiness is the pipeline.readiness.duration histogram (seconds), pipeline-level.
Bounds are the explicit upper bounds (le), ascending.
BucketCounts are the per-bucket counts; len == len(Bounds)+1, where the
final entry is the +Inf overflow bucket. NOTE: these are OTel DELTA
(non-cumulative) per-bucket counts. A Prometheus _bucket{le} series /
PromQL histogram_quantile needs CUMULATIVE counts, so a remote-write must
ascending-cumsum them first. The counts are consistent with Count
(sum(BucketCounts) == Count).
seconds for durations
Timestamp is the collection time on the edge (NOT arrival time), so a reconnect catch-up flush renders in the correct window rather than collapsing into a spike.
{
"connection_state": "string",
"pipelines": {}
}