IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    NetFLOW / sFLOW 流量报告:FastNetMon + InfluxDB + Grafana

    Phoenix Nemo发表于 2017-06-05 22:44:46
    love 0

    最近稍微有点时间折腾了下 Cisco 的三层交换,尝试搭建了一套数据中心用的流量统计/监控/报告系统。过程不是很复杂,但是也只算利用了一套高级软件组合的一点点功能。之后打算继续研究更多的功能实现,不过也要看有没有时间了…

    准备工作

    首先确认出口路由设备支持 netflow/sflow 的对应版本。一般 Cisco 的路由器或者三层交换都是支持的。

    然后准备一个常见的 Linux 系统,虚拟机或者物理机都可以。

    出口路由设备能够连通到该 Linux 系统,并且 flow collector 设置到该 Linux 系统的 IP 地址和对应端口。

    FastNetMon

    安装 fastnetmon,只需要一条简单的脚本命令。

    然后将所有要监控的网段加入 /etc/networks_list。一行一个,例如:

    1
    2
    3
    10.1.0.0/16
    192.168.254.0/24
    8.8.0.0/16

    按照安装文档打开两个终端,分别启动主进程和客户端

    1
    /opt/fastnetmon/fastnetmon
    1
    /opt/fastnetmon/fastnetmon_client

    如果没有问题,应该在客户端上可以看到收到的 flow 数据。

    先关闭 fastnetmon 进程,修改配置文件打开 Graphite 支持:

    1
    2
    3
    4
    graphite = on
    graphite_host = 127.0.0.1
    graphite_port = 2003
    graphite_prefix = fastnetmon

    InfluxDB

    安装 InfluxDB,官方提供了各种包管理器的安装方式。

    配置文件一般位于 /etc/influxdb/influxdb.conf,需要根据环境做安全相关设置(侦听地址、端口、鉴权、etc)并打开 Graphite Simulation

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [[graphite]]
    enabled = true
    bind-address = "127.0.0.1:2003"
    database = "flow_dc1"
    protocol = "tcp"
    consistency-level = "one"
    name-separator = "."

    # batch-size / batch-timeout requires InfluxDB >= 0.9.3
    batch-size = 5000 # will flush if this many points get buffered
    batch-timeout = "1s" # will flush at least this often even if we haven't hit buffer limit

    templates = [
    "fastnetmon.hosts.* app.measurement.cidr.direction.function.resource",
    "fastnetmon.networks.* app.measurement.cidr.direction.resource",
    "fastnetmon.total.* app.measurement.direction.resource"
    ]

    顺序重启 InfluxDB 和 fastnetmon。检查 flow 数据是否记录到 InfluxDB:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ influx
    Connected to http://localhost:8086 version 1.2.4
    InfluxDB shell version: 1.2.4
    > use flow_dc1
    Using database flow_dc1
    > select mean(value) from networks where direction = 'incoming' and resource = 'bps' group by *
    name: networks
    tags: app=fastnetmon, cidr=10_1_0_0_24, direction=incoming, resource=bps
    time mean
    ---- ----
    0 4735.049632696411

    Grafana

    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)

    即可看到有图表出现。根据需求完善查询语句和图表配置即可简单实现各种可视化效果。例如流量和数据包的实时报告:

    Traffic Graph

    PPS Graph

    总结

    通过配合 FastNetMon,InfluxDB 和 Grafana 即可快速实现一套基于 NetFLOW / sFLOW 的流量统计报告系统。但是 FastNetMon 的功能远不止流量统计,Grafana 也有大量插件和灵活的用法可以满足更多需求。如果配置合理,此方案也可适用于 40Gbps+ 接入的中型数据中心且成本低廉。以及——

    1. InfluxDB 真的很快!
    2. Grafana 的图表真的很省资源!
    3. Chronograph 卡死了我的浏览器!(i7-7700K / Chrome)


沪ICP备19023445号-2号
友情链接