Skip to content

OpenTelemetry without the chaos

Cut observability costs, test every change before it ships, route telemetry anywhere, and manage your whole fleet with Telflo.

AI first

The fleet management tool for AI agents

Agents build, test, and deploy collector configurations from the console you already work in.

agent — telflo-cli

> New cluster eu-central is up, shop services in namespace shop. Get it collecting into the gateway prod-eu-west uses, otlp-gateway.internal:4317.

Starting from the Kubernetes flow. The edits are the cluster name and the namespace scope.

$ telflo flows list: 11 flows · kubernetes-telemetry-stack (metrics, logs) · otelcol-contrib 0.147.0

$ telflo flows pull kubernetes-telemetry-stack -o flow.yaml: wrote flow.yaml · pinned to otelcol-contrib 0.147.0

flow.yaml: 4 pipelines, 2 roles, 2 env vars, no cluster name. Split: node.yaml (logs/pods, metrics/node), cluster.yaml (metrics/cluster, logs/events).

Needs, In the flow, Target, Action. OTLP_ENDPOINT, ${env:OTLP_ENDPOINT}, otlp-gateway.internal:4317, --env at install. Cluster name, not set, eu-central, add k8s.cluster.name. Namespace scope, all namespaces, shop, filter logs/pods to shop. Collector roles, DaemonSet + singleton, one file, one config per role, split node.yaml, cluster.yaml

$ telflo config create --name "eu-central k8s-node-agent" -f node.yaml: created · eu-central k8s-node-agent b4e27d19 · draft v1

$ telflo config create --name "eu-central k8s-cluster" -f cluster.yaml: created · eu-central k8s-cluster d07c3a52 · draft v1

Two edits on node.yaml: k8s.cluster.name in k8s_attributes, filter/shop on logs/pods. Node metrics have no namespace, so no filter there.

node.yaml · processors: k8s_attributes: extract: metadata: - k8s.node.name +- k8s.cluster.name +filter/shop: +logs: +log_record: +- resource.attributes["k8s.namespace.name"] != "shop" logs/pods: -processors: [memory_limiter, k8s_attributes, resourcedetection, batch] +processors: [memory_limiter, k8s_attributes, filter/shop, resourcedetection, batch]

$ telflo ottl lint node.yaml: 1 of 1 expressions parse · 390 ms

$ telflo validate node.yaml --config b4e27d19: invalid · processors::k8s_attributes: "k8s.cluster.name" is not a supported metadata field · exit 4

The API server has no cluster name for k8s_attributes to extract. A resource processor sets it in all four pipelines; logs/pods shown.

node.yaml · resource/cluster: processors: +resource/cluster: +attributes: +- key: k8s.cluster.name +value: eu-central +action: upsert - k8s.node.name -- k8s.cluster.name logs/pods: -processors: [memory_limiter, k8s_attributes, filter/shop, resourcedetection, batch] +processors: [memory_limiter, k8s_attributes, filter/shop, resource/cluster, resourcedetection, batch]

$ telflo validate node.yaml --config b4e27d19: valid · otelcol-contrib 0.147.0 · 2.3 s

$ telflo validate cluster.yaml --config d07c3a52: valid · otelcol-contrib 0.147.0 · 1.9 s

$ telflo config push b4e27d19 -f node.yaml --publish: patched v1 · published

$ telflo config push d07c3a52 -f cluster.yaml --publish: patched v1 · published

$ telflo fleet create --label eu-central --type kubernetes-supervisor: created · fleet eu-central 3c8f41a7 · connection token 9a1d6e2b

$ telflo deploy --fleet 3c8f41a7 --config b4e27d19 --name k8s-node-agent --role node: created · deployment 5e92c0d4 serves v1

$ telflo deploy --fleet 3c8f41a7 --config d07c3a52 --name k8s-cluster --role cluster: created · deployment a71b3f06 serves v1

$ telflo fleet install 3c8f41a7 --platform kubernetes --deployment 5e92c0d4 --env OTLP_ENDPOINT=otlp-gateway.internal:4317 > install-node.sh: wrote install-node.sh · values URL expires in 24 h

Same command with --deployment a71b3f06 into install-cluster.sh. Both files carry the fleet token, so they stay out of this chat.

Run install-node.sh, then install-cluster.sh, with cluster-admin on eu-central.

Both install into namespace telflo-collectors, so the shop filter drops the collectors' own logs too.

> Ran both. Did the collectors come up?

Read fleet eu-central in Telflo: 13 collectors connected across both deployments, v1 applied on all 13, last heartbeat 16:07.

eu-central · k8s-node-agent · v1: 12 of 12. 12 of 12 nodes connected, v1 applied

Read the last 5 min via Grafana MCP: 6 shop services, 12 nodes, 0 logs from other namespaces, all tagged k8s.cluster.name=eu-central.

Both configs are published at v1. The next change is a push, which becomes v2, then a deploy, with v1 kept to revert to.

eu-central is up on v1. Shop container logs, Kubernetes events and node and cluster metrics are reaching otlp-gateway.internal:4317.

Interfaces

MCP server

From Claude Code, Cursor, or any MCP client, under the same scoped tokens as the CLI.

CLI

The same loop, run as commands from terminals, scripts, and CI.

Use cases

Take control of your telemetry pipeline

Cut the bill, ship changes without breaking prod, and keep regulated data where it belongs. Here is what teams use Telflo for.

Architecture

Your collectors, your data. Telflo's control plane.

Your telemetry flows the same way it always has, from your services through your collectors to your backends. Telflo just gives you an easy way to run the configuration that produces it.

Hosts
Kubernetes
Prometheus
OTel SDKs
Sources
Telflo control plane
configs · validation · rollback
OTel Collectors
142
us-east48
us-west31
eu-west24
eu-central15
ap-south16
sa-east8
Your infrastructure
Datadog
Splunk
ClickHouse
Dash0
Backends

Telflo doesn't have a backend of its own. Your collectors export straight to whichever backends you pick, and you can route to several at once or switch any time.

Lifecycle

How it works

Write a config, validate it, test it against sample data, and roll it out to your fleet. Here is each step as it looks in Telflo.

Build

Build or import your collector configs.

Drag receivers, processors, and exporters onto the canvas, or bring in a config you already run. Paste the YAML, or point an existing collector at Telflo to import what it reports.

Visualize

See the whole pipeline at a glance.

Receivers, processors, exporters in three colors. Trace any signal from source to backend without scrolling YAML.

Validate

Catch errors before they ship.

It validates against the real OTel schema and type-checks every reference. Broken configs never leave the editor.

Test

Unit tests, but for telemetry pipelines.

Write rules for your processors, then run a change against sample or uploaded telemetry on the real collector. The rules assert on the output, so broken transformations never reach production.

Deploy

One push to every collector.

Remote fleet management. No SSH loops, no config drift, no manual restarts. Stage a version on a few collectors, promote it fleet-wide, and roll back instantly when something breaks.

Govern

Coming

Golden paths for telemetry config.

Platform teams decide which processors, exporters, and policies are allowed. App teams build pipelines from those pre-vetted components, and OPA enforces the rules so nothing ships out of compliance.

Flows

Start from a pipeline that already works

Prebuilt collector configurations, each solving one problem. Researched against the component docs, validated with the real collector binary, and ready to open in the editor.

For observability backends

If your platform ingests OpenTelemetry data, Telflo helps your customers build, test, and roll out the collector pipelines that route their data to you.

Get started

Ready to run a real control plane?

Start building your first OpenTelemetry pipeline in the editor. No install, no credit card. Bring the collector config you already run.