Skip to main content

InfraSage Agent

infrasagent is a lightweight telemetry collector that can sit at any stage of your observability pipeline: on bare-metal hosts, as a Kubernetes DaemonSet, as a Docker sidecar, or as a central gateway that aggregates 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 to 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 names the sources or processors that feed it. At startup the pipeline engine builds the DAG, checks that the signals are compatible, and wires up the channels.

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, for 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

In agent mode, infrasagent runs on every host as a DaemonSet or a systemd service. It collects local telemetry and forwards it to InfraSage or to a gateway tier.

In gateway mode, it runs as a central aggregator. It receives OTLP from upstream agents, applies the pipeline logic, and fans out to one or more backends.

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