Golang Cloudflare-goflow的使用与解析

Golang Cloudflare-goflow的使用与解析 我尝试使用 goflow 解码 netflow v5、v9、ipfix 和 sflow。 我克隆了 https://github.com/cloudflare/goflow/tree/v3.4.5/cmd/goflow 并编译了该项目。

我发送了 1000 个数据包的 Netflow 流量,其中每个数据包包含 10 个流。 总流数 = 1000 * 10 = 10000 个流。

当我尝试使用 goflow 解码 netflow V9、V5 和 ipfix 流量时,结果只有 3000 个流。但我实际发送的流数是 10000 个

我还尝试发送 50000 个流,结果也只有 3000-5000 个流。我想知道最大流数是否只能是 3000-5000 个?


更多关于Golang Cloudflare-goflow的使用与解析的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang Cloudflare-goflow的使用与解析的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


根据你的描述,这很可能与goflow的默认采样率配置或缓冲区设置有关。goflow默认可能配置了采样率,导致只有部分流被处理。

首先检查你的goflow配置文件中是否有sampling相关配置。如果没有明确配置,goflow可能使用了默认采样率。

你可以尝试以下解决方案:

  1. 明确设置采样率为1:1(无采样):
# 在配置文件中添加
sampling:
  netflow:
    v9: 1
    v5: 1
  ipfix: 1
  1. 增加处理器的缓冲区大小
// 如果你使用代码方式配置
processor := &utils.StateNetFlow{
    Transport: &utils.DefaultLogTransport{},
    Workers:   4,  // 增加工作线程数
    BatchSize: 1000,  // 增加批处理大小
}
  1. 检查是否启用了流聚合
# 确保流聚合被禁用
aggregate:
  enabled: false
  flush_interval: 60
  1. 使用完整的配置示例
version: "3"
logging:
  level: "info"
  format: "auto"
  
netflow:
  listen: "0.0.0.0:2055"
  workers: 4
  batch_size: 1000
  sampling:
    v9: 1
    v5: 1
    ipfix: 1
  
ipfix:
  listen: "0.0.0.0:4739"
  workers: 4
  batch_size: 1000
  sampling: 1

sflow:
  listen: "0.0.0.0:6343"
  workers: 4
  batch_size: 1000
  sampling: 1
  1. 如果使用命令行运行
./goflow -sampling.netflow.v9=1 -sampling.netflow.v5=1 -sampling.ipfix=1 -workers=4
  1. 检查是否有流被过滤
// 确保没有设置过滤器
processor := &utils.StateNetFlow{
    Transport: &utils.DefaultLogTransport{},
    Workers:   4,
    // 不要设置FilterFn,除非需要特定过滤
    // FilterFn: nil,
}
  1. 监控处理统计
// 添加统计信息输出
type StatsTransport struct {
    count int64
}

func (t *StatsTransport) Publish(msgs []*utils.ProducerMessage) {
    atomic.AddInt64(&t.count, int64(len(msgs)))
    fmt.Printf("Processed %d flows, total: %d\n", len(msgs), atomic.LoadInt64(&t.count))
}

如果问题仍然存在,建议检查:

  • 网络丢包情况
  • 系统资源限制(文件描述符、内存)
  • 是否启用了流超时或缓存清理机制

默认情况下goflow没有3000-5000个流的硬性限制,这很可能是配置问题导致的。

回到顶部