pmacct如何收集流量数据

联启 网络工具 17

本文目录导读:

pmacct如何收集流量数据-第1张图片-电脑手机工具软件下载 - 免费实用工具合集 | 联启科技

  1. 核心收集机制
  2. 数据聚合与存储
  3. 高级功能:BGP 与 L4 过滤
  4. 典型工作流程示例

pmacct 是一个网络流量监控工具,用于收集、聚合和导出网络流量数据(如 NetFlow, sFlow, IPFIX 等)以及数据包细节,它主要由两部分组成:

  • pmacctd:数据包采集核心(基于 libpcap / pcap 读取数据包)。
  • nfacctd / sfacctd:网络流协议收集器(接收 NetFlow, sFlow, IPFIX 等)。

下面详细介绍 pmacct 收集流量数据的主要机制和步骤。

核心收集机制

pmacct 的流量数据收集主要通过以下两种方式实现:

基于数据包捕获(使用 pmacctd

这是最直接的收集方式,与 tcpdump 类似,但 pmacctd 能将捕获的数据包转化为聚合的流量统计信息。

  • 工作原理:通过 libpcap 库(在 Linux 上常使用 AF_PACKETPF_RING 以提高性能)从网络接口抓取数据包。
  • 处理流程
    1. 捕获数据包。
    2. 解析 IP 头部(源、目标 IP、端口、协议等)、VLAN、MPLS 标签等。
    3. 按定义的聚合键(Aggregate Key)进行分类,按 src_host, dst_host, src_port, dst_port, proto 组合成唯一的流量流。
    4. 累计统计信息:统计该聚合键下的数据包数量、字节数、时间戳等。
    5. 定期输出:按照设定的 pcap_sampling_ratepcap_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 数据(使用 nfacctdsfacctd

这是更常见的被动收集方式,适合在核心交换机/路由器上部署,网络设备负责生成流记录,pmacct 负责接收汇总。

  • 工作原理nfacctdsfacctd 在指定端口上监听 UDP 数据报(NetFlow v5/v9/IPFIX 通常端口 2055 或 9996,sFlow 通常端口 6343)。
  • 处理流程
    1. 接收设备发来的流记录(内置了 IP、端口、协议、时间戳、字节数、包数等)。
    2. 解析流格式(NetFlow / sFlow / IPFIX 各有不同字段集)。
    3. 根据配置文件中的 aggregate 指令对接收到的流记录进行再聚合(如果需要,也可以不聚合直接传递原始流记录)。
    4. 将流数据输出到存储或分析后端。

典型配置(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 互联互通流量)非常有用。
  • NetFlow v9 / IPFIX 自定义字段
    • 可以配置 nfacctd_aggregate 来收集交换机支持的任意流字段(如 MPLS 标签、VXLAN VNI、应用层标识符等)。

典型工作流程示例

假设您想收集公司出口路由器(启用 NetFlow)的所有流量,并存入数据库:

  1. 路由器配置:配置 NetFlow 将流导出到 pmacct 服务器 IP 的 2055 端口。
  2. pmacct 服务端:启动 nfacctd -f /etc/pmacct/nfacctd.conf
    • nfacctd_port: 2055
    • aggregate: src_host, dst_host, src_port, dst_port, proto, src_as, dst_as (加上 AS 信息需配置 BGP 连接)
    • plugins: mysql
    • sql_db: traffic_db
  3. 数据流向: 路由器 → UDP (2055) → nfacctd → 解析 → 按聚合键分组 → MySQL 插入。
  • pmacctd:用于直接抓包,适合流量采集(例如在一个服务器网卡上镜像流量)。
  • nfacctd/sfacctd:用于接收网络设备的流,适合在大型网络中对交换机/路由器做集中式流量分析。
  • 核心能力:强大的聚合功能,灵活多变的输出插件,以及结合BGP实现 AS/前缀级别的流量分析。

根据您的网络环境和数据需求,选择合适的 pmacct 组件和配置文件即可。

标签: pmacct NetFlow

抱歉,评论功能暂时关闭!