热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

flow的采集与分析vflow项目分析和解读

前言vflow这个开源项目,是我一开始做flow这块的最开始参考的项目。虽然到最后,我们没有使用这个项目,但是该项目是一个企业级的处理netflow等协议的项目,有许多地方值得去研

前言

vflow这个开源项目,是我一开始做flow这块的最开始参考的项目。虽然到最后,我们没有使用这个项目,但是该项目是一个企业级的处理netflow等协议的项目,有许多地方值得去研究。
《flow的采集与分析---vflow项目分析和解读》

特性

  • PFIX RFC7011 collector
  • sFLow v5 raw header packet collector
  • Netflow v9 collector
  • Decoding sFlow raw header L2/L3/L4
  • Produce to Apache Kafka, NSQ, NATS
  • Replicate IPFIX to 3rd party collector
  • Supports IPv4 and IPv6
  • Monitoring with InfluxDB and OpenTSDB backend

架构

《flow的采集与分析---vflow项目分析和解读》

Dynamic pool

提供了work pool,而且wokrer数量是根据buff堆积消息数量动态调整的,这点之前文章介绍过实现方式。

插件架构

vFlow 支持 Kafka,NSQ,NATS三种消息队列,但是你可以很容易地将消息写到其他的消息队列,比如 RabbitMQ。

package producer
import (
"log"
"sync"
)
// Producer represents messaging queue
type Producer struct {
MQ MQueue
MQConfigFile string
MQErrorCount *uint64
Topic string
Chan chan []byte
Logger *log.Logger
}
// MQueue represents messaging queue methods
type MQueue interface {
setup(string, *log.Logger) error
inputMsg(string, chan []byte, *uint64)
}
// NewProducer constructs new Messaging Queue
func NewProducer(mqName string) *Producer {
var mqRegistered = map[string]MQueue{
"kafka": new(Kafka),
"nsq": new(NSQ),
"nats": new(NATS),
"rawSocket": new(RawSocket),
}
return &Producer{
MQ: mqRegistered[mqName],
}
}
// Run configs and tries to be ready to produce
func (p *Producer) Run() error {
var (
wg sync.WaitGroup
err error
)
err = p.MQ.setup(p.MQConfigFile, p.Logger)
if err != nil {
return err
}
wg.Add(1)
go func() {
defer wg.Done()
topic := p.Topic
p.MQ.inputMsg(topic, p.Chan, p.MQErrorCount)
}()
wg.Wait()
return nil
}
// Shutdown stops the producer
func (p *Producer) Shutdown() {
close(p.Chan)
}

提供了接口,如果扩展到其他的消息队列,实现接口即可。

扩展支持更多的协议

vflow暂时支持sflow和netflow协议,对于cflow和netstream,我们可以扩展实现。我已经扩展了netstream的模块。在vflow.go中,加入指定的flow worker。如下:

//版本太老,不再支持
netflow5 := NewNetFlowV5()
netstream5 := NewNetStreamV5()
// 主要支持四大协议
sFlow := NewSFlow()
ipfix := NewIPFIX()
netflow9 := NewNetflowV9()
netstream9 := NewNetStreamV9()
protos[0] = sFlow
protos[1] = ipfix
protos[2] = netflow9
protos[3] = netstream9
protos[4] = netflow5
protos[5] = netstream5
for _, p := range protos {
wg.Add(1)
go func(p proto) {
defer wg.Done()
p.run()
}(p)
}

支持监控

在monitor文件夹下提供了监控相关,目前支持metrics导入到influxdb和opentsdb。
提供了完善的metrics指标。
《flow的采集与分析---vflow项目分析和解读》

硬件要求

LoadIPFIX PPSCPURAM
low<1K2-464M
moderate<10K8+256M
high<50K12+512M
x-high<100K24+1G

总结

1)udp的负载均衡
这里nginx就支持udp协议的代理。
2)关于最终存放flow采集以后的数据,vflow提供了clickhouse和memsql以及spark三种思路。
3)当然我们之所以没有采用vflow,是因为我们编写了telegraf的flow input插件,可以充分利用telegraf提供的各种输出插件以及过滤器等。


推荐阅读
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • RabbitMQ的消息持久化处理
    1、RabbitMQ的消息持久化处理,消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢——消息持久化。2、auto ... [详细]
  • 讨伐Java多线程与高并发——MQ篇
    本文是学习Java多线程与高并发知识时做的笔记。这部分内容比较多,按照内容分为5个部分:多线程基础篇JUC篇同步容器和并发容器篇线程池篇MQ篇本篇 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 在我们编写的程序中,如果想要实现对浏览器打开的网页进行监视、模拟操纵、动态提取用户输入、动态修改等功能,那么请你抽出宝贵的时间,继续往下阅读。本文介绍的知识和示例程序都 ... [详细]
author-avatar
神奇伟哥
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有