Glossary · A

Agent (Observability Agent)

A process running on a host or node that collects, processes and forwards telemetry such as metrics, logs, traces and profiles.

By Obseria Editorial TeamUpdated

Definition

An observability agent is a lightweight process that runs on each host, node or container environment and collects telemetry close to its source. It gathers metrics, logs, traces and often profiles, enriches them with metadata such as host and pod names, buffers them locally and forwards them to a backend or gateway.

What an observability agent is

An observability agent is software that runs next to your workloads and turns local signals into telemetry a backend can use. On a virtual machine it is typically a system service; in Kubernetes it usually runs as a DaemonSet, so exactly one agent pod is scheduled on every node. The agent reads system counters, tails log files, receives traces and metrics from applications over local ports, and ships everything in batches.

The word is used for several kinds of software. Classic monitoring agents collect host metrics such as CPU, memory, disk and network. Log shippers like Fluent Bit or Vector focus on files and streams. The OpenTelemetry Collector can be deployed in "agent mode" on every node, as opposed to "gateway mode" where a central pool of collectors receives data from many agents. Some vendors also call in-process language libraries "agents", for example a Java agent attached with -javaagent, which instruments bytecode at load time.

How an agent works

Most agents follow the same pipeline, whatever their name:

  1. Receive or scrape. Pull metrics from endpoints such as a Prometheus /metrics path, read /proc and cgroup statistics, tail container log files, or accept OTLP data pushed by instrumented applications on localhost:4317 (gRPC) and 4318 (HTTP).
  2. Enrich. Attach resource attributes such as host.name, k8s.pod.name, k8s.namespace.name or cloud region, so every signal can be correlated later.
  3. Process. Filter noisy data, drop or hash sensitive fields, batch and compress.
  4. Buffer and export. Hold data in memory or on disk when the backend is slow or unreachable, retry with backoff, and send it onward.

Agents that use eBPF can additionally observe network flows, system calls or CPU stacks from the kernel without changing application code, which is how many continuous profilers and network monitors work.

Agent, gateway and agentless collection

ApproachWhere it runsTypical use
AgentOn every host or nodeHost metrics, logs from local files, local OTLP endpoint, profiling
GatewayCentral pool of collectorsTail-based sampling, routing, central policy, credentials
AgentlessBackend calls provider APIsManaged cloud services, SaaS APIs, synthetic checks

The approaches complement each other. You cannot install an agent on a managed database or a load balancer, so those are monitored through cloud APIs. Conversely, nothing outside the host can see per-process CPU or local log files as precisely as an agent.

Example: OpenTelemetry Collector in agent mode

An illustrative minimal configuration for a node agent that receives OTLP, scrapes host metrics and forwards everything to a gateway:

receivers:
  otlp:
    protocols: { grpc: {}, http: {} }
  hostmetrics:
    collection_interval: 30s
    scrapers: { cpu: {}, memory: {}, filesystem: {}, network: {} }
processors:
  memory_limiter: { check_interval: 1s, limit_percentage: 80 }
  resourcedetection: { detectors: [env, system] }
  batch: {}
exporters:
  otlp:
    endpoint: gateway.observability.svc:4317
service:
  pipelines:
    metrics: { receivers: [otlp, hostmetrics], processors: [memory_limiter, resourcedetection, batch], exporters: [otlp] }
    traces:  { receivers: [otlp], processors: [memory_limiter, resourcedetection, batch], exporters: [otlp] }

Note the memory_limiter placed first: it protects the node from the agent itself when traffic spikes.

Best practices

  • Set resource limits. Give the agent explicit CPU and memory requests and limits and an internal memory limiter, so it can never starve the workloads it observes.
  • Monitor the agent. Track its own queue length, dropped data and export errors. A silent agent looks exactly like a healthy, quiet service.
  • Prefer open protocols. Agents that speak OTLP let you change backends without redeploying instrumentation.
  • Standardize rollout. Manage agent versions and configuration as code through Helm, an operator or configuration management, not by hand on individual hosts.
  • Keep processing light at the edge. Do cheap enrichment and filtering in the agent; leave expensive, stateful work such as tail-based sampling to a gateway.

Common mistakes

Running several overlapping agents per host, one per tool, is a frequent source of overhead and inconsistent metadata. Another mistake is collecting everything at maximum resolution "just in case", which moves cost from compute to storage. Finally, many teams forget to pin agent versions, so a node upgrade silently changes metric names or labels.

How Obseria helps

The Obseria Agent is installed once per host or as a DaemonSet and collects metrics, logs, traces, profiles and security signals in one process, enriched with the topology that Obseria TopoGraph builds automatically. It accepts OTLP from your existing SDKs, so OpenTelemetry instrumentation keeps working, and supports Kubernetes monitoring and continuous profiling without extra sidecars.

Frequently asked questions

The terms overlap. "Agent" usually describes a deployment role: one process per host or node, close to the source. A collector is a piece of software that receives, processes and exports telemetry. The OpenTelemetry Collector can run as an agent on each node or as a central gateway.

Not strictly, because SDKs can export directly to a backend. A local agent is still recommended in production: it offloads batching and retries from the application, adds host and Kubernetes metadata, and collects host metrics and logs that SDKs do not see.

It depends on data volume and configuration. Well-configured agents typically use a small fraction of a node's CPU and a bounded amount of memory. Set explicit limits, measure the agent's own resource usage and avoid heavy processing on the node.

A DaemonSet places exactly one agent pod on every node, including new nodes added by autoscaling. That gives each node local access to container logs and kubelet metrics and a nearby OTLP endpoint for applications, without a sidecar in every pod.

Put these concepts into practice

Try Obseria free for 14 days, with OpenTelemetry and no proprietary agents.