本文目录导读:

pmacct 是一个网络流量监控工具,用于收集、聚合和导出网络流量数据(如 NetFlow, sFlow, IPFIX 等)以及数据包细节,它主要由两部分组成:
- pmacctd:数据包采集核心(基于 libpcap / pcap 读取数据包)。
- nfacctd / sfacctd:网络流协议收集器(接收 NetFlow, sFlow, IPFIX 等)。
下面详细介绍 pmacct 收集流量数据的主要机制和步骤。
核心收集机制
pmacct 的流量数据收集主要通过以下两种方式实现:
基于数据包捕获(使用 pmacctd)
这是最直接的收集方式,与 tcpdump 类似,但 pmacctd 能将捕获的数据包转化为聚合的流量统计信息。
- 工作原理:通过 libpcap 库(在 Linux 上常使用
AF_PACKET或PF_RING以提高性能)从网络接口抓取数据包。 - 处理流程:
- 捕获数据包。
- 解析 IP 头部(源、目标 IP、端口、协议等)、VLAN、MPLS 标签等。
- 按定义的聚合键(Aggregate Key)进行分类,按
src_host,dst_host,src_port,dst_port,proto组合成唯一的流量流。 - 累计统计信息:统计该聚合键下的数据包数量、字节数、时间戳等。
- 定期输出:按照设定的
pcap_sampling_rate或pcap_interval间隔,将内存中的聚合数据写入到指定存储(如文件、SQL 数据库、消息队列、内存表等)。
典型配置(pmacctd.conf)示例:
# 指定要监听的接口 interface: eth0 # 聚合的粒度(按源IP、目标IP、源端口、目标端口、协议聚合) aggregate: src_host, dst_host, src_port, dst_port, proto # 数据存储方式(例如输出为 CSV 文件或插入到 MySQL) # 输出到文件(文本格式,便于调试) plugins: print print_output_file: /var/log/pmacct/pmacctd.csv print_refresh_time: 300 # 每5秒输出一次(可选) print_history: 5m # 每5分钟生成一个文件 # 或者输出到 MySQL 数据库(便于分析) # plugins: mysql # sql_host: localhost # sql_user: pmacct # sql_password: password # sql_db: pmacct_db # sql_table_version: 1 # 采样率(性能调整,0表示全量捕获,100表示每100个包采1个) pcap_sampling_rate: 0
接收 NetFlow/sFlow/IPFIX 数据(使用 nfacctd 或 sfacctd)
这是更常见的被动收集方式,适合在核心交换机/路由器上部署,网络设备负责生成流记录,pmacct 负责接收汇总。
- 工作原理:
nfacctd或sfacctd在指定端口上监听 UDP 数据报(NetFlow v5/v9/IPFIX 通常端口 2055 或 9996,sFlow 通常端口 6343)。 - 处理流程:
- 接收设备发来的流记录(内置了 IP、端口、协议、时间戳、字节数、包数等)。
- 解析流格式(NetFlow / sFlow / IPFIX 各有不同字段集)。
- 根据配置文件中的
aggregate指令对接收到的流记录进行再聚合(如果需要,也可以不聚合直接传递原始流记录)。 - 将流数据输出到存储或分析后端。
典型配置(nfacctd.conf)示例:
# 监听端口(默认 NetFlow v5/v9 常用 2055) nfacctd_port: 2055 # 聚合方式(例如按源自制域、目标自制域、下一跳聚合,用于 BGP 流量分析) aggregate: src_as, dst_as, peer_src_as, peer_dst_as # 存储方式:输出到 内存哈希表(便于外部程序读取) plugins: memory memory_table_size: 128000 # 存储方式:同时输出到 MySQL plugins: mysql sql_db: pmacct_netflow sql_table_version: 1 # 如果交换机发送的是 NetFlow v9 或 IPFIX,可以开启模板自动学习 nfacctd_time_new: 300
数据聚合与存储
收集到数据后,pmacct 通过 插件 (plugins) 决定数据去向:
print插件:- 直接以文本或 CSV 格式写入文件。
- 适合测试、简单记录或小型环境。
mysql/pgsql插件:- 定期将聚合后的数据批量插入关系数据库。
- 适合构建流量报表系统、按时间查询历史流量。
memory插件:- 将数据保留在共享内存区。
- 适合需要极低延迟查询(例如实时展示 Top N 流量)的场景。
- 外部程序可以通过
pmacct -s命令或pmaqd(API守护进程)读取共享内存。
amqp/kafka插件:- 直接输出到消息队列(RabbitMQ, Kafka)。
- 适合构建大型实时流处理管道,便于对接 Elasticsearch、Spark 等。
tee插件:将流量数据转发到另一个 pmacct 实例或其他 NetFlow/sFlow 收集器。
高级功能:BGP 与 L4 过滤
- BGP 集成:
- pmacct 可以结合
pmbgpd或通过BGP daemon插件学习路由表。 - 这样,在聚合时不仅能知道 IP,还能知道该 IP 归属于哪个自治域 (AS)、哪个前缀 (prefix) 以及下一跳 (nexthop),这对于区分流量来源(本网流量 vs 互联互通流量)非常有用。
- pmacct 可以结合
- NetFlow v9 / IPFIX 自定义字段:
- 可以配置
nfacctd_aggregate来收集交换机支持的任意流字段(如 MPLS 标签、VXLAN VNI、应用层标识符等)。
- 可以配置
典型工作流程示例
假设您想收集公司出口路由器(启用 NetFlow)的所有流量,并存入数据库:
- 路由器配置:配置 NetFlow 将流导出到 pmacct 服务器 IP 的 2055 端口。
- pmacct 服务端:启动
nfacctd -f /etc/pmacct/nfacctd.conf。 - :
nfacctd_port: 2055aggregate: src_host, dst_host, src_port, dst_port, proto, src_as, dst_as(加上 AS 信息需配置 BGP 连接)plugins: mysqlsql_db: traffic_db
- 数据流向: 路由器 → UDP (2055) → nfacctd → 解析 → 按聚合键分组 → MySQL 插入。
pmacctd:用于直接抓包,适合流量采集(例如在一个服务器网卡上镜像流量)。nfacctd/sfacctd:用于接收网络设备的流,适合在大型网络中对交换机/路由器做集中式流量分析。- 核心能力:强大的聚合功能,灵活多变的输出插件,以及结合BGP实现 AS/前缀级别的流量分析。
根据您的网络环境和数据需求,选择合适的 pmacct 组件和配置文件即可。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播