最近稍微有点时间折腾了下 Cisco 的三层交换,尝试搭建了一套数据中心用的流量统计/监控/报告系统。过程不是很复杂,但是也只算利用了一套高级软件组合的一点点功能。之后打算继续研究更多的功能实现,不过也要看有没有时间了…
首先确认出口路由设备支持 netflow/sflow 的对应版本。一般 Cisco 的路由器或者三层交换都是支持的。
然后准备一个常见的 Linux 系统,虚拟机或者物理机都可以。
出口路由设备能够连通到该 Linux 系统,并且 flow collector 设置到该 Linux 系统的 IP 地址和对应端口。
安装 fastnetmon,只需要一条简单的脚本命令。
然后将所有要监控的网段加入 /etc/networks_list
。一行一个,例如:
1 | 10.1 /16 |
按照安装文档打开两个终端,分别启动主进程和客户端
1 | / /fastnetmon/fastnetmon |
1 | / /fastnetmon/fastnetmon_client |
如果没有问题,应该在客户端上可以看到收到的 flow 数据。
先关闭 fastnetmon 进程,修改配置文件打开 Graphite 支持:
1 | graphite = on |
安装 InfluxDB,官方提供了各种包管理器的安装方式。
配置文件一般位于 /etc/influxdb/influxdb.conf
,需要根据环境做安全相关设置(侦听地址、端口、鉴权、etc)并打开 Graphite Simulation
1 | [[graphite]] |
顺序重启 InfluxDB 和 fastnetmon。检查 flow 数据是否记录到 InfluxDB:
1 | $ influx |
Grafana 是一款非常强大且易用的数据可视化工具。安装 Grafana 然后修改配置文件的必要部分,配置文件一般位于 /etc/grafana/grafana.ini
。
完成后重启 Grafana,将浏览器指向 Grafana 的 HTTP 服务器地址即可看到登录界面。如果内部使用的话,建议关闭匿名访问和注册功能。
使用默认的 admin
/ admin
登录,按照引导完成配置、添加数据源(Data source),数据源即是 InfluxDB 的 HTTP API 地址。如果 Grafana 中限制了数据源白名单,需要将 InfluxDB 的 HTTP API 地址和端口加到白名单里。
添加面板、Graph,在 Graph 编辑模式里写入类似这样的查询语句:
1 | SELECT mean("value") FROM "networks" WHERE "direction" = 'incoming' AND "resource" = 'bps' AND "cidr" =~ /^10_1_0_0_16/ AND $timeFilter GROUP BY time($interval) fill(previous) |
即可看到有图表出现。根据需求完善查询语句和图表配置即可简单实现各种可视化效果。例如流量和数据包的实时报告:
通过配合 FastNetMon,InfluxDB 和 Grafana 即可快速实现一套基于 NetFLOW / sFLOW 的流量统计报告系统。但是 FastNetMon 的功能远不止流量统计,Grafana 也有大量插件和灵活的用法可以满足更多需求。如果配置合理,此方案也可适用于 40Gbps+ 接入的中型数据中心且成本低廉。以及——