网络流量分析利器-可视化网络-netflow【6】-生产网流量监控架构设计

网络流量分析利器-可视化网络-netflow【1】-基础原理
网络流量分析利器-可视化网络-netflow【2】-Cisco NetFlow 工作原理介绍及配置
网络流量分析利器-可视化网络-netflow【3】-netflow版本5和版本9区别
网络流量分析利器-可视化网络-netflow【4】-接收器nfdump简介
网络流量分析利器-可视化网络-netflow【5】-linux下数据采集器fprobe
网络流量分析利器-可视化网络-netflow【6】-生产网流量监控架构设计
fprobe参数 -e
fprobe参数 -n -k

拓扑图

网络流量分析利器-可视化网络-netflow【6】-生产网流量监控架构设计

监控点选择

监控点的选择主要取决于要监控的数据流,如果将监控点放在公网口,则捕获的地址均为公网地址,如果监控点部署在负载均衡内网口,则捕获的数据有公网地址和内网地址两种。
选在公网口,此时要注意,如果想使用fprobe进行1:1采样,需要将流量镜像到一台linux物理服务器上,虚拟机应该是不可以的,因为虚拟机会将非目标地址的数据包丢弃,无法捕捉镜像下来的数据包,如果使用多线bgp对接运营商的话,请先查看交换机文档,再进行镜像配置,避免镜像口拥塞影响业务口的数据包进出。
选在负载均衡内网口,如果负载均衡是linux服务器,可以直接将fprobe部署在linux服务器上,如果无法使用fprobe,那就需要镜像数据到一个linux物理服务器上,再通过fprobe的处理。
选在交换机网关上,直接使用交换机的netflow配置即可,不过要注意采样比,防止cpu内存等消耗过大,影响生产。

基于交换机采集的配置

详细配置请查看各交换机netflow文档
基本知识及思路:网络流量分析利器-可视化网络-netflow【2】-Cisco NetFlow 工作原理介绍及配置

配置举例

flow record try
description test
match ipv4 source address
match ipv4 destination address
match ipv4 protocol
match transport sourceport
match transport destinationport
collect counter bytes
collect counter packets long
collect timestamp sysuptime first
collect timestamp sysuptime last

flow exporter try_exporter
description test_ex
destination 10.136.76.117
source Loopback1
transport udp 9999
template data timeout 30

flow monitor try
description test
exporter try_exporter
cache type immediate
record try

sampler test1
mode deterministic 1 outof 2

interface GigabitEthernet0/0/4
ip flow monitor try sampler test1 input
ip flow monitor try sampler test1 output

基于fprobe采集的配置及自启动监控

安装方法请查看网络流量分析利器-可视化网络-netflow【5】-linux下数据采集器fprobe

配置举例

fprobe -i eth0 -e 10 10.2.82.60:9999

自启动脚本:

为了防止进程异常或者重启导致fprobe失效,使用一下脚本生成crontab作业,进行定期检查。脚本通过查找端口为9999端口来确定fprobe的启动命令。请确保已经启动了fprobe进程。

## 检查基本配置并生成jian_netflow文件夹
ll /jian_netflow/
ps -ef | grep fpro | grep -v grep
crontab  -l|grep netflow
mkdir /jian_netflow
cd /jian_netflow 

## 生成do_netflow.sh脚本
res=$(ps -ef | grep fpr|grep -v grep|grep -o fpro.*999)
echo 'res_ps=$(ps -ef | grep fprobe | grep -v grep)' > do_netflow.sh 
echo 'if [ -z "$res_ps" ];then' >> do_netflow.sh 
echo '/usr/sbin/'$res >> do_netflow.sh 
echo 'fi' >> do_netflow.sh 
cat do_netflow.sh 
chmod 755 do_netflow.sh 
echo '*/1 * * * * cd /jian_netflow/&&/bin/bash do_netflow.sh'>>/var/spool/cron/root ##配置crontab作业

## 检查生成结果
ll /jian_netflow/do_netflow.sh  ## 检查do_netflow.sh是否存在
tt=$?
ps -ef | grep fpro | grep -v grep ## 检查fprobe进程是否启动
ff=$?
crontab  -l|grep netflow ## 检查crontab作业是否存在
nn=$?
echo result:$tt'|'$ff'|'$nn ##返回处理结果,如果是全0就正确
ls  ##查看/jian_netflow下的文件,应该看到do_netflow.sh这个脚本

nfdump配置及高可用

安装方法请查看网络流量分析利器-可视化网络-netflow【4】-接收器nfdump简介
nfdump基本配置(监听9999端口):

nfcapd -w 1 -t 60 -D -p 9999 -T all -S 0 -l /data1/netflow/netflow_neiwang -P nfcapd_neiwang.pid

高可用:

这里使用keepalived软件生成Vip,其实使用的是vrrp协议,请查看【连接(我还没写)】,两台nfdump接收器,同时使用keepalived软件,效果是其中一台服务器上承载Vip,另一台处于热备状态,一旦主设备宕机,备设立马承载Vip。
安装并启动:

yum -y install keepalived 
service keepalived start

确定Vip,并配置(Vip请使用同网段且冲突地址,)

## A设备
## cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
}
vrrp_instance GLOBAL_10_20.81.183 {
    state BACKUP
    interface eth0
    virtual_router_id 212
    priority 190
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.20.81.183
    }
}

## B设备
## cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
}
vrrp_instance GLOBAL_10_202.81.183 {
    state BACKUP
    interface eth0
    virtual_router_id 212
    priority 190
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.202.81.183
    }
}

## 配置完两台设备,需要两台设备同时重启
service keepalived restart

## keepalived自启动
chkconfig keepalived on

keepalived配置好,如果防火墙策略没开通,会出现两台设备上同时承载Vip,这样的情况是很糟糕的,因为Vip会相互抢占,导致数据无法连续接收。执行以下命令,添加放通vrrp协议的策略

iptables -A INPUT -p vrrp -j ACCEPT
service iptables save

检查:使用ip a,查看两台设备,应该只有一边承载Vip。

整理及定时压缩脚本

作用:

整理脚本:对生成的nfcapd文件进行移动,记录日志等操作,请在nfcapd文件正常生成之后再运行脚本。

定时压缩脚本:第二天凌晨对前一天生成的nfcapd文件进行压缩,并删除过期压缩数据,这里设定删除45天前的压缩文件。

存放位置:

nfcapd指定的文件夹。本实例中存放位置为:/data1/netflow/netflow_neiwang

执行命令:

## 如果整理脚本为exchange.sh则请执行
nohup sh exchange_neiwang.sh &
## 如果定时压缩脚本为yasuo.sh则请执行
nohup sh yasuo.sh &

整理脚本

#!/bin/bash
#起始时间:
# date --date=@1506651600 +%Y%m%d%H%M
#201709291020
#date -d "2014-12-05 19:45:44" +%s
#1417779944

###############可变参数
time_i=$(date -d "+1 minute"  "+%Y-%m-%d %H:%M")
timestamp=$(date -d "$time_i" +%s)
#起始时间
###############################################

###############固定参数
save_route1=../nfdump_imfo
#存储一天压缩包tgz路径
####################################

while [ 1 ]
    do
        #ee是指定的日期包含分钟,eedir指定的文件夹日期只有日
        ee=$(date --date=@$timestamp +%Y%m%d%H%M )
        eedir=$(date --date=@$timestamp +%Y%m%d )
        file=nfcapd.$ee
        folder_nfdump_infoname=nfdump_info_$eedir

        #如果没有指定的文件加,就生成一个,用于tgz存储用,按日期保存
        #如果没有指定的文件加,就生成一个,用于nfcapd存储用,按日期保存
        #如果没有指定的文件加,就生成一个,用于log存储用,按日期保存
        if [ ! -d "$save_route1" ];then
            mkdir $save_route1
        fi
        if [ ! -d "$folder_nfdump_infoname" ];then
            mkdir $folder_nfdump_infoname
        fi
        if [ ! -d "log_netflow" ];then
            mkdir log_netflow
        fi
        #将生成的nfcapd文件整理到$folder_nfdump_infoname文件夹中
        #并记录日志
        #文件存在sleep 5s,不存在 sleep 60s
        if [ -f "$file" ];then
            echo 读取$file  >> log_netflow/log.txt_$eedir
            mv $file $folder_nfdump_infoname/$file      
            timestamp=$[$timestamp+60]
            sleep 5
        else
            echo 不存在$file >> log_netflow/log.log_$eedir
            sleep  60
        fi
done

定时压缩脚本

###############固定参数
save_route1=../nfdump_imfo
####################################

while [ 1 ]
    do
        #eedir指定的文件夹日期只有日
        eedir=$(date  +%Y%m%d )
        folder_nfdump_infoname=nfdump_info_$eedir
            if [ -f  ${folder_nfdump_infoname}/nfcapd.${eedir}0100 ];then
                time_i_yasuo=$(date -d "-1 day"  "+%Y%m%d")
                folder_nfdump_infoname=nfdump_info_$time_i_yasuo
                if [ -d $folder_nfdump_infoname ];then
                tar -zcvf "$folder_nfdump_infoname".tgz $folder_nfdump_infoname  >> log_netflow/log.tgz_$time_i_yasuo
                echo $(date) 生成"$folder_nfdump_infoname".tgz >> log_netflow/log.txt_$time_i_yasuo
                mv "$folder_nfdump_infoname".tgz $save_route1
                echo $(date) 移动"$folder_nfdump_infoname".tgz >> log_netflow/log.txt_$time_i_yasuo
                rm -rf "$folder_nfdump_infoname"
                echo $(date) 删除"$folder_nfdump_infoname"文件夹 >> log_netflow/log.txt_$time_i_yasuo
                            fi  
            fi
    sleep  60  

    time_i_delete=$(date -d "-45 day"  "+%Y%m%d")
    folder_nfdump_infoname_delete=nfdump_info_$time_i_delete
                #要删除的9天前的tgz文件名   
    rm -rf "$save_route1"/"$folder_nfdump_infoname_delete".tgz
                #删除45天前的tgz文件
done

流量查询

扩展(未完成)

获取到一分钟的数据包流量,可以转换成带宽,并且筛选特定地址。进行内网地址的流量成本核算。

存储(未完成)

将数据已特定格式存储到数据库中。

展示(未完成)

通过grafana进行展示

猜你喜欢

转载自blog.51cto.com/9346709/2477486
今日推荐