# Introduction

*Akvorado*[^name] receives network flows, such as NetFlow/IPFIX and sFlow. It enriches
them with interface names (using SNMP), and geographic information (using
[IPinfo](https://ipinfo.io/) or MaxMind). Then, it exports them to ClickHouse via
Kafka. It also provides a web interface to explore the data.

[^name]: [Akvorado][] means "water wheel" in Esperanto.

[Akvorado]: https://eo.wikipedia.org/wiki/Akvorado

## Requirements

The recommended configuration is:

- 8 vCPUs (AMD64 or ARM64)
- 100 GB of disk
- 16 GB of RAM

## Quick start

The easiest way to get started is with
[Docker](https://docs.docker.com/get-docker) and [Docker Compose
V2](https://docs.docker.com/compose/install/). On Ubuntu, you can
install the `docker-compose-v2` package. On macOS, you can use the
`docker-compose` formula from Homebrew.

```console
# mkdir akvorado
# cd akvorado
# curl -sL https://github.com/akvorado/akvorado/releases/latest/download/docker-compose-quickstart.tar.gz | tar zxvf -
# docker compose up
```

Monitor the output of `docker compose ps` to see the status of the services.
Once the `akvorado-console` service is "healthy", the *Akvorado* web interface
should be running on port 8081. This can take a few minutes.

### Next steps

To connect your own network devices:

1. Customize the configuration in `akvorado.yaml`:
   - Set SNMP communities for your devices in `outlet` → `metadata` → `provider` → `communities`
   - Configure interface classification rules in `outlet` → `core` → `interface-classifiers`

1. Configure your routers/switches to send flows to *Akvorado*:
   - NetFlow: port 2055
   - IPFIX: port 4739
   - sFlow: port 6343
   
1. Restart all containers:
   - `docker compose down`
   - `docker compose up -d`

> [!TIP]
> Interface classification is essential for the web interface to work properly.
> Without it, you won't see data in the dashboard widgets or visualization tab.
> See the [configuration guide](02-configuration.md#classification) for details.

### Need help?

- Check the [installation guide](01-install.md) for other deployment options
- Read the [configuration guide](02-configuration.md) for detailed setup instructions
- Review the [operations guide](04-operations.md) for router configuration examples
- Check the [troubleshooting guide](05-troubleshooting.md) if you run into an issue

You can see the full configuration (with default values) with: `docker compose
run --rm --no-deps akvorado-orchestrator orchestrator --check --dump
/etc/akvorado/akvorado.yaml`. This is also useful to validate your
configuration.

> [!IMPORTANT]
> Please, do not open an issue or start a discussion unless you have read the
> various chapters of the documentation, notably the [troubleshooting
> guide](05-troubleshooting.md).

## Big picture

![General design](design.svg)

*Akvorado* is split into four components:

- The **inlet service** receives flows from exporters and sends them to Kafka
  without parsing them.

- The **outlet service** takes flows from Kafka, parses them, and enriches them
  with metadata. It uses SNMP to poll each exporter to get the *system name*,
  *interface names*, *descriptions* and *speeds*. It applies rules to add
  attributes to exporters. Interface rules add a *boundary* (external or
  internal), a *network provider* and a *connectivity type* (PNI, IX, transit)
  to each interface. Optionally, it may also receive BGP routes through the BMP
  protocol to get the *AS number*, the *AS path*, and the communities. The
  enriched flows are then exported to ClickHouse.

- The **orchestrator service** configures the other components. It creates the
  *Kafka topic* and configures *ClickHouse* to receive the flows from the outlet
  service. It provides configuration settings for the other services. It
  provides additional data to ClickHouse, such as *GeoIP* data.

- The **console service** provides a web interface to view and analyze the flows
  in the ClickHouse database.

## ClickHouse database schemas

Flows are stored in a ClickHouse database using a table `flows` (and a
few consolidated versions). The orchestrator service keeps the table
schema up-to-date. You can check the schema using `SHOW CREATE TABLE
flows`.
