跳至主要内容

Fastnetmon+influxdb+grafana搭建流量可视化

最近公司更换了新的交换机,乘着这个时候,顺便把Internet流量分析给做了。

之前的流量分析是很古老的mtrg,基本无法自定义,而且通过一台物理机去抓包,没有虚拟化着实浪费。

        通过一阵research,cisco的网络设备都支持netflow,来分级和诊断网络流量。netflow协议是cisco提出的,直接将流量结果发送给收集设备,省去了抓包的环节。 这样不需要占用额外的物理网卡,而且cpu的开销也会降低很多。

        确定了方向,那么开始在互联网上寻找开源netflow分析方案。做得比较好的是ntopng和fastnetmon。

        这两个开源方案都有免费社区版和付费版,都有尝试搭建。

        ntopng自带web界面,功能非常多,但我们目前只需要做流量top的功能,ntopng的功能太复杂,而且流量分析结果需要付费版才用得好。

        fastnetmon的免费版连web界面都有没,但是支持graphite和grafana,虽然功能简陋,但系统开销也少,而且相关的资源也比较多,可自定义的设定比较多。


        接下来就是开始搭建环境和网络配置


        目标是分析Internet流量的使用状况,可以直接在router上做net flow,也可以在core switch上对连接router的port做,这里选择在switch上将连接router的port上做net flow

        根据cisco的netflow v9说明,需要配置flow record、flow exporter和flow monitor。

        首先新建flow record。

        en

        config terminal

    

        创建input方向的record

        flow record ct50m-record-input

        Description Internet Netflow Input Record

        match datalink vlan input

        match datalink mac source address input

        match datalink mac destination address input

        match ipv4 tos

        match ipv4 ttl

        match ipv4 protocol

        match ipv4 source address

        match ipv4 destination address

        match transport source-port

        match transport destination-port

        match interface input

        match flow direction

        match flow cts source group-tag

        match flow cts destination group-tag

        collect transport tcp flags

        collect interface input

        collect counter bytes long

        collect counter packets long

        collect timestamp absolute first

        collect timestamp absolute last

        

        


        创建output方向的record

        flow record ct50m-record-output

        Description Internet Netflow Output Record

        match datalink mac destination address output

        match ipv4 tos

        match ipv4 ttl

        match ipv4 protocol

        match ipv4 source address

        match ipv4 destination address

        match transport source-port

        match transport destination-port

        match interface output

        match flow direction

        match flow cts source group-tag

        match flow cts destination group-tag

        match datalink vlan output

        collect transport tcp flags

        collect interface output

        collect counter bytes long

        collect counter packets long

        collect timestamp absolute first

        collect timestamp absolute last

        


        然后创建flow exporter,这里填写分析net flow服务的ip和端口,以及vlan。

        flow exporter ct50m-exporter

        destination xx.xx.xx.xx

        transport udp 2055

        source vlan x   


        接下来创建flow monitor,每个monitor只能对应一个flow record,需要创建两个flow monitor。

         flow monitor ct50m-monitor-input

        flow record ct50m-record-input

        flow exporter ct50m-exporter    

        

        创建第二个flow monitor

        flow monitor ct50m-monitor-output

        flow record ct50m-record-output

        flow exporter ct50m-exporter        


        这样record、exporter和monitor都创建完后,在需要监控的端口套用monitor

        interface g x/0/x

        flow monitor ct50m-monitor-input

        flow monitor ct50m-monitor-output


        至此,交换机上的配置完成,开始搭建fastnetmon的环境。


        先起一台虚拟机,安装fastnetmon的说明,最少4cpu、8G内存和50G硬盘空间,并分配网络地址。

        这里使用ubuntu 20.04 lts。

        安装完后配置国内repo地址

        sudo cp /etc/apt/sources.list    /etc/apt/sources.list.bak

        sudo nano /etc/apt/sources.list

        #网易源

        deb http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse

        deb-src http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse

        deb http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse

        deb-src http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse

        deb http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse

        deb-src http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse

        deb http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse

        deb-src http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse  


        执行更新
        sudo apt-get update && sudo apt-get upgrade -y
        
        使用Asia/Shanghai这个timezone
        sudo timedatectl set-timezone Asia/Shanghai
        

        因为使用pve安装系统,安装qemu-guest-agent可以在pve里查看更多的vm信息。
        sudo apt-get install qemu-guest-agent        

        关闭vm,在pve的选项里,将QEMU guest agent启用,这个默认是关闭的。
        Vm启动后就可以看到网络信息。

        使用apt-fast 提升下载速度的软件,安装软件时,通过增加线程使下载软件速度加快。
        sudo add-apt-repository ppa:apt-fast/stable
        sudo apt-get install apt-fast -y
        
        先添加apt-fast的安装源 然后安装。在出现的GUI画面依此选择替换apt-get, 设置最大16线程,到这一步就安装好了。


        配置完后开始安装fastnetmon社区版
        wget https://install.fastnetmon.com/installer -Oinstaller
        sudo chmod +x installer
        sudo ./installer -install_community_edition

        接下来编辑/etc/fastnetmon.conf配置
        开启subnet统计、配置netflow和graphite数据库
        enable_subnet_counters = on
        netflow = on
        netflow_port = 2055
        netflow_host = 0.0.0.0
        # Please use only IP because domain names are not allowed here
        graphite_host = 127.0.0.1
        graphite_port = 2003

        # Default namespace for Graphite data
        graphite_prefix = fastnetmon
        
        编辑/etc/networks_list,将需要监控的网段填入。
        10.x.x.0/24
        10.x.x.0/24    

        编辑/etc/networks_whitelist,将排除网段填入。
        10.x.x.0/24
        10.x.x.0/24

        重启fastnetmon服务
        sudo service fastnetmon restart
        
        查看fastnetmon的运行状况
        fastnetmon_client

        接下来安装和配置influxdb
        fastnetmon只支持influxdb 1.x,根据influxdb的说明进行安装influxdb1.8 oss installation
        wget https://dl.influxdata.com/influxdb/releases/influxdb_1.8.7_amd64.deb
        sudo dpkg -i influxdb_1.8.7_amd64.deb
        
        编辑influxdb,增加graphite支持。
        sudo nano /etc/influxdb/influxdb.conf
        增加以下配置
        [[graphite]]
          enabled = true
          bind-address = ":2003"
          protocol = "tcp"
          consistency-level = "one"
          separator = "."
          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
        systemctl restart influxdb
        systemctl restart fastnetmon

        查看influxdb是否有创建graphite数据
        influx
        > use graphite
        Using database graphite
        > show measurements
        name: measurements
        ------------------
        hosts
        networks
        total
        >

        接下来安装社区版grafana
        sudo apt-get install -y apt-transport-https
        sudo apt-get install -y software-properties-common wget
        wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
        echo "deb https://packages.grafana.com/oss/deb beta main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
        sudo apt-get update
        sudo apt-get install grafana

        开启grafana服务
        sudo service grafana-server start
        用浏览器访问http://ip:3000/即可访问grafana
        默认账号密码admin:admin,第一次登陆需要修改密码
        进去后在configuration里点击data sources,选中influxdb
        url内填写    http://127.0.0.1:8086
        database填写    graphite
        点击save&test完成grafana datasource的配置

        然后去这里添加fastnetmon的dashboardgrafana_dashboards

评论

此博客中的热门博文

PVE安装Windows 11虚拟机 step by step

Win 11已经发布有两周多了,因为引进了tpm机制,只支持较新的设备安装,对于虚拟机的支持不高。 目前各个虚拟化平台针对win 11已经有对应的方案,今天来介绍一下PVE 7.0安装win 11虚拟机。 提前下载win11和virtio win 11的镜像。 win 11镜像下载这里就不说了,很多途径。 virtio的镜像在这里下载https://github.com/virtio-win/virtio-win-pkg-scripts,下载最新的virtio win iso。 新建和配置虚拟机 点击新建虚拟机 给虚拟机起名,然后下一步。 选择加载win 11镜像文件,系统类型选择windows。 系统配置这里: bios选择OVMF(UEFI);机器选择q35;勾选TPM,并选择TPM版本为v2.0;然后存储的位置选择同一个存储。 硬盘设备选择VirtIO,磁盘大小选择64G,32G其实也可以,但是微软要求最低64G。 设置CPU和内存,微软要求最低2核8G,这里我们给4核8G,因为是单节点,所以CPU类型勾选host。 配置网卡信息后继续。 这里不要勾选自动创建后启动,确认配置信息后点击完成。 到新建的虚拟机这里,新建光驱。 选择下载的驱动镜像,点击创建。 完成后点击启动。 启动后进入windows安装界面,这里照一般操作进行。 到安装类型这里选择 自定义安装。 到选择安装位置这里会无法显示硬盘信息,因为缺少驱动,点击加载驱动程序。 然后点击浏览。 选择驱动镜像下的amd64下的w10文件夹,点击确定。 加载驱动后磁盘控制器能够显示,点击下一页。 选中显示的磁盘后点击下一步进行安装。 文件复制完后会重启几次。 安装完成后会启动第一次配置界面。 输入账户信息后进行系统配置。 配置完成后进入桌面。 在设备管理器中有一些设备未能正确识别。 进入驱动镜像,运行virtio-win-ge-x64安装文件安装驱动。 安装完成后,所有设备都能正确识别。 至此win11虚拟机安装完成。

搭建cups服务,并提供云打印服务。

Google的云打印服务已经在2020年底结束,所以不得不寻找新的解决方案。 之前家里使用一台windows虚拟机内置的打印服务,使用windows单单作为一台打印服务器实在是太过浪费。 因为家里有ubuntu的虚拟机跑plex服务,计划在ubuntu上运行打印服务。 linux上最为成熟的打印服务就是cups了,然后在软路由上搭建open vpn,即可实现任何地方打印文档。 一.cups服务安装。     首先安装cups服务     sudo apt install cups     修改配置文件     sudo  cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.bak     sudo nano  /etc/cups/cupsd.conf     新增监听地址     Listen 192.168.1.x:631      BrowseAllow all      BrowseAddress All      <Location />            Order allow,deny            Allow all      </Location>      <Location /admin>          Order allow,deny          Allow all     </Location>      <Location /admin/conf>          Order allow,deny          Allow all     </Location>     然后用浏览器访问https://192.168.1.x:631/admin     添加打印机     add printer     选择local printer里本地的打印机 然后点击下一步     勾选share this printer然后点击下一步     在model里寻找打印机型号,如果没有需要安装打印机     我的打印机是epson入门型号l310,需要手动安装。     去epson的网站https://download.ebz.epson.net/dsc/search/01/search/searchModule寻

利用Nextcloud搭建私有云盘

最近有同学的手机丢了,幸运的是手机最后有找回来。 大部分人手机里有非常多的照片,手机丢了可以买新的,照片丢了就再也找不回来了。因此数据的备份显得非常重要。 因为家里有NAS做raid 1,并且定期做异地备份,数据的安全性还是蛮高的。就有搭建私有云盘的想法。 上网搜索了一下,发现nextcloud是用得比较多的。此次就选用nextcloud来搭建我们的私有云盘。 首先在家里的服务器上新建一台vm,这里选用debian 11,装系统的过程就不讲了。 安装完成后,利用nfs挂载nas的存储 新建挂载目录 mkdir /mnt/nextcloud 编辑/etc/fstab,加入如下一行 192.168.x.x:/volume1/NextCloud /mnt/nextcloud nfs defaults 0 0 这里ip地址和nas存储路径用自己的配置替代 然后sudo mount -a测试一下 接下来开始安装依赖件 安装mariadb sudo apt update sudo apt -y install mariadb-server mariadb-client 配置数据库 sudo mysql_secure_installation  sudo mysql -u root -p 输入配置的密码以登录 配置nextcloud的数据库和用户 CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY '密码'; CREATE DATABASE nextcloud; GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost'; FLUSH PRIVILEGES; QUIT 安装php和apache2 sudo apt -y install php php-{cli,xml,zip,curl,gd,cgi,mysql,mbstring} sudo apt -y install apache2 libapache2-mod-php 修改php配置 sudo vim /etc/php/*/apache2/php.ini date.timezone = Asia/Shanghai memory_lim