F5记录链接表脚本

    今天群里正好有人问一个状况,用户的业务并发链接忽然飙升,做为部署在敏感位置的F5设备,并无自动记录链接请求日志的现成功能,若发生这种状况,用户须要知道当时的链接表状况,起码要知道是哪一个IP地址发出的大量请求。
bash

    F5面对这种状况,基本有2个选择:
服务器

一、在VS中关联iRule,记录每次的tcp请求状况,包括请求原地址、源端口、net成内部地址、net成内部端口、分发到哪台服务器等信息。可是记录这些日志很是消耗设备性能,我记的有一个用户就非要作这个,怎么劝都不听,他的设备并发峰值是1200万/s,也就是有可能一瞬间要写入上百万条日志,非要作就作吧,邮件里把事情的状况写明,致使的后果写明,iRule给他,要作就本身作吧。果不其然,真是立竿见影,放上去点了一下“update”,设备宕机了。并发

二、每隔一段时间去检查一下链接表条目数,若是超过阀值就记录当前的链接表状况,而且根据原地址进行过滤排序。我认为这种方式要好一些,就算你的并发有1200万,我显示链接表,对链接表信息过滤等等操做,也只是相对速度慢了一些,对设备不会形成太大影响。tcp


#!/bin/bash

function define()
{
    threshold=20000
    log_path=/tmp/f5_conn_log/
    user=`whoami`
}

function check()
{
    if [ $user != root ];then
        echo "Please use root user."
        exit 1
    fi
    
    if [ ! -d $log_path ];then
        mkdir $log_path
    fi
}

function gather()
{
    while true
    do
        timestamp=`date +%Y%m%d_%H%M%S`
        num_conn=`tmsh show sys connection | wc -l`
        
        if [ $num_conn -gt $threshold ];then
            tmsh show sys connection>${log_path}${timestamp}.log
            awk -F ':' '{print $1}' ${log_path}${timestamp}.log | sort -nr | uniq -c | sort -nr | head -20 >> ${log_path}${timestamp}_top.log
        fi
        
        sleep 300
    done
}

function main()
{
    define
    check
    gather
}

main


脚本是个while死循环,使用的时候加上&放到后台,能够设置为开机启动。ide

每次取到的信息是2个文本文件,一个是完整的链接表,另外一个是对链接表进行过滤排序的top20。性能

[root@F5:Active] f5_conn_log # cat 20160114_164101_top.log 
   5841 192.168.1.7
   1674 192.168.1.104
   1462 164.115.20.151
    317 192.168.4.110
    274 192.168.4.84
    258 192.168.1.248
    257 192.168.4.13
    246 192.168.1.76
    214 192.168.1.85
    199 192.168.1.146
    183 192.168.1.120
    169 192.168.1.166
    165 192.168.1.134
    163 172.18.0.131
    161 192.168.1.115
    155 100.90.90.150
    153 192.168.1.6
    148 192.168.100.76
    142 172.18.0.107
    137 192.168.1.150
相关文章
相关标签/搜索