部署Akvorado - 网络流日志收集分析系统
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 | docker version -f '{{ .Server.Version }}' |
二、快速部署(官方 Quickstart)
1 | mkdir -p /opt/akvorado && cd /opt/akvorado |
启动成功后,浏览器访问:
1 | http://<服务器IP>:8081 |
此时界面是空的,属于正常现象(还没有设备发送 Flow)。
三、核心配置
Quickstart 包已经拆分成多个配置文件,主要需要修改的是 config/outlet.yaml。
1. SNMP 团体字(必须)
打开 config/outlet.yaml,找到 metadata 部分,配置设备 SNMP:
1 | metadata: |
如果设备用 SNMPv3,参考官方配置文档增加 security-level、username、auth-protocol 等字段。
2. 接口分类(强烈建议)
没有分类规则时,首页图表和可视化会是空的。在 config/outlet.yaml 的 core 下配置:
1 | core: |
按你设备接口描述的实际命名习惯调整正则即可。
3. GeoIP(可选但推荐)
默认使用 IPinfo。如需 MaxMind:
编辑 .env,注释掉 IPinfo,启用 MaxMind,并填入账号信息:
1 | # COMPOSE_FILE=${COMPOSE_FILE}:docker/docker-compose-ipinfo.yml |
4. 关闭 Demo(生产环境)
编辑 .env,注释掉 demo 相关行:
1 | # COMPOSE_FILE=${COMPOSE_FILE}:docker/docker-compose-demo.yml |
同时检查 config/akvorado.yaml 末尾是否有 demo-exporter 引入,有则删除或注释。
修改完配置后重启:
1 | docker compose down |
四、设备侧配置
在路由器/交换机上把 Flow 指向 Akvorado 服务器:
| 协议 | 端口 |
|---|---|
| NetFlow v5/v9 | 2055/UDP |
| IPFIX | 4739/UDP |
| sFlow | 6343/UDP |
同时确保设备允许 Akvorado 服务器做 SNMP 查询。
五、常用运维命令
1 | # 查看服务状态 |
六、Nginx 反向代理 + Basic Auth
官方自带 Traefik,也可直接用 Traefik 做 Basic Auth。如果你更习惯 Nginx,按下面方式部署即可。
1. 安装 Nginx 并生成密码文件
1 | # Debian/Ubuntu |
2. Nginx 配置示例
创建 /etc/nginx/sites-available/akvorado:
1 | server { |
如果已经有 HTTPS 证书,可再加一个 443 server 块,配置 ssl_certificate 等即可。
3. 启用配置并重启
1 | ln -s /etc/nginx/sites-available/akvorado /etc/nginx/sites-enabled/ |
之后访问 http://akvorado.example.com(或你的 IP),浏览器会弹出 Basic Auth 登录框。
4. 防火墙建议
1 | # 只开放 Nginx 端口,关闭直接暴露的 8081 |
七、常见问题
| 现象 | 排查方向 |
|---|---|
| 界面一直空 | 检查设备是否发 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 | docker compose ps |
防火墙推荐配置示例(UFW)
1 | # 仅放行 Flow 接收端口和反向代理端口 |
以上端口信息基于官方 Docker Compose 默认配置整理,实际以你部署时的 docker-compose.yml 和 config/inlet.yaml 为准。
九、Linux 安装采集器并发送流量到 Akvorado
当没有支持 NetFlow/IPFIX/sFlow 的路由器时,可在 Linux 服务器上部署软件采集器,把本机网卡流量导出到 Akvorado。官方推荐 pmacct(sFlow)和 ipfixprobe(IPFIX)两种方案。
方案一:pmacct(推荐,sFlow)
1. 安装
1 | # Debian / Ubuntu |
2. 配置文件
编辑 /etc/pmacctd/config.conf(路径可能因发行版略有不同):
1 | daemonize: false |
3. 接口映射文件
创建 /etc/pmacctd/interfaces.map,按实际网卡填写 ifindex:
1 | ifindex=1 ifname=lo direction=in |
可用 ip link show 查看网卡名和对应 index。
4. 启动
1 | # 前台测试 |
5. Akvorado 侧配置静态元数据(推荐,避免依赖 SNMP)
在 config/outlet.yaml 中增加:
1 | metadata: |
方案二:ipfixprobe(IPFIX)
适合需要更高性能或想用 IPFIX 的场景。
1. 安装
1 | # 从源码或包管理器安装(部分发行版可直接装) |
2. 运行示例
每个接口单独跑一个进程:
1 | ipfixprobe \ |
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公众号:网工格物
