Akvorado Docker 部署详细技术指南(含 Nginx 反向代理 + Basic Auth)

Akvorado 是一款开源的网络流量采集、丰富与可视化系统,支持 NetFlow / IPFIX / sFlow。它会通过 SNMP 补充接口名称等信息,用 GeoIP 数据库补充地理信息,再经 Kafka 写入 ClickHouse,最后通过 Web Console 进行查询与可视化。官方推荐使用 Docker Compose 一键部署。

本文风格参考 songxwn.com 的实战部署风格,基于官方文档与社区实践整理。

一、系统要求

项目 推荐配置 说明
CPU 8 vCPU (x86_64 / ARM64) 流量较大时可再提高
内存 ≥ 16 GB ClickHouse + Kafka 较吃内存
磁盘 ≥ 100 GB SSD 数据量增长快,建议独立数据盘
Docker ≥ 23 必须,旧版本易出问题
Docker Compose V2 docker compose 命令

检查 Docker 版本:

1
2
docker version -f '{{ .Server.Version }}'
docker compose version

二、快速部署(官方 Quickstart)

1
2
3
4
5
6
7
mkdir -p /opt/akvorado && cd /opt/akvorado

# 下载最新 quickstart 包
curl -sL https://github.com/akvorado/akvorado/releases/latest/download/docker-compose-quickstart.tar.gz | tar zxvf -

# 启动(第一次会拉取镜像,较慢)
docker compose up --wait

启动成功后,浏览器访问:

1
http://<服务器IP>:8081

此时界面是空的,属于正常现象(还没有设备发送 Flow)。

三、核心配置

Quickstart 包已经拆分成多个配置文件,主要需要修改的是 config/outlet.yaml。

1. SNMP 团体字(必须)

打开 config/outlet.yaml,找到 metadata 部分,配置设备 SNMP:

1
2
3
4
5
6
7
metadata:
providers:
- type: snmp
credentials:
::/0: # 匹配所有设备,也可写成具体网段
communities:
- public # 改成你的只读团体字

如果设备用 SNMPv3,参考官方配置文档增加 security-level、username、auth-protocol 等字段。

2. 接口分类(强烈建议)

没有分类规则时,首页图表和可视化会是空的。在 config/outlet.yaml 的 core 下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
core:
interface-classifiers:
- name: Transit
description: "^Transit:"
provider: "^Transit: (.+)"
- name: IX
description: "^IX:"
provider: "^IX: (.+)"
- name: Customer
description: "^Customer:"
provider: "^Customer: (.+)"
- name: Internal
description: "^Internal:"

按你设备接口描述的实际命名习惯调整正则即可。

3. GeoIP(可选但推荐)

默认使用 IPinfo。如需 MaxMind:

编辑 .env,注释掉 IPinfo,启用 MaxMind,并填入账号信息:

1
2
3
4
# COMPOSE_FILE=${COMPOSE_FILE}:docker/docker-compose-ipinfo.yml
COMPOSE_FILE=${COMPOSE_FILE}:docker/docker-compose-maxmind.yml
GEOIPUPDATE_ACCOUNT_ID=你的ID
GEOIPUPDATE_LICENSE_KEY=你的KEY

4. 关闭 Demo(生产环境)

编辑 .env,注释掉 demo 相关行:

1
# COMPOSE_FILE=${COMPOSE_FILE}:docker/docker-compose-demo.yml

同时检查 config/akvorado.yaml 末尾是否有 demo-exporter 引入,有则删除或注释。

修改完配置后重启:

1
2
docker compose down
docker compose up --wait

四、设备侧配置

在路由器/交换机上把 Flow 指向 Akvorado 服务器:

协议 端口
NetFlow v5/v9 2055/UDP
IPFIX 4739/UDP
sFlow 6343/UDP

同时确保设备允许 Akvorado 服务器做 SNMP 查询。

五、常用运维命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看服务状态
docker compose ps

# 查看 orchestrator 日志
docker compose logs -f akvorado-orchestrator

# 查看完整默认配置(调试用)
docker compose run --rm --no-deps akvorado-orchestrator orchestrator --check --dump /etc/akvorado/akvorado.yaml

# 升级
cd /opt/akvorado
curl -sL https://github.com/akvorado/akvorado/releases/latest/download/docker-compose-upgrade.tar.gz | tar zxvf -
docker compose pull
docker compose stop akvorado-orchestrator
docker compose up --wait

六、Nginx 反向代理 + Basic Auth

官方自带 Traefik,也可直接用 Traefik 做 Basic Auth。如果你更习惯 Nginx,按下面方式部署即可。

1. 安装 Nginx 并生成密码文件

1
2
3
4
5
6
7
8
# Debian/Ubuntu
apt update && apt install -y nginx apache2-utils

# 生成用户(用户名 admin,按提示输入密码)
htpasswd -c /etc/nginx/.htpasswd admin

# 如需增加更多用户(去掉 -c)
htpasswd /etc/nginx/.htpasswd user2

2. Nginx 配置示例

创建 /etc/nginx/sites-available/akvorado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
server {
listen 80;
server_name akvorado.example.com; # 改成你的域名或 IP

# 可选:强制跳转 HTTPS(有证书时启用)
# return 301 https://$host$request_uri;

location / {
auth_basic "Akvorado Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;

proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

# 超时适当调大(查询大数据时)
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}

如果已经有 HTTPS 证书,可再加一个 443 server 块,配置 ssl_certificate 等即可。

3. 启用配置并重启

1
2
3
ln -s /etc/nginx/sites-available/akvorado /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

之后访问 http://akvorado.example.com(或你的 IP),浏览器会弹出 Basic Auth 登录框。

4. 防火墙建议

1
2
3
4
5
# 只开放 Nginx 端口,关闭直接暴露的 8081
ufw allow 80/tcp
ufw allow 443/tcp
# 如果之前开过 8081,可关闭
ufw deny 8081/tcp

七、常见问题

现象 排查方向
界面一直空 检查设备是否发 Flow、SNMP 团体字是否正确、接口分类是否配置
ClickHouse 启动慢 正常,第一次初始化较久
内存占用高 Kafka + ClickHouse 正常,可适当降低分区数或保留时间
查询很慢 增加 ClickHouse 内存、检查磁盘 IO、适当增加 Kafka 分区

八、占用端口说明

Akvorado Docker Compose 部署默认会在宿主机上占用以下端口,建议在部署前确认这些端口未被占用,并根据实际网络环境做好防火墙放行。

对外暴露端口(必须关注)

端口 协议 服务 用途 建议
8081 TCP Traefik / Console Web 管理界面 生产环境建议通过 Nginx 反向代理后关闭直接访问,或仅限内网
2055 UDP Inlet NetFlow v5 / v9 设备发送 Flow 必须放行
4739 UDP Inlet IPFIX 设备发送 Flow 必须放行
6343 UDP Inlet sFlow 设备发送 Flow 必须放行

仅本机回环暴露端口

端口 协议 说明
8080 TCP 仅绑定 127.0.0.1,用于内部 API、指标、调试,不建议对外暴露

内部通信端口(不映射到宿主机)

以下端口仅在 Docker 网络内部使用,正常情况下无需在宿主机防火墙放行:

端口 服务 用途
9092 Kafka 消息队列
9000 ClickHouse 数据库查询
8123 ClickHouse HTTP 接口
6379 Redis 缓存
8080 Orchestrator / Inlet / Outlet / Console 内部 API

其他说明

  • SNMP(161/UDP):Akvorado 主动向设备发起查询,属于出站流量,不需要在 Akvorado 服务器上开放 161 端口。只需确保设备允许 Akvorado 服务器 IP 做 SNMP 查询即可。
  • 如果启用了 Prometheus / Grafana / Loki 等监控组件,还会额外占用对应端口,具体以 .env 中启用的 compose 文件为准。
  • 可通过以下命令查看实际占用情况:
1
2
docker compose ps
ss -tulnp | grep -E '8081|2055|4739|6343'

防火墙推荐配置示例(UFW)

1
2
3
4
5
6
7
8
9
# 仅放行 Flow 接收端口和反向代理端口
ufw allow 2055/udp
ufw allow 4739/udp
ufw allow 6343/udp
ufw allow 80/tcp # Nginx
ufw allow 443/tcp # Nginx HTTPS(如启用)

# 如已使用 Nginx 反向代理,建议关闭直接访问
ufw deny 8081/tcp

以上端口信息基于官方 Docker Compose 默认配置整理,实际以你部署时的 docker-compose.yml 和 config/inlet.yaml 为准。

九、Linux 安装采集器并发送流量到 Akvorado

当没有支持 NetFlow/IPFIX/sFlow 的路由器时,可在 Linux 服务器上部署软件采集器,把本机网卡流量导出到 Akvorado。官方推荐 pmacct(sFlow)和 ipfixprobe(IPFIX)两种方案。

方案一:pmacct(推荐,sFlow)

1. 安装

1
2
3
4
5
# Debian / Ubuntu
apt update && apt install -y pmacct

# CentOS / RHEL
yum install -y pmacct

2. 配置文件

编辑 /etc/pmacctd/config.conf(路径可能因发行版略有不同):

1
2
3
4
5
6
7
8
9
10
11
daemonize: false
plugins: sfprobe[any]
sfprobe_receiver: <Akvorado服务器IP>:6343
aggregate: src_host,dst_host,in_iface,out_iface,src_port,dst_port,proto
pcap_ifindex: map
pcap_interfaces_map: /etc/pmacctd/interfaces.map
pcap_interface_wait: true
sfprobe_agentsubid: 1402
sfprobe_agentip: <本机IP> # 填 Linux 采集器自己的 IP
sampling_rate: 1000 # 采样率,按流量大小调整
snaplen: 128

3. 接口映射文件

创建 /etc/pmacctd/interfaces.map,按实际网卡填写 ifindex:

1
2
3
4
5
6
ifindex=1 ifname=lo direction=in
ifindex=1 ifname=lo direction=out
ifindex=3 ifname=eth0 direction=in
ifindex=3 ifname=eth0 direction=out
ifindex=4 ifname=eth1 direction=in
ifindex=4 ifname=eth1 direction=out

可用 ip link show 查看网卡名和对应 index。

4. 启动

1
2
3
4
5
# 前台测试
pmacctd -f /etc/pmacctd/config.conf

# 或使用 systemd(如发行版自带服务)
systemctl enable --now pmacctd

5. Akvorado 侧配置静态元数据(推荐,避免依赖 SNMP)

在 config/outlet.yaml 中增加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
metadata:
providers:
- type: static
exporters:
<Linux采集器IP>:
name: linux-exporter
ifindexes:
3:
name: eth0
description: WAN
speed: 10000
4:
name: eth1
description: LAN
speed: 10000

方案二:ipfixprobe(IPFIX)

适合需要更高性能或想用 IPFIX 的场景。

1. 安装

1
2
3
4
5
# 从源码或包管理器安装(部分发行版可直接装)
# 官方仓库:https://github.com/CESNET/ipfixprobe
git clone https://github.com/CESNET/ipfixprobe.git
cd ipfixprobe
# 按 README 编译安装(需要 libpcap 等依赖)

2. 运行示例

每个接口单独跑一个进程:

1
2
3
4
ipfixprobe \
-i "pcap;ifc=eth0;snaplen=128" \
-s "cache;active=10;inactive=10" \
-o "ipfix;host=<Akvorado服务器IP>;port=2055;udp;id=1;dir=1"
  • id 和 dir 用于区分不同接口方向,需与 Akvorado 静态元数据对应。
  • 默认使用双向流(RFC 5103),Akvorado 已支持。

3. Akvorado 侧同样配置静态元数据

方法与 pmacct 相同,把 ifindex 对应到 id/dir 即可。

验证

在 Akvorado 服务器上检查是否收到流量:

1
curl -s http://127.0.0.1:8080/api/v0/inlet/metrics | grep akvorado_inlet_flow_input_udp_packets

若计数器持续增长,说明采集器已成功向 Akvorado 发送数据。

注意事项

  • 采样率建议根据链路带宽调整,避免过高导致丢包。
  • Linux 本地生成的流量可能缺少入/出接口索引,属正常现象,不影响主要流量统计。
  • 生产环境建议使用 systemd 管理进程,并做好日志轮转。
  • 如需更高性能(10G+),可考虑 ipfixprobe 的 DPDK 模式。

参考:官方文档 GNU/Linux 部分(pmacct / ipfixprobe)。

运维技术交流群

发送邮件到 ➡️ [email protected]

或者关注WX公众号:网工格物

微信扫码

博客(最先更新)

https://songxwn.com/