Skip to main content

InfraSage Agent

infrasagent is a lightweight, high-performance telemetry collector that sits at any stage of your observability pipeline — on bare-metal hosts, as a Kubernetes DaemonSet, as a Docker sidecar, or as a centralized gateway aggregating from upstream agents.

It collects logs, metrics, and traces from dozens of sources, enriches and transforms them through a composable processor chain, and delivers them to InfraSage (or any OTLP-compatible backend) over HTTPS.


Why infrasagent?

infrasagentOpenTelemetry CollectorVector
All three signals (L/M/T)Logs + Metrics only
Native InfraSage sink
Tail-based trace sampling
Host metrics built-in
CEL transform expressionsRemap (VRL)
Single static binary
Hot config reload
Self-observability metrics

Architecture

Data flows through typed channels between stages. Each stage runs independently; backpressure propagates upstream when a sink falls behind.

┌──────────┐ ┌──────────────┐ ┌────────┐ ┌─────────┐
│ Sources │───▶│ Processors │───▶│ Router │───▶│ Sinks │
└──────────┘ └──────────────┘ └────────┘ └─────────┘
│ │
└──────────── typed channels (Logs/Metrics/Traces) ┘

Admin API: /health /ready /metrics /topology /reload

Sources listen for or pull telemetry. Processors enrich, filter, batch, and sample it. Sinks deliver it downstream. Routing is declared in YAML — each sink specifies which sources or processors feed it. The pipeline engine builds the DAG, validates signal compatibility, and wires the channels at startup.


Supported Components

Sources

NameSignalDescription
otlpL/M/TOTLP gRPC + HTTP receiver
hostmetricsMCPU, memory, disk, network, load via procfs
fileLFile tail with multiline support
syslogLUDP/TCP RFC5424/RFC3164
statsdMStatsD UDP listener
prometheus_scrapeMPrometheus HTTP pull
journaldLsystemd journal socket
docker_logsLDocker Engine API log streaming
k8s_eventsLKubernetes watch API events
kafkaL/M/TKafka consumer

Processors

NameDescription
batchBuffer and flush on time or size
attributesAdd, remove, rename, or hash attributes
filterDrop or keep records by field conditions
transformCEL-based field mutations with optional where
samplingHead-based (probabilistic) + tail-based (trace-complete)
k8s_attributesInject pod, node, and namespace metadata
aggregatePre-aggregate metrics to reduce cardinality
deduplicateFingerprint-based dedup within a rolling window
rate_limitToken-bucket rate limiting per label set
geoipMaxMind DB geo-IP enrichment

Sinks

NameSignalDescription
otlpL/M/TOTLP gRPC or HTTP — InfraSage and any OTLP backend
clickhouseL/M/TNative protocol, LZ4, async insert
prometheus_rwMPrometheus Remote Write
kafkaL/M/TKafka producer
s3L/MParquet (metrics) + NDJSON (logs)
lokiLLoki push API
elasticsearchLElasticsearch Bulk API
httpL/M/TGeneric webhook / custom endpoint
stdoutL/M/TDebug output

Deployment Modes

  • Agent — runs on every host as a DaemonSet or systemd service, collecting local telemetry and forwarding to InfraSage or a gateway tier
  • Gateway — runs as a central aggregator receiving OTLP from upstream agents, applying pipeline logic, and fan-outing to one or more backends

Both modes use the same binary; the difference is in the config.