F5記錄連接表腳本

    今天羣里正好有人問一個情況,用戶的業務併發連接突然飆升,作爲部署在敏感位置的F5設備,並沒有自動記錄連接請求日誌的現成功能,若發生這種情況,用戶需要知道當時的連接表情況,起碼要知道是哪個IP地址發出的大量請求。

    F5面對這種情況,基本有2個選擇:

1、在VS中關聯iRule,記錄每次的tcp請求情況,包括請求原地址、源端口、net成內部地址、net成內部端口、分發到哪臺服務器等信息。但是記錄這些日誌非常消耗設備性能,我記的有一個用戶就非要做這個,怎麼勸都不聽,他的設備併發峯值是1200萬/s,也就是有可能一瞬間要寫入上百萬條日誌,非要做就做吧,郵件裏把事情的情況寫明,導致的後果寫明,iRule給他,要做就自己做吧。果不其然,真是立竿見影,放上去點了一下“update”,設備宕機了。

2、每隔一段時間去檢查一下連接表條目數,如果超過閥值就記錄當前的連接表情況,並且根據原地址進行過濾排序。我認爲這種方式要好一些,就算你的併發有1200萬,我顯示連接表,對連接表信息過濾等等操作,也只是相對速度慢了一些,對設備不會造成太大影響。


#!/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死循環,使用的時候加上&放到後臺,可以設置爲開機啓動。

每次取到的信息是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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章