# influxdata/telegraf architecture

> Architecture diagram of the GitHub repository influxdata/telegraf, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/influxdata/telegraf
- Repository: https://github.com/influxdata/telegraf

## Overview

Telegraf is a configurable agent for collecting, processing, aggregating, and writing metrics and other data. The documented workflow is: users select plugins in TOML; the agent gathers from inputs on an interval, processes and aggregates metrics, then flushes them to outputs. The tree supports the core runtime layers shown here, and sampled input code confirms that plugins emit metrics through an accumulator. Plugin families and several integrations are represented by their existing directories; their internal wiring was not sampled, so those links remain high-level.

Main entry points: [`agent/agent.go`](https://github.com/influxdata/telegraf/blob/master/agent/agent.go) (Agent), [`plugins/inputs`](https://github.com/influxdata/telegraf/tree/master/plugins/inputs) (Input plugins), [`config/config.go`](https://github.com/influxdata/telegraf/blob/master/config/config.go) (Configuration), [`cmd/telegraf/main.go`](https://github.com/influxdata/telegraf/blob/master/cmd/telegraf/main.go) (Telegraf CLI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Agent runtime"]
  node_config["Configuration<br/>[config.go]"]
  node_cli["Telegraf CLI<br/>[main.go]"]
  node_agent["Agent<br/>[agent.go]"]
  node_accumulator["Metric accumulator<br/>[accumulator.go]"]
  node_metrics["Metric model<br/>[metric.go]"]
  node_buffer["Metric buffer<br/>[buffer.go]"]
end

subgraph group_ingest["Collection plugins"]
  node_input_plugins["Input plugins"]
end

subgraph group_transform["Metric processing"]
  node_filters["Metric filters<br/>[filter.go]"]
  node_processors["Processors"]
  node_aggregators["Aggregators"]
end

subgraph group_egress["Output plugins"]
  node_output_plugins["Output plugins"]
  node_postgresql["PostgreSQL output<br/>[table_manager.go]"]
end

node_user(("Operator"))
node_external_sources(("Source systems"))
node_external_sinks(("Destinations"))
node_postgresql_db[("PostgreSQL")]

node_user -->|"configures"| node_config
node_config -->|"supplies settings"| node_cli
node_cli -->|"starts"| node_agent
node_agent -->|"schedules gathering"| node_input_plugins
node_input_plugins -->|"reads from"| node_external_sources
node_input_plugins -->|"emits metrics"| node_accumulator
node_accumulator -->|"builds"| node_metrics
node_agent -->|"applies"| node_filters
node_agent -->|"dispatches"| node_processors
node_agent -->|"dispatches"| node_aggregators
node_agent -->|"buffers metrics"| node_buffer
node_agent -->|"flushes to"| node_output_plugins
node_output_plugins -->|"writes to"| node_external_sinks
node_postgresql -->|"updates schema"| node_postgresql_db

click node_config "https://github.com/influxdata/telegraf/blob/master/config/config.go"
click node_cli "https://github.com/influxdata/telegraf/blob/master/cmd/telegraf/main.go"
click node_agent "https://github.com/influxdata/telegraf/blob/master/agent/agent.go"
click node_input_plugins "https://github.com/influxdata/telegraf/tree/master/plugins/inputs"
click node_accumulator "https://github.com/influxdata/telegraf/blob/master/accumulator.go"
click node_metrics "https://github.com/influxdata/telegraf/blob/master/metric/metric.go"
click node_filters "https://github.com/influxdata/telegraf/blob/master/filter/filter.go"
click node_processors "https://github.com/influxdata/telegraf/tree/master/plugins/processors"
click node_aggregators "https://github.com/influxdata/telegraf/tree/master/plugins/aggregators"
click node_buffer "https://github.com/influxdata/telegraf/blob/master/models/buffer.go"
click node_output_plugins "https://github.com/influxdata/telegraf/tree/master/plugins/outputs"
click node_postgresql "https://github.com/influxdata/telegraf/blob/master/plugins/outputs/postgresql/table_manager.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_config,node_cli,node_agent,node_accumulator,node_metrics,node_buffer toneBlue
class node_input_plugins,node_postgresql_db toneAmber
class node_filters,node_processors,node_aggregators toneMint
class node_output_plugins,node_postgresql toneRose
class node_user,node_external_sources,node_external_sinks toneIndigo
```

## Components

### Agent runtime

- [Configuration](https://github.com/influxdata/telegraf/blob/master/config/config.go): `config/config.go`
- [Telegraf CLI](https://github.com/influxdata/telegraf/blob/master/cmd/telegraf/main.go): `cmd/telegraf/main.go`
- [Agent](https://github.com/influxdata/telegraf/blob/master/agent/agent.go): `agent/agent.go`
- [Metric accumulator](https://github.com/influxdata/telegraf/blob/master/accumulator.go): `accumulator.go`
- [Metric model](https://github.com/influxdata/telegraf/blob/master/metric/metric.go): `metric/metric.go`
- [Metric buffer](https://github.com/influxdata/telegraf/blob/master/models/buffer.go): `models/buffer.go`

### Collection plugins

- [Input plugins](https://github.com/influxdata/telegraf/tree/master/plugins/inputs): `plugins/inputs`

### Metric processing

- [Metric filters](https://github.com/influxdata/telegraf/blob/master/filter/filter.go): `filter/filter.go`
- [Processors](https://github.com/influxdata/telegraf/tree/master/plugins/processors): `plugins/processors`
- [Aggregators](https://github.com/influxdata/telegraf/tree/master/plugins/aggregators): `plugins/aggregators`

### Output plugins

- [Output plugins](https://github.com/influxdata/telegraf/tree/master/plugins/outputs): `plugins/outputs`
- [PostgreSQL output](https://github.com/influxdata/telegraf/blob/master/plugins/outputs/postgresql/table_manager.go): `plugins/outputs/postgresql/table_manager.go`

### Other components

- **Operator**
- **Source systems**
- **Destinations**
- **PostgreSQL**

## Connections

- Operator → Configuration: configures
- Configuration → Telegraf CLI: supplies settings
- Telegraf CLI → Agent: starts
- Agent → Input plugins: schedules gathering
- Input plugins → Source systems: reads from
- Input plugins → Metric accumulator: emits metrics
- Metric accumulator → Metric model: builds
- Agent → Metric filters: applies
- Agent → Processors: dispatches
- Agent → Aggregators: dispatches
- Agent → Metric buffer: buffers metrics
- Agent → Output plugins: flushes to
- Output plugins → Destinations: writes to
- PostgreSQL output → PostgreSQL: updates schema
